※ 주의사항
아래 공격 코드는 연구 목적으로 작성된 것이며, 허가 받지 않은 공간에서는 테스트를 절대 금지합니다.
악의 적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신한테 있습니다. 이는 해당 글을 열람할 때 동의하였다는 것을 의미합니다.
해당 문서의 저작권은 해당 저자에게 모두 있습니다. 상업적으로 이용할시 법적 조치가 가해질 수 있습니다.
개요
웹 서비스에 응답한 결과에 대한 것을 PDF 파일 형식이나 이미지 형식으로 변환해주는 wkhtmltopdf 과 Nmap nse를 결합하여 모의침투에서도 활용할 수 있는 도구를 소개합니다.
상세 분석
명령어는 아래와 같이 진행을 하면 됩니다. wkhtmltoimage는 바이너리 파일만 제공을 하기 때문에 /usr/bin 디렉터리에 이동을 시키고, nse 스크립트는 Namp script 폴더에 이동을 시킵니다.
root@bt:~# wget http://wkhtmltopdf.googlecode.com/files/wkhtmltoimage-0.11.0_rc1-static-i386.tar.bz2
--2012-06-15 21:28:51-- http://wkhtmltopdf.googlecode.com/files/wkhtmltoimage-0.11.0_rc1-static-i386.tar.bz2
Resolving wkhtmltopdf.googlecode.com... 74.125.31.82, 2404:6800:4008:c01::52
Connecting to wkhtmltopdf.googlecode.com|74.125.31.82|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11393207 (11M) [application/octet-stream]
Saving to: `wkhtmltoimage-0.11.0_rc1-static-i386.tar.bz2'
100%[===================================================================================>] 11,393,207 331K/s in 34s
2012-06-15 21:29:25 (332 KB/s) - `wkhtmltoimage-0.11.0_rc1-static-i386.tar.bz2' saved [11393207/11393207]
root@bt:~# tar -jxvf wkhtmltoimage-0.11.0_rc1-static-i386.tar.bz2
tar: Record size = 8 blocks
wkhtmltoimage-i386
root@bt:~# cp wkhtmltoimage-i386 /usr/local/bin/
root@bt:~# git clone git://github.com/SpiderLabs/Nmap-Tools.git
Initialized empty Git repository in /root/Nmap-Tools/.git/
remote: Counting objects: 15, done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 15 (delta 3), reused 15 (delta 3)
Receiving objects: 100% (15/15), done.
Resolving deltas: 100% (3/3), done.
root@bt:~# cd Nmap-Tools/NSE/
root@bt:~/Nmap-Tools/NSE# cp http-screenshot.nse /usr/local/share/nmap/scripts/
root@bt:~/Nmap-Tools/NSE# nmap --script-updatedb
모두 이동을 시킨 뒤에 nmap 명령어를 통해서 default 스크립트와 다운로드 받은 http-screenshot.nse 스크립트를 실행시킵니다.
root@bt:/usr/local/share/nmap/scripts# nmap -A --script=default,http-screenshot 192.168.58.130 -oA nmap-local
Starting Nmap 6.00 ( http://nmap.org ) at 2012-06-15 21:37 EDT
Nmap scan report for 192.168.58.130
Host is up (0.00024s latency).
Not shown: 992 closed ports
PORT STATE SERVICE VERSION
25/tcp open smtp Microsoft ESMTP 6.0.2600.5512
80/tcp open http Apache httpd
| http-screenshot:
|_ Saved to screenshot-nmap-192.168.58.130:80.png
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn
445/tcp open microsoft-ds Microsoft Windows XP microsoft-ds
1027/tcp open msrpc Microsoft Windows RPC
1947/tcp open http Aladdin HASP license manager 12.31
| http-screenshot:
|_ failed (verify wkhtmltoimage-i386 is in your path)
3306/tcp open mysql MySQL
MAC Address: 00:0C:29:63:6A:68 (VMware)
Device type: general purpose
Running: Microsoft Windows XP
OS CPE: cpe:/o:microsoft:windows_xp::sp2 cpe:/o:microsoft:windows_xp::sp3
OS details: Microsoft Windows XP SP2 or SP3
Network Distance: 1 hop
Service Info: Host: ngnicky-e6cf203; OS: Windows; CPE: cpe:/o:microsoft:windows
TRACEROUTE
HOP RTT ADDRESS
1 0.24 ms 192.168.58.130
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 16.40 seconds
정보를 획득하게 되면 응답으로 받은 값을 사진 파일로 변환을 하게 됩니다. html 파일 형식을 png 파일로 변환을 하는 것이죠. screenshot-nmap-192.168.58.130:80.png 을 클릭하면 아래와 같은 화면이 나옵니다.
불필요한 php 파일을 찾아낸것이죠? 수동으로 하나하나 접근을 하지 않더라도 결과까지 이미지로 만들어주니 진단할 때 매우 편리할 거라고 판단이 됩니다.
NSE 스크립트 파일은 [여기]에서 다운로드 가능합니다.
아래 소스를 보면 매우 간단한 구조 입니다. NSE는 단지 wkhtmltoimage-i386 실행을 포트별로 연결해주는 역할밖에 없습니다. 아이디어뿐이죠!!!!
action = function(host, port) -- Check to see if ssl is enabled, if it is, this will be set to "ssl" local ssl = port.version.service_tunnel
-- The default URLs will start with http:// local prefix = "http"
-- Screenshots will be called screenshot-namp-<IP>:<port>.png local filename = "screenshot-nmap-" .. host.ip .. ":" .. port.number .. ".png"
-- If SSL is set on the port, switch the prefix to https if ssl == "ssl" then prefix = "https" end
-- Execute the shell command wkhtmltoimage-i386 <url> <filename> local cmd = "wkhtmltoimage-i386 -n " .. prefix .. "://" .. host.ip .. ":" .. port.number .. " " .. filename .. " 2> /dev/null >/dev/null"
ret = os.execute(cmd)
-- If the command was successful, print the saved message, otherwise print the fail message local result = "failed (verify wkhtmltoimage-i386 is in your path)"
if ret == 0 then result = "Saved to " .. filename end
-- Return the output message return stdnse.format_output(true, result)
end
|
실제 이 도구를 활용하였을 때 업무 효율성은 느껴지는 속도는 10배정도 빨라집니다. 그리고, 그만큼 취약점을 찾아내는 속도 및 갯수는 더욱더 많아지는것을 확인하였습니다.
참고 URL 및 도서
- http://blog.spiderlabs.com/2012/06/using-nmap-to-screenshot-web-services.html