Problem
How-To-Solve
우선 ID를 만들어준 후 내부를 확인해보자.
ID는 rokefoke로 작성하였다.
Profile화면이다.
Provate화면이다.
Contact화면이다.
우선 Update Profile을 하기 위해 전에 사용했던 disable을 제거한 후 시도하여보았다.
거절당하는 것을 확인할 수 있다.
그러면 contact에서 메일을 통해 CSRF를 시도하는 것이 좋아보인다.
우선 그전에 어떤 방식으로 script를 작성하는 것인가와 Profile에서 Submit을 시도했을 때 어떻게 요청하는지 확인해보도록 하겠다.
Update Profile을 요청할 때 username과 chackbox 값을 전달하는 것을 확인할 수 있다.
post로 요청을 하는데 이 때 multipart/form-data로 enctype이 설정되어 지는 것을 확인할 수 있다.
그러면 여기에서 알 수 있는 것은 일반 user의 권한으로 Update Profile은 불가능하고 admin권한으로 가능하다는 것을 알 수 있다.
그렇다면 admin권한이 부여될 경우 Private에서 flag를 확인할 수 있을 것 같다.
이 때 Contact를 사용하여 admin이 받은 메일에 접근한다는 설정이 가능해진다.
그렇다면 두가지 방향으로 생각을 해볼 수 있는데 직접 패킷을 발송하여 접근하는 방식과 admin이 메일에 접근한다는 가정하에 버튼을 눌러서 요청을 보내는 것과 접근하면 자동으로 요청하도록 작성하는 방법이 있다.
첫번째 방법은 직접 패킷을 발송하는 것과 큰 차이가 없으므로 직접 시도해본다.
<form action="http://challenge01.root-me.org/web-client/ch22/?action=profile" method="post" enctype="multipart/form-data">
<input type="text" name="username" value="rokefoke">
<input type="checkbox" name="status" checked>
<button type="submit">Submit</button>
</form>
위와 같은 CSRF 코드가 작성이 가능할 것이다.
다만 위에서의 방식은 직접 버튼을 눌러 실행하는 방식으로 CSRF공격을 시도하는 것이다.
페이지는 이렇게 작성된다.
로그인 후 시도를 할 경우 위와 같은 화면을 확인할 수 있다.
이것으로 확인할 수 있는 것은 직접 접근을 통해 Update Profile을 실행하는 것은 되지않는 다는 것을 알 수 있다.
그러면 두번째로 admin에게 메일을 보내 실행시키는 방식으로 시도해보겠다.
<form action="http://challenge01.root-me.org/web-client/ch22/?action=profile" method="post" enctype="multipart/form-data" id="rokefoke">
<input type="text" name="username" value="rokefoke">
<input type="checkbox" name="status" checked>
<script>javascript:document.getElementById("rokefoke").submit();</script>
</form>
코드는 위와 같이 작성된다.
전의 코드와의 차이점은 submit을 버튼으로 작성하여 누르면 요청이 보내지는 것과 접근만으로 요청이 보내지는 차이가 있다.
요청 ID값을 추가하여 진행하였다.
메일을 보내면 아래에 메일이 보내졌으며 admin이 나중에 너랑 컨택할거다 라고 쓰여있는 것을 확인할 수 있다.
보내고 바로 확인하면 Private에서 이렇게 뜨는 것을 확인할 수 있다.
하지만 조금 기다리면 위의 그림처럼 flag가 뜨는 것을 확인할 수 있다.
끝!
'Wargame > root me' 카테고리의 다른 글
[Web - Client] XSS DOM Based - AngularJS (0) | 2023.04.07 |
---|---|
[Web - Client] XSS DOM Based - Introduction (0) | 2023.04.06 |
[Web-Client] CSP Bypass - Inline code (0) | 2023.04.04 |
[Web - Clinet] XSS - Stored 1 (0) | 2023.04.03 |
[Web - Client] Javascript - Obfuscation 3 (0) | 2023.04.01 |