홈페이지 취약점 분석 이야기 | 파일 지도 사진 깨알 |
---|
>> 목록보이기 HTML 삽입 취약점 탐지방법
HTML 삽입 취약점은 모든 입력에 대해서 수행해야 한다.
HTML 삽입(HTML Injection) 취약점이 발생하는 지점은 웹 브라우저에서 전달되는 값이 HTML 내에 출력되는 곳이다.
HTML삽입이 가능하면 대부분의 공격은 자바스크립트(Javascript)를 이용한다.
이 때문에 다른 곳에서(cross-site) 전달되는 스크립트를 실행(scripting)한다고 하여 일반적으로는
일반적인 HTML삽입 점검
서버의 응답에 HTML을 삽입하려면 입력에서 HTML을 받아들여야 한다.
모든 URL 매개변수가 그 대상이 될 수 있다.
게시판이나 댓글이라면 제목, 본문, 이메일, 첨부파일 이름, 게시자 이름, 별명, 관련URL 등 조작할 수 있는 모든 값이
점검 대상이 된다.
HTML 삽입 여부는 부등호( WebGoat의 Phishing with XSS 문제를 예로 들어보자. GET http://192.168.189.238:8080/WebGoat/attack?Screen=1330&menu=900&Username=0oooo&SUBMIT=Search HTTP/1.1 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0 Accept: */* Accept-Language: en-US,en;q=0.5 X-Requested-With: XMLHttpRequest Referer: http://192.168.189.238:8080/WebGoat/start.mvc Cookie: JSESSIONID=CE447BFD08F5694FD087123CCB888CB1 Connection: keep-alive Content-Length: 0 Host: 192.168.189.238:8080
HTTP 요청을 살펴보면 위와 같다.
검색어를 root@kali:~# curl --cookie "JSESSIONID=CE447BFD08F5694FD087123CCB888CB1" "http://192.168.189.238:8080/WebGoat/attack?Screen=1330&menu=900&Username=0oooo&SUBMIT=Search" 2> /dev/null | grep 0oooo <div id="lessonContent"><form accept-charset='UNKNOWN' method='POST' name='form' action='#attack/1330/900' enctype=''><h1>WebGoat Search </h1><table align='center' cellspacing='0' border='0' cellpadding='2'><tr><td colspan='2'> </td></tr><tr><th colspan='2' align='center'>This facility will search the WebGoat source.</th></tr><tr><td colspan='2'> </td></tr><tr><td align='right'><b>Search: </b></td><td align='left'><input name='Username' type='TEXT' value='0oooo'></td></tr><tr align='center'><td colspan='2'><input name='SUBMIT' type='SUBMIT' value='Search'></td></tr></table><br><hr><br>Results for: 0oooo<!-- Search results --><br><br><b>No results were found.</b><!-- End of Search results --></form></div> root@kali:~#
root@kali:~# curl --cookie "JSESSIONID=CE447BFD08F5694FD087123CCB888CB1" "http://192.168.189.238:8080/WebGoat/attack?Screen=1330&menu=900&Username=%0A0oooo%0A&SUBMIT=Search" 2> /dev/null | grep 0oooo 0oooo 0oooo root@kali:~#
일반적인 입력에서는 줄이 매우 길어서 점검하기 불편하므로 검색어의 좌우로 줄바꾸기(LF) 문자를 붙였다.
LF의 URL 인코딩 값은 root@kali:~# curl --cookie "JSESSIONID=CE447BFD08F5694FD087123CCB888CB1" "http://192.168.189.238:8080/WebGoat/attack?Screen=1330&menu=900&Username=%0A%3C0oooo%3E%0A&SUBMIT=Search" 2> /dev/null | grep 0oooo <0oooo> <0oooo> root@kali:~#
root@kali:~# curl --cookie "JSESSIONID=CE447BFD08F5694FD087123CCB888CB1" "http://192.168.189.238:8080/WebGoat/attack?Screen=1330&menu=900&Username=%0A%3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E%0A&SUBMIT=Search" 2> /dev/null | grep document.cookie <script>alert(document.cookie)</script> <script>alert(document.cookie)</script> root@kali:~#
HTML 삽입이 가능한 것을 알았으므로 이제는 자바스크립트 입력이 가능한지 시험해면 위와 같다.
자바스크립트 코드 삽입 점검사용자의 입력값이 자바스크립트 내에 출력되는 경우가 있다. 이 경우에는 서버에서 적절한 방어를 하지 못하면 부등호(<, >) 기호 없이도 XSS 공격이 가능할 수 있다.
어느 취약한 웹 애플리케이션이 사용자가 " <script> var user_name='0oooo'; alert(user_name); </script>
이런 경우라면 공격자는 입력 값을 " <script> var user_name='0oooo'; alert(document.cookie); //'; alert(user_name); </script>
자바스크립트는
HTML삽입 방지는 간단하다.
사용자의 모든 입력값에서 [처음 작성한 날: 2016.12.11] [마지막으로 고친 날: 2016.12.14] < 이전 글 : 웹해킹 사례: 유명 홈페이지를 악성코드 배포 경유지로... (2016.12.13) > 다음 글 : 오늘의 웹서버 공격 로그, Axis2, 공개프록시 (2016.12.10) 이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다. 잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다. 문서의 시작으로 컴퓨터 깨알지식 웹핵 누리집 대문 |