WireShark駭客發現之旅(5)—掃描探測

wyzsk發表於2020-08-19
作者: 聚鋒實驗室 · 2015/09/15 10:50

作者:Mr.Right、K0r4dji 申明:文中提到的攻擊方式僅為曝光、打擊惡意網路攻擊行為,切勿模仿,否則後果自負。

0x00 簡單介紹


“知己知彼,百戰不殆。”掃描探測,目的就是“知彼”,為了提高攻擊命中率和效率,基本上常見的攻擊行為都會用到掃描探測。

掃描探測的種類和工具太多了,攻擊者可以選擇現有工具或自行開發工具進行掃描,也可以根據攻擊需求採用不同的掃描方式。本文僅對Nmap常見的幾種掃描探測方式進行分析。如:地址掃描探測、埠掃描探測、作業系統掃描探測、漏洞掃描探測(不包括Web漏洞,後面會有單獨文章介紹Web漏洞掃描分析)。

0x01 地址掃描探測


地址掃描探測是指利用ARPICMP請求目標網段,如果目標網段沒有過濾規則,則可以透過回應訊息獲取目標網段中存活機器的IP地址和MAC地址,進而掌握拓撲結構。

如:192.1.14.235向指定網段發起ARP請求,如果IP不存在,則無回應。

enter image description here

如果IP存在,該IP會透過ARP回應攻擊IP,傳送自己的MAC地址與對應的IP

enter image description here

ARP欺騙適用範圍多限於內網,透過網際網路進行地址掃描一般基於Ping請求。

如:192.1.14.235向指定網段發起Ping請求,如果IP存在,則返回Ping reply

enter image description here

enter image description here

0x02 埠掃描探測


埠掃描是掃描行為中用得最多的,它能快速獲取目的機器開啟埠和服務的情況。常見的埠掃描型別有全連線掃描、半連線掃描、秘密掃描和UDP掃描。

1、全連線掃描

全連線掃描呼叫作業系統提供的connect()函式,透過完整的三次TCP連線來嘗試目標埠是否開啟。全連線掃描是一次完整的TCP連線。

1)如果目標埠開啟 攻擊方:首先發起SYN包;

目標:返回SYN ACK

攻擊方:發起ACK

攻擊方:發起RST ACK結束會話。

2)如果埠未開啟 攻擊方:發起SYN包;

目標:返回RST ACK結束會話。

如:192.1.14.235172.16.33.162進行全連線埠掃描,首先發起Ping訊息確認主機是否存在,然後對埠進行掃描。

enter image description here

下圖為掃描到TCP3389埠開啟的情況。

enter image description here

下圖為掃描到TCP1723埠未開啟的情況。

enter image description here

2、半連線掃描

半連線掃描不使用完整的TCP連線。攻擊方發起SYN請求包;如果埠開啟,目標主機回應SYN ACK包,攻擊方再傳送RST包。如果埠未開啟,目標主機直接返回RST包結束會話。

如:192.1.14.235172.16.33.162進行半連線埠掃描,首先發起Ping訊息確認主機是否存在,然後對埠進行掃描。

enter image description here

掃描到TCP80埠開啟。

enter image description here

TCP23埠未開啟。

enter image description here

3、秘密掃描TCPFIN

TCP FIN掃描是指攻擊者傳送虛假資訊,目標主機沒有任何響應時認為埠是開放的,返回資料包認為是關閉的。

如下圖,掃描方傳送FIN包,如果埠關閉則返回RST ACK包。

enter image description here

4、秘密掃描TCPACK

TCP ACK掃描是利用標誌位ACK,而ACK標誌在TCP協議中表示確認序號有效,它表示確認一個正常的TCP連線。但是在TCP ACK掃描中沒有進行正常的TCP連線過程,實際上是沒有真正的TCP連線。所以使用TCP ACK掃描不能夠確定埠的關閉或者開啟,因為當傳送給對方一個含有ACK表示的TCP報文的時候,都返回含有RST標誌的報文,無論埠是開啟或者關閉。但是可以利用它來掃描防火牆的配置和規則等。

enter image description here

5、UDP埠掃描

前面的掃描方法都是針對TCP埠,針對UDP埠一般採用UDP ICMP埠不可達掃描。

如:192.1.14.235172.16.2.4傳送大量UDP埠請求,掃描其開啟UDP埠的情況。

enter image description here

如果對應的UDP埠開啟,則會返回UDP資料包。

enter image description here

如果埠未開啟,則返回“ICMP埠不可達”訊息。

enter image description here

0x03 作業系統的探測


NMAP進行作業系統的探測主要用到的是OS探測模組,使用TCP/IP協議棧指紋來識別不同的作業系統和裝置。Nmap內部包含了2600多種已知作業系統的指紋特徵,根據掃描返回的資料包生成一份系統指紋,將探測生成的指紋與nmap-os-db中指紋進行對比,查詢匹配的作業系統。如果無法匹配,則以機率形式列舉出可能的系統。

如:192.168.1.50192.168.1.90進行作業系統的掃描探測。首先發起Ping請求,確認主機是否存在。

enter image description here

發起ARP請求,獲取主機MAC地址。

enter image description here

進行埠掃描。

enter image description here

根據綜合掃描情況,判斷作業系統型別。

enter image description here

0x04 漏洞掃描


作業系統的漏洞探測種類很多,本文針對“smb-check-vulns”引數就MS08-067CVE2009-3103MS06-025MS07-029四個漏洞掃描行為進行分析。

攻擊主機:192.168.1.200(Win7),目標主機:192.168.1.40(WinServer 03);

Nmap掃描命令:nmap --script=smb-check-vulns.nse --script-args=unsafe=1 192.168.1.40

enter image description here

1、埠掃描

漏洞掃描前,開始對目標主機進行埠掃描。

enter image description here

2、SMB協議簡單分析

由於這幾個漏洞多針對SMB服務,下面我們簡單瞭解一下NAMP掃描行為中的SMB命令。

SMB Command:Negotiate Protocol(0x72):SMB協議磋商

SMB Command: Session Setup AndX(0x73):建立會話,使用者登入

SMB Command: Tree Connect AndX (0x75):遍歷共享資料夾的目錄及檔案

SMB Command: NT Create AndX (0xa2):開啟檔案,獲取檔名,獲得讀取檔案的總長度

SMB Command: Write AndX (0x2f):寫入檔案,獲得寫入的檔案內容

SMB Command:Read AndX(0x2e):讀取檔案,獲得讀取檔案內容

SMB Command: Tree Disconnect(0x71):客戶端斷開

SMB Command: Logoff AndX(0x74):退出登入

enter image description here

3、MS08-067漏洞

(1)MS08-067漏洞掃描部分原始碼如下:

function check_ms08_067(host)
    if(nmap.registry.args.safe ~= nil) then
        return true, NOTRUN
    end
    if(nmap.registry.args.unsafe == nil) then
        return true, NOTRUN
    end
    local status, smbstate
    local bind_result, netpathcompare_result

    -- Create the SMB session  \\建立SMB會話
    status, smbstate = msrpc.start_smb(host, "\\\\BROWSER")
    if(status == false) then
        return false, smbstate
    end

    -- Bind to SRVSVC service
    status, bind_result = msrpc.bind(smbstate, msrpc.SRVSVC_UUID, msrpc.SRVSVC_VERSION, nil)
    if(status == false) then
        msrpc.stop_smb(smbstate)
        return false, bind_result
    end

    -- Call netpathcanonicalize
--  status, netpathcanonicalize_result = msrpc.srvsvc_netpathcanonicalize(smbstate, host.ip, "\\a", "\\test\\")

    local path1 = "\\AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\..\\n"
    local path2 = "\\n"
    status, netpathcompare_result = msrpc.srvsvc_netpathcompare(smbstate, host.ip, path1, path2, 1, 0)

    -- Stop the SMB session
    msrpc.stop_smb(smbstate)

(2)分析

嘗試開啟“\\BROWSER”目錄,下一包返回成功。

enter image description here

同時還有其它嘗試,均成功,綜合判斷目標存在MS08-067漏洞。透過Metasploit進行漏洞驗證,成功溢位,獲取Shell。

enter image description here

4、CVE-2009-3103漏洞

(1)CVE-2009-3103漏洞掃描部分原始碼如下:

host = "IP_ADDR", 445
buff = (
"\x00\x00\x00\x90" # Begin SMB header: Session message
"\xff\x53\x4d\x42" # Server Component: SMB
"\x72\x00\x00\x00" # Negociate Protocol
"\x00\x18\x53\xc8" # Operation 0x18 & sub 0xc853
"\x00\x26"# Process ID High: --> :) normal value should be "\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe"
"\x00\x00\x00\x00\x00\x6d\x00\x02\x50\x43\x20\x4e\x45\x54"
"\x57\x4f\x52\x4b\x20\x50\x52\x4f\x47\x52\x41\x4d\x20\x31"
"\x2e\x30\x00\x02\x4c\x41\x4e\x4d\x41\x4e\x31\x2e\x30\x00"
"\x02\x57\x69\x6e\x64\x6f\x77\x73\x20\x66\x6f\x72\x20\x57"
"\x6f\x72\x6b\x67\x72\x6f\x75\x70\x73\x20\x33\x2e\x31\x61"
"\x00\x02\x4c\x4d\x31\x2e\x32\x58\x30\x30\x32\x00\x02\x4c"
"\x41\x4e\x4d\x41\x4e\x32\x2e\x31\x00\x02\x4e\x54\x20\x4c"
"\x4d\x20\x30\x2e\x31\x32\x00\x02\x53\x4d\x42\x20\x32\x2e"
"\x30\x30\x32\x00"
)

(2)分析

十六進位制字串“0x00000000202e30303200”請求,透過ASCII編碼可以看出是在探測NTLMSMB協議的版本。無響應,無此漏洞。

enter image description here

5、MS06-025漏洞

(1)MS06-025漏洞掃描部分原始碼如下:

--create the SMB session
--first we try with the "\router" pipe, then the "\srvsvc" pipe.
local status, smb_result, smbstate, err_msg
status, smb_result = msrpc.start_smb(host, msrpc.ROUTER_PATH)
if(status == false) then
err_msg = smb_result
status, smb_result = msrpc.start_smb(host, msrpc.SRVSVC_PATH) --rras is also accessible across SRVSVC pipe
if(status == false) then
    return false, NOTUP --if not accessible across both pipes then service is inactive
end
end
smbstate = smb_result
--bind to RRAS service
local bind_result
status, bind_result = msrpc.bind(smbstate, msrpc.RASRPC_UUID, msrpc.RASRPC_VERSION, nil)
if(status == false) then 
msrpc.stop_smb(smbstate)
return false, UNKNOWN --if bind operation results with a false status we can't conclude anything.
End

(2)分析

先後嘗試去連線“\router”、“ \srvsvc”路徑,均報錯,無RAS RPC服務。

enter image description here

enter image description here

6、MS07-029漏洞

(1)MS07-029漏洞掃描部分原始碼如下:

function check_ms07_029(host)
    --check for safety flag  
if(nmap.registry.args.safe ~= nil) then
        return true, NOTRUN
end
if(nmap.registry.args.unsafe == nil) then
return true, NOTRUN
end
    --create the SMB session
    local status, smbstate
    status, smbstate = msrpc.start_smb(host, msrpc.DNSSERVER_PATH)
    if(status == false) then
        return false, NOTUP --if not accessible across pipe then the service is inactive
    end
    --bind to DNSSERVER service
    local bind_result
    status, bind_result = msrpc.bind(smbstate, msrpc.DNSSERVER_UUID, msrpc.DNSSERVER_VERSION)
    if(status == false) then
        msrpc.stop_smb(smbstate)
        return false, UNKNOWN --if bind operation results with a false status we can't conclude anything.
    end
    --call
    local req_blob, q_result
    status, q_result = msrpc.DNSSERVER_Query(
        smbstate, 
        "VULNSRV", 
        string.rep("\\\13", 1000), 
        1)--any op num will do
    --sanity check
    msrpc.stop_smb(smbstate)
    if(status == false) then
        stdnse.print_debug(
            3,
            "check_ms07_029: DNSSERVER_Query failed")
        if(q_result == "NT_STATUS_PIPE_BROKEN") then
            return true, VULNERABLE
        else
            return true, PATCHED
        end
    else
        return true, PATCHED
    end
end

(2)分析

嘗試開啟“\DNSSERVER”,報錯,未開啟DNS RPC服務。

enter image description here

0x05 總結


1、掃描探測可以說是所有網路中遇到最多的攻擊,因其僅僅是資訊蒐集而無實質性入侵,所以往往不被重視。但掃描一定是有目的的,一般都是攻擊入侵的前兆。

2、修補漏洞很重要,但如果在掃描層面進行防禦,攻擊者就無從知曉你是否存在漏洞。

3、掃描探測一般都無實質性通訊行為,同時大量重複性動作,所以在流量監測上完全可以做到阻止防禦。

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章