csrf-2

- VM URL로 접속하면 로그인 페이지로 접근이 됩니다.
- 접속 계정 정보를 모르기 때문에, 바로 소스 파일을 확인해보았습니다.

guest / guest계정정보가 있으므로, 이 계정으로 로그인 해보겠습니다.

- “너는 관리자가 아니야” 메시지가 출력되는 걸 확인했습니다.
- 해당 문제의 토픽이 CSRF 이기 때문에, 일반 사용자의 권한을 관리자 권한으로 상승시키거나,
- 관리자 계정의 탈취를 시도하는 문제로 보이네요.

- 소스를 더 분석해보겠습니다.
app.py파일에는change_password()라는 함수가 있는데요.- /change_password 경로로 GET 요청이 들어올 때, 요청을 보낸 사용자의 세션 ID를 가져오고
- 세션 ID와 맵핑되는 계정(유저)의 패스워드를
pw파라미터 값으로 변경하고 있습니다.

flag()함수에서는 /flag 경로로 POST 요청이 들어오면admin계정의 세션을 생성하고- POST 요청 시 함께 입력된
param파라미터를check_csrf함수에 실어 보내고 있었습니다.

- 이후 구조는 이전에 풀이했던 xss-1, xss-2 문제들과 유사한데요. (관리자를 제하면 동일)
- (POST /flag) 경로 요청 시 입력된
param값이 /vuln 경로로 보내지고 관리자 권한으로 실행됩니다.

Proof of Concept
- 따라서, /flag 경로에서
param값에 악성 페이로드를 담아 보내면 되겠습니다.- 여기서 페이로드는 관리자의 패스워드를 변경하도록 하는 코드를 담아야 합니다.
- (공격 페이로드)
param=%3Cimg%2Fsrc%3D%22%2Fchange_password%3Fpw%3Dhacked%22%3E- 응답 값으로
alert("good")팝업이 발생하면 삽입한 코드가 문제없이 실행된 것입니다.
- 응답 값으로

- 이후 변경된 패스워드로 관리자(admin) 계정 로그인을 하면 플래그 확인이 가능합니다.

🐛.. 🐛.. 🐛..