session


  • 로그인 페이지(/login)로 접속하면 HTML 소스에서 주석 처리된 계정정보를 확인할 수 있습니다.


- 해당 계정으로 로그인하면, 서버 측에서 `sessionId`를 발급해 줍니다.


  • 문제 소스를 뜯어보면, 세션을 발급해주는 코드는 login() 함수인데요.
  • 맨 아래 __main__ 메인 함수 실행 부분을 보면, os_urandom(1).hex() 값으로 관리자 계정 세션이 저장되고 있습니다.
    • 로그인을 하지 않아도 관리자 세션 정보가 저장되고 있으므로, 악용이 가능해 보입니다.


  • index() 함수를 보면, 현재 로그인 된 사용자의 sessionId 값을 통해 관리자 계정 여부를 확인하고 있습니다.
    • / 경로는 홈페이지 좌측 상단의 Session 버튼 부분이고, 이 경로로 접근할 때 세션 값을 변조하면 되겠네요.


  • os.urandom(1).hex 값은 1바이트 값을 HEX로 표현하는 것이기 때문에 15^2 만큼의 경우의 수가 존재합니다.
    • 버프스위트의 인트루더 기능을 사용하여 관리자 세션 ID를 쉽게 찾을 수 있습니다.


🐛.. 🐛.. 🐛..