본문 바로가기
웹 해킹

CSRF 1번 문제(GET Amin 1)

by kk-nic 2024. 7. 20.

CSRF 1번 문제

 

 

로그인페이지

id: qw / pw: qw 로 회원가입 후 로그인을 해보았다.

(자연스레 qw_admin  관리자 계정이 생성이 된다.)

 

 

로그인 후

 

마이페이지, 게시판, 로그아웃 기능이 구현 되어있다.

마이페이지로 들어가보자. CSRF문제이고, 관리자의 비밀번호를 변경해야하기때문에

비밀번호 변경이 되는지 먼저 확인 해보아야 한다.

http://ctf.segfaulthub.com:7575/csrf_1/mypage.php?user=qw

 

버프스위트로 잡아놓고, 패스워드를 pw 로 변경 해보자.

Request 메시지
http://ctf.segfaulthub.com:7575/csrf_1/mypage_update.php

- POST 메서드를 사용

- 파라미터는 id, info, pw 사용 

- 요청메시지의 "인증 정보" 없이 비밀번호 변경 가능 확인.

 

 

GET Method 요청 가능 여부 확인

 

버프스위프트에서 요청메시지를 잡고, 우클릭 - Chage request method 클릭

GET /csrf_1/mypage_update.php?id=&info=&pw=qw HTTP/1.1

 

http://ctf.segfaulthub.com:7575/csrf_1/mypage_update.php

 

Get method로 요청을 해도 비밀번호가 변경이 된다.

자,

요청메시지의 "인증 정보" 없고, Get 메서드로 요청 해도 비밀번호가 변경 된다?

그러면 비밀번호를 변경 할 수 있는 URL을 만들어서 사용자들이 클릭만 할 수 있게 만들면, 

사용자(피해자)는 클릭 하는 행위 만으로도 공격자가 원하는 비밀번호로 변경을 할 수 있다.

 

공격 URL : 

http://ctf.segfaulthub.com:7575/csrf_1/mypage_update.php?id=&info=&pw=1234

비밀번호를 1234 로 변경하는 GET요청 URL 이다.

 

여기서 간과한 것이 있다.

해당 URL을 클릭하면 리턴메시지로 alert('회원 정보 수정에 성공하셨습니다!')  이 돌아온다.

http://ctf.segfaulthub.com:7575/csrf_1/mypage_update.php


이러면 피해자들도 단번에 공격  인것을 감지 할 것 이다.

 

게시글을 들어가서 해당  URL을 클릭하는 것만으로는 속이기 어렵다.

그러면, 게시글을 클릭하여 들어가는 것만 으로도 비밀번호가 돌아오고, 리턴도 안받는 방법을 찾아야 한다.

 

img 태그 이용 

HTML의 img 태그는 웹 페이지에 이미지를 삽입하는 데 사용된다. 

img 태그 중에 src 속성은 source 의 줄임말로, 이미지가 어느 경로에 있는지 기입한다. ( 이미지 파일의 경로를 지정)

<img src="경로/image.jpg">

위 와 같이 사용하면, 이미지가 있는 경로로 이미지를 찾아가게된다. (요청) 

이런 특징을 이용해서 공격을 해보자.

 

XSS 취약점 찾기

img 태그를 사용하기 위해서는 < > 꺽쇠가 게시글 제목이나 본문에서 사용이 가능해야한다.

XSS 보안 솔루션으로 HTML Entity 가 적용이 되어있는지 확인해보자.

 

< " ' > 로 XSS 테스트

 

< " ' > 로 XSS 테스트를 해보자.  

게시글 만들기 - 버트스위트에서 메시지 잡기 - 생성한 게시글 들어가보자.

 

리턴메시지로 필터링이 되지 않고, 그대로 표현 된다. 

게시글에는 제목. 본문 부분에는 XSS 취약점이 존재한다.

이제 <img src=""> 태그를 사용 할 수 있다.

 

CSRF + XSS 연계

<img src="http://ctf.segfaulthub.com:7575/csrf_1/mypage_update.php?id=&info=&pw=1234" alt="메롱">

글쓰기 완료!

 

나의 계정으로 테스트 해보자.

현재까지 나의 계정 비밀번호는  qw / qw 이다.

 

클릭해보자.

게시글 들어가보면, 위와같은 결과만 나오고, 아무런 액션이 없다.

하지만,  GET메서드로 비밀번호가 1234 로 변경 되었을 것이다.

 

버프스위프트 리피터기능을 이용해서 아이디 qw / 비밀번호 qw 를 보내서 리스폰스를 확인 해보았다.

등록 되지 않은 사용자라는 응답메시지를 받았다.

 

아이디 : qw

비밀번호 : 1234 

로그인 결과, 정상 로그인이 되는 것을 확인 가능하다.

 

관리자 계정 비밀번호 탈취

공격코드가 삽입되어있는 게시글읠 URL

http://ctf.segfaulthub.com:7575/csrf_1/notice_read.php?id=701&view=1 

 

 

 

qw_admin / 1234 로 로그인

 

플래그 획득 성공!