본문 바로가기

SWUFORCE - 워게임

[드림핵 WEB] Level1 워게임 csrf-2 문제풀이

https://dreamhack.io/wargame/challenges/269

 

 

 

csrf 1 문제랑 비슷하다 코드도 비슷한 부분이 많아서 다른 부분 위주로 살펴봤다 

일단 목표는 admin 계정으로 로그인 해야 하는 것이다

 

 

 

코드를 살펴보니 guest 랑 admin 계정 두개가 있는 것을 볼 수 있다

guest 계정은 비번까지 있는데 admin 계정의 비번을 알아내야 되는 것 같다

 

 

 

 

 

먼저 guest 계정으로 로그인 했더니 쿠키가 생겼다

쿠키 변조를 이용하는 건가 이것저것 시도해봤는데 안된다 .. 

 

 

 

 

쿠키를 가져오는 check_csrf 함수를 실행하는 페이지 부분을 살펴봐야겠다

이때 read_url 함수는 작성한 csrf 구문을 admin 계정이 읽는 것과 같은 의미로 볼 수 있다 ★

flag 페이지에서 공격 코드를 작성했고 공격을 당하는 피해자가 내가 보낸 코드를 읽었으니 비밀번호가 변경된 것이다 ☆

 

 

 

 

 

check_csrf 함수는 /flag 페이지에서 나온다

*나머지 부분은 해석이 완전히 안된다..;

 

 

 

 

*여기도 코드가 완전히 이해되지는 않는다..;

대충 비밀번호를 바꾸는 코드이다

 

 

 

 

 

지난번에 풀었던 문제에서 교훈을 얻었기에 먼저 페이지 라우터 관련 코드 먼저 살펴봤더니 주어진 웹페이지에 보이지 않는 또 다른 페이지를 코드에서 발견했다

주소 마지막에 /change_password 를 붙여서 이동하니 Done 이라고 출력된 페이지가 나온다

 

 

 


 

여기까지 시도해봤는데 그 이후는 혼자 힘으로는 무리다 ...

그리고 공격 코드를 직접 작성하는 것도 무리다 ...

 

 

 

아까 해석하지 못한 코드를 마자 보겠다

 

 

따라서 admin 계정의 패스워드는 모르지만 패스워드를 변경할 수 있는 것이다

/flag 코드를 보면 해당 페이지에서 POST 메소드 요청 시 admin 세션으로 요청한다는 것을 알 수 있다

그러면 이 페이지에서 파라미터를 입력할 경우 admin 세션으로 요청하기 때문에 패스워드를 변경할 수 있을 것이다

 

 

 

 

 

현재 guest 계정으로 로그인한거고 세션도 guest 세션으로 유지되고 있다

주어진 페이지에는 보이지 않지만 패스워드를 변경하는 기능을 소스 코드를 통해 확인할 수 있다

파라미터(pw)를 입력하면 해당 패스워드로 변경이 가능하도록 URL에 요청하여 변경할 수 있다

 

 

 

<img src="/change_password?pw=admin">

 

admin 계정 비밀번호를 admin으로 바꾸는 코드이다

admin이 아닌 아무거나 바꿀 수 있는 것이다

 

 

 

 

flag에 이 코드를 입력해 내가 정한 비밀번호로 admin 계정의 비밀번호를 바뀐다

admin 계정으로 로그인하면

 

 

 

 

 

 

DH{c57d0dc12bb9ff023faf9a0e2b49e470a77271ef}

 

 

플래그가 나온다 !!!!

 

 

 

 

 

https://goldsony.tistory.com/m/262

https://ascrim9.tistory.com/20

 

감사합니다...♥