3/27/2016

[HACKING] NMAP Part2 - NSE(Nmap Script Engine)을 이용한 취약점 스캐닝(Vulnerability scan with NSE Script)

정말 오랜만에 글 작성하는 것 같네요. 매일 정신없이 하루를 보내고, 당분간은 쭉 그럴거 같습니다.. 지난번 nmap 정리에 대한 이야기의 연장선으로 NSE에 대해 잠깐 볼까합니다.


[HACKING] NMAP Part1 - nmap을 이용한 여러가지 네트워크 스캔 기법(network scan with nmap)
[HACKING] NMAP Part2 - NSE(Nmap Script Engine)을 이용한 취약점 스캐닝(Vulnerability scan with NSE Script)

Nmap script 인 NSE는 nmap을 통해 네트워크 스캔을 진행하거나, 취약점 진단을 수행할 때 요긴하게 쓰일 수 있는 스크립트입니다. Lua로 작성되어 있으며 nmap을 통해 포트스캔, 네트워크 접근 이외에도 더 넓은 범위의 체킹이 가능하게 해주는 중요한 도구지요.

NSE(Nmap Script Engine)?

위에서도 대충 설명드렸지만 NSE는 nmap에서 사용되는 script 입니다. lua로 개발되었으며 아래와 같이 5개 카테고리의 script 를 가지고 있습니다.

1. Network discovery
2. More sophisticated and accurate OS version detection
3. Vulnerability detection
4. Backdoor detection
5. Vulnerability exploitation


NSE Update & NSE List Check

nse script update는 nmap 사용 시 --script-update, --script-updatedb 옵션으로 업데이트를 진행할 수 있습니다.

#> nmap --script-update
#> nmap --script-updatedb


Starting Nmap 6.47 ( http://nmap.org ) at 2016-03-14 12:19 KST
NSE: Updating rule database.
NSE: Script Database updated successfully.
Nmap done: 0 IP addresses (0 hosts up) scanned in 0.51 seconds

위 명령을 수행하면 nmap.org에서 추가된 nse script 를 받아 nmap 디렉토리에 저장하게 되지요. 저장된 nse 파일은 find나 locate 명령으로 찾아볼 수 있습니다.

#> locate *.nse
/usr/share/nmap/scripts/acarsd-info.nse
/usr/share/nmap/scripts/address-info.nse
/usr/share/nmap/scripts/afp-brute.nse
/usr/share/nmap/scripts/afp-ls.nse
/usr/share/nmap/scripts/afp-path-vuln.nse
/usr/share/nmap/scripts/afp-serverinfo.nse
/usr/share/nmap/scripts/afp-showmount.nse
..snip..


이제 nse를 사용하기 위한 준비 작업은 끝났습니다.

NSE Use

NSE의 사용은 nmap에서 --script 옵션을 통해 사용이 가능하며 인자값으로 해당 모듈 이름이 들어가게 되면 해당 nse를 사용하여 스캔을 진행합니다.

#> nmap --script ajp-auth

위와 같이 명령 시 ajp 인증 프로토콜에 대해 스캔을 진행합니다.
한번에 여러가지 스크립트를 사용하기 위해 * 등을 통해 규칙을 지정해줍니다.

간단한 예시로 취약성에 대해 스캔하는 모듈을 찾는다고 하면 아래와 같이 locate 명령을 줄 수 있겠지요.

#> locate *vul*.nse
/usr/share/nmap/scripts/afp-path-vuln.nse
/usr/share/nmap/scripts/ftp-vuln-cve2010-4221.nse
/usr/share/nmap/scripts/http-huawei-hg5xx-vuln.nse
/usr/share/nmap/scripts/http-iis-webdav-vuln.nse
/usr/share/nmap/scripts/http-vmware-path-vuln.nse
/usr/share/nmap/scripts/http-vuln-cve2009-3960.nse
..snip..


또한 nmap에서 스크립트를 사용할때도 동일한 방법으로 가능합니다.
#> nmap --script "http-*"
#> nmap --script "ssh*"



Category Scan(Default/Safe/etc..)

위에서는 각각 nse 스크립트를 사용하는 방법에 대해 보았다면 이번에는 좀 더 넓은 범위의 스캔 옵션을 볼까합니다. (귀찮아서 저도 많이 쓰는 옵션이라죠..)

nse에 지정된 category를 통해서 한번에 여러가지 script에 대해 동작을 진행할 수 있습니다.
대표적으로 default 그룹과 safe 그룹등이 있겠네요.

Default Scan
Default Scan은 타겟 도메인의 전반적인 항목에 대해 스캔을 수행하는 옵션입니다.
--script 옵션에 default를 인자값으로 주게되면 테스트를 진행하게 됩니다.

#> nmap --script=default 127.0.0.1

Starting Nmap 6.47 ( http://nmap.org ) at 2016-03-14 12:21 KST
Nmap scan report for 127.0.0.1
Host is up (0.00096s latency).
Not shown: 997 filtered ports
PORT     STATE SERVICE
80/tcp   open  http
|_http-generator: XpressEngine
|_http-methods: No Allow or Public header in OPTIONS response (status code 302)
| http-title: MAIN


Safe Scan은 Safe 카테고리에 있는 항목들로 구성된 NSE 그룹입니다.

Safe Scan
#> nmap --script=safe 127.0.0.1
..snip..

Traceroute

#> nmap --script-trace

NSE Script List

1. 설치된 NSE 스크립트.
locate 명령으로 쉽게 찾을 수 있습니다. 물론 find 명령으로도 가능하지요 : )
#> locate *.nse

2. nmap에서 제공하는 nse 스크립트 description & list
https://nmap.org/nsedoc/


Reference

https://nmap.org/book/man-nse.html
https://nmap.org/nsedoc/
https://hackertarget.com/7-nmap-nse-scripts-recon/
Share: | Coffee Me:

3/14/2016

[HACKING] NMAP Part1 - nmap을 이용한 여러가지 네트워크 스캔 기법(network scan with nmap)

네트워크를 스캔할 수 있는 도구는 여러가지가 있습니다. 그 중 가장 유명하고 대표적인 nmap에 대한 내용을 조금 정리해놓을까 합니다.
nmap 은 네트워크, 해킹, 보안쪽 하시는 분이라면 사용하시고 있겠죠. 물론 개발쪽에서도 사용하기도 하죠. 저희 경우에는 nmap 자체를 많이 활용하지는 않습니다. 대체로 손에 익은 옵션들만 사용하여서 정보를 획득하고, 실제로 시간을 많이 들이는 부분이 취약점을 찾아가는 부분과 Exploit 하는 과정인거 같네요.. :)


[HACKING] NMAP Part1 - nmap을 이용한 여러가지 네트워크 스캔 기법(network scan with nmap)
[HACKING] NMAP Part2 - NSE(Nmap Script Engine)을 이용한 취약점 스캐닝(Vulnerability scan with NSE Script)





nmap에 대해 간단히 설명드리면 네트워크 스캔을 위한 심플하고 강력한 도구입니다. 또한 zenmap이라는 gui 버전도 지원하며 여러 네트워크에 대해 스캔한다면 gui쪽이 좀 더 직관적으로 그림을 볼 수 있겠지요. 네트워크에 대해 점검하는 도구이지만, 보편적으로는 포트스캐너로 많이 알려져 있습니다. 대상의 서비스 중 외부로 오픈된 포트를 점검하고, 어떤 서비스인지 찾아내기 때문에 침투 테스트나 네트워크 체킹 시 많은 도움이 됩니다.

크게 Host를 식별하는 방법, Port Scan, 장비(IDS,F/W)우회에 쓰이는 옵션 등으로 간단하게 작성합니다.

Host 식별(Host Discovery)

nmap을 통해서 동일한 네트워크, 또는 간단한 스캔 작업을 수행할 수 있습니다.

-sL (List Scan) .
동일 네트워크상의 host 들을 식별합니다. 빠르게 타겟 확인을 하기 위해서 사용하죠.


-sn (No port scan) .
처음 보는 옵션이네요.

-Pn (No ping) .


-PS port list (TCP SYN Ping) .
-PA port list (TCP ACK Ping) .
-PU port list (UDP Ping) .
-PY port list (SCTP INIT Ping) .
-PE; -PP; -PM (ICMP Ping Types) 

IPMC Ping 타입의 스캔을 하기 위해 사용하는 옵션입니다.
.
-PO protocol list (IP Protocol Ping) .
-PR (ARP Ping) .
--traceroute (Trace path to host) .

네트워크 상 경로 추적이 필요할 때 사용하는 옵션입니다. 대상 주소까지 타고가는 네트워크 장비의 흐름을 볼 수 있습니다. linux 의 traceroute , windows 의 tracert라고 생각하시면 좋습니다.

-n (No DNS resolution) .
-R (DNS resolution for all targets) .
--system-dns (Use system DNS resolver) .
--dns-servers server1[,server2[,...]] (Servers to use for reverse DNS queries) .

포트스캐닝(Port Scanning)

보안쪽에서 주로 많이 사용되는 부분이지요. 대상의 포트에 대해 스캔하는 기법들이 많이 있습니다. 주로 손에 익은 옵션 위주로 하지만, 움.. 찾아보니 처음보는 옵션들도 종종 있더군요.

-sS (TCP SYN scan) .
스텔스 스캔이라고도 불리는 SYN Scan입니다. Syn Paket을 이용하여 스캔하기 때문에 일반적인 장비에서 바로 확인되지 않는 경우가 있습니다. 물론 완벽한 스텔스는 아니지만요. 대체적으로 많이 사용하시는 옵션 중 하나입니다.

-sT (TCP connect scan) .
TCP를 통해 직접 연결하여 대상의 포트를 확인하는 방법입니다. 해당 옵션을 사용하면 TCP Socket을 통해 연결하여 대상의 포트에 접근, Response 를 보아서 판단하게 되는데 이는 일반적인 포트스캐너와 동일한 형태로 동작합니다. (아주 대중적이고, 많이 볼 수 있는 타입이죠)
대체로 SYN Scan으로 감지 되지 않고, 네트워크 접근에 대해서 부담이 적을 때 사용합니다.

-sU (UDP scans) .
UDP Port 에 대한 스캔하는 옵션입니다.


-sY (SCTP INIT scan) .
처음보네요... SCTP 에 대해 스캔하는 옵션으로 해석됩니다.

-sN; -sF; -sX (TCP NULL, FIN, and Xmas scans) .
SYN, TCP 스캔과 같이 많이 쓰이는 스캔 옵션입니다. 각각 NULL Scan, FIN Scan, Xmas Scan 을 의미합니다.


-sA (TCP ACK scan) .
-sW (TCP Window scan) .
-sM (TCP Maimon scan) .
--scanflags (Custom TCP scan) .
-sZ (SCTP COOKIE ECHO scan) .
-sI zombie host[:probeport] (idle scan) .
-sO (IP protocol scan) .
-b FTP relay host (FTP bounce scan) .


장비우회(Security Solution[F/W, IDS] Evasion)

-f (fragment packets); --mtu (using the specified MTU) .
프레그먼트 단위로 패킷을 제어하거나, MTU 사용을 통해 장비를 우회하기 위해 사용되는 옵션입니다.  


-D decoy1[,decoy2][,ME][,...] (Cloak a scan with decoys) .
--data-length number (Append random data to sent packets) .
--ip-options S|R [route]|L [route]|T|U ... ; --ip-options hex string (Send packets with specified ip options) .
--ttl value (Set IP time-to-live field) .
--badsum (Send packets with bogus TCP/UDP checksums) .

기타(Other)

-O: OS 정보 스캔
OS 정보를 스캔하기 위한 옵션입니다. -O 옵션 사용 시 타겟 주소의 OS를 식별하기 위해 패킷전송 및 배너그래핑을 시작하죠.

-F: Fast scan
빠른 스캔을 위한 옵션입니다. 사용해보지는 않았지만,차이가 있을거라 생각됩니다.



-sV: Verion Detect
버전 체킹을 위한 옵션입니다.


-sR: RPC Scan
RPC 서비스에 대한 스캔을 위한 옵션입니다. 


-sC, --script: NSE Script 사용
두 옵션 모두 NSE를 사용하기 위한 옵션입니다. NSE는 nmap에서 사용가능한 스크립트이며, NSE를 통해 취약점을 스캔하는 등 nmap을 좀 더 넓게 사용할 수 있지요. 이 부분은 part2 에서 다뤄볼까합니다.

Reference

http://linux.die.net/man/1/nmap
https://nmap.org/book/man.html
Share: | Coffee Me:

3/13/2016

[WEB HACKING] arachni - Web application security scanner framework

 많은 WVS(Web Vulnerability Scanner) 중 오픈소스 프레임워크인 arachni에 대한 이야기를 할까합니다. 간단하게 테스트 하였고, 무난하게 사용할 수 있을 것 같아 정리합니다.


Install arachni scanner


Download link
http://www.arachni-scanner.com/download/

64bit Command
#> wget https://github.com/Arachni/arachni/releases/download/v1.4/arachni-1.4-0.5.10-linux-x86_64.tar.gz
#> tar -xvf arachni-1.4-0.5.10-linux-x86_64.tar.gz
#> cd arachni-1.4-0.5.10
#> cd system/arachni-ui-web/bin
#> bundle install 
#> ./arachni

Run Scan


#> ./arachni http://127.0.0.1
Arachni - Web Application Security Scanner Framework v1.4
   Author: Tasos "Zapotek" Laskos <tasos.laskos@arachni-scanner.com>

           (With the support of the community and the Arachni Team.)

   Website:       http://arachni-scanner.com
   Documentation: http://arachni-scanner.com/wiki


 [~] No checks were specified, loading all.
 [~] No element audit options were specified, will audit links, forms, cookies, UI inputs, UI forms, JSONs and XMLs.

 [*] Initializing...
 [*] Preparing plugins...
 [*] ... done.
 [~] Scheduled 302 redirection: http://127.0.0.1/ => /test

 [*] [HTTP: 302] http://127.0.0.1/
 [~] Analysis resulted in 0 usable paths.
...snip...

 [~] Total: 11
 [+] Without issues: 0
 [-] With issues: 11 ( 100% )

 [~] Report saved at: /test/arachni/system/arachni-ui-web/bin/127.0.0.1 2016-03-08 09_52_55 +0900.afr [0.04MB]

 [~] Audited 3 pages.

 [~] Duration: 00:00:14
 [~] Processed 171/262 HTTP requests.
 [~] -- 16.712 requests/second.
 [~] Processed 0/0 browser jobs.
 [~] -- 0.0 second/job.

 [~] Currently auditing          http://127.0.0.1/test/
 [~] Burst response time sum     37.542 seconds
 [~] Burst response count        37
 [~] Burst average response time 1.015 seconds
 [~] Burst average               10.069 requests/second
 [~] Timed-out requests          0
 [~] Original max concurrency    20
 [~] Throttled max concurrency   20

저장된 Report file(.afr)을 아래 명령처럼 reporter 를 이용하여 결과를 확인할 수 있습니다.
#> ./arachni_reporter  127.0.0.1\ 2016-03-08\ 09_52_55\ +0900.afr

WebUI로도 지원하니 구글링 좀 해보신 후 사용하시면 잘 활용할 수 있는 스캐너로 보입니다. :)

Reference

http://www.arachni-scanner.com
Share: | Coffee Me:

3/03/2016

[PYTHON] Terminal에 table 출력하기(Source Code / Python / Terminal / Table)

요즘 할일이 참 산더미네요.. 회사에 개인적으로 하는거까지... :(

따로 간단하게 만들고있는 SSL Vulnerability Scanner인 a2sv에 어떻게하면 report 부분을 예쁘게 꾸밀가 고민하던 중 stackoverflow에서 좋은 코드를 하나 발견하였습니다. 별다른 모듈이나 라이브러리 없이 쉽게 table을 출력할 수 있도록 만들어놓은 간단한 class 이죠. 쓸만한 코드여서 메모할겸 작성합니다.

TablePrinter Class

class TablePrinter(object): 
    "Print a list of dicts as a table" 
    def __init__(self, fmt, sep=' ', ul=None): 
        """         
        @param fmt: list of tuple(heading, key, width) 
                        heading: str, column label 
                        key: dictionary key to value to print 
                        width: int, column width in chars 
        @param sep: string, separation between columns 
        @param ul: string, character to underline column label, or None for no underlining 
        """ 
        super(TablePrinter,self).__init__() 
        self.fmt   = str(sep).join('{lb}{0}:{1}{rb}'.format(key, width, lb='{', rb='}') for heading,key,width in fmt) 
        self.head  = {key:heading for heading,key,width in fmt} 
        self.ul    = {key:str(ul)*width for heading,key,width in fmt} if ul else None 
        self.width = {key:width for heading,key,width in fmt} 

    def row(self, data): 
        return self.fmt.format(**{ k:str(data.get(k,''))[:w] for k,w in self.width.iteritems() }) 

    def __call__(self, dataList): 
        _r = self.row 
        res = [_r(data) for data in dataList] 
        res.insert(0, _r(self.head)) 
        if self.ul: 
            res.insert(1, _r(self.ul)) 
        return '\n'.join(res) 

Table 내용 정의 구간


data = [ 
    {'classid':'foo', 'dept':'bar', 'coursenum':'foo', 'area':'bar', 'title':'foo'}, 
    {'classid':'yoo', 'dept':'hat', 'coursenum':'yoo', 'area':'bar', 'title':'hat'}, 
    {'classid':'yoo'*9, 'dept':'hat'*9, 'coursenum':'yoo'*9, 'area':'bar'*9, 'title':'hathat'*9} 
] 

fmt = [ 
    ('ClassID',       'classid',   11), 
    ('Dept',          'dept',       8), 
    ('Course Number', 'coursenum', 20), 
    ('Area',          'area',       8), 
    ('Title',         'title',     30) 
] 

print( TablePrinter(fmt, ul='=')(data) ) 

Output

ClassID     Dept     Course Number        Area     Title                          
=========== ======== ==================== ======== ============================== 
foo         bar      foo                  bar      foo                            
yoo         hat      yoo                  bar      hat                            
yooyooyooyo hathatha yooyooyooyooyooyooyo barbarba hathathathathathathathathatha 

Reference 

http://stackoverflow.com/questions/5084743/how-to-print-pretty-string-output-in-python
Share: | Coffee Me:

3/02/2016

[DEBIAN] w3m/lynx :: Linux text base web browser(리눅스 텍스트 브라우저)

제작년쯤인가요.. 한때 텍스트 브라우저를 잠깐 썼었던 시절이 있었습니다.
키보드로만으로도 심플하게 웹을 탐색할 수 있어 좋았지만, 최근 화려하고 컨텐츠가 많은 웹의 형태에는 약간 어울리기 힘든 부분도 있었습니다. 

그래도 오랜만에 정리할겸하여 작성해봅니다. 

일단 리눅스에서 사용 가능한 텍스트 기반 브라우저는 유명한 두가지 툴이 있습니다.
바로 w3m과 lynx 입니다. 대표적으로 사용되는 이 툴에대해 보도록 하겠습니다.

w3m - 세련됨/편리함

이 브라우저는 오픈소스로 진행되는 텍스트 브라우저입니다. 표/프레임 등 웹에서 표현 가능한 내용을 지원하고 이미지(컬러)와 SSL 또한 지원하여 일반 브라우저를 사용하듯이 사용할 수 있습니다. 

공식 홈페이지: http://w3m.sourceforge.net/

설치방법
#> apt-get install w3m

사용방법
#> w3m www.google.com


lynx - 심플/빠름

 
공식 홈페이지: http://lynx.invisible-island.net/ (not page)
w3m에 비해서 더 터미널적이 느낌이 강한 브라우저입니다. 
이 브라우저 또한 표 등을 지원하고, SSL 또한 지원하기 때문에 일반적인 웹 서핑을 즐기는데는 문제가 없습니다. 애초에 유닉스를 위해 설계된 브라우저이기 때문에 콘솔에서 많이 사용되는 브라우저입니다.

설치방법
#> apt-get install lynx

사용방법
#> lynx www.google.com


개인적인 평가

사실 예전에는 elinks를 썼었으나, 금방 w3m으로 넘어가게 되었습니다. 
두개를 사용하며 비교한 결과 이미지 표기 등 사용성은 w3m이 좋긴하지만 빠른 속도와 단순화된 웹,
키보드를 이용한 접근성을 고려하였을때는 lynx에 한표를 주고싶네요 :)

Reference

https://ko.wikipedia.org/wiki/W3m
https://ko.wikipedia.org/wiki/%EB%A7%81%ED%81%AC%EC%8A%A4_%28%EC%9B%B9_%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%29
Share: | Coffee Me: