資訊蒐集-三層發現 Scapy

資訊蒐集-三層發現 Scapy

點選右上角【關注】發哥微課堂頭條號,get更多相關技能~

0x00:簡介

之前的二層發現利用 arp 協議記錄了 scapy 的使用方法,主要透過 ARP() 函式進行的發現。在三層中 scapy 也可以用來發現目標,利用的協議也是三層的主要協議 ip 和 icmp,方法類似。

0x01:scapy 三層發現

scapy 在三層發現目標主要是 IP() 函式和 ICMP() 函式,首先需要呼叫一下 IP 函式賦給一個變數,其次呼叫 ICMP 函式賦給一個變數,將兩個函式的請求頭合併就是一個 ping 包,如下圖:

資訊蒐集-三層發現 Scapy

合成一個包的方式是小括號括起來透過 / 就可以。這樣就有了一個完整的 ping 包,透過 display 可檢視,如下:

資訊蒐集-三層發現 Scapy

有了 ping 包後,需要設定一下 ip 裡面的 dst 欄位,也就是要發現目標的 ip 地址,這裡可以透過 ping[IP]。dst=“10。136。178。15” 來設定,設定後可透過 display 再次檢視是否成功,如下:

資訊蒐集-三層發現 Scapy

這時就可以傳送 ping 包了,函式是 sr1,這裡是 sr1(ping), 示例如下:

資訊蒐集-三層發現 Scapy

這時就傳送完成了,結果賦給了變數 answer,詳細資訊可以透過 answer。display 檢視,如下:

資訊蒐集-三層發現 Scapy

以上操作步驟也可以寫成一行命令,sr1(IP(dst=“10。136。178。15”)/ICMP()),結果和上面步驟一樣,如下圖:

資訊蒐集-三層發現 Scapy

如果碰到沒有線上的目標,scapy 會等待,直到目標上線,所以如果批次去發現目標碰到一個目標不線上時,後面的就不會繼續去進行發現,如下圖:

資訊蒐集-三層發現 Scapy

這時,可以透過 sr1 的第二個引數 timeout 來設定超時時間,預設單位是毫秒,如下圖:

資訊蒐集-三層發現 Scapy

提示已經發了一個包,應答兩個包,獲取了 0 個丟失了 1 個。scapy 的三層發現也是不能批次掃描,需要結合 python 編寫指令碼來實現,示例如下:

#!/usr/bin/python# -*- coding: UTF-8 -*-import loggingimport subprocesslogging。getLogger(“scapy。runtime”)。setLevel(logging。ERROR)from scapy。all import *if len(sys。argv)!=2: print “引數錯誤,示例:。/scapy-icmp。py 1。1。1。1” sys。exit()address=str(sys。argv[1])prefix=address。split(‘。’)[0]+‘。’+address。split(‘。’)[1]+‘。’+address。split(‘。’)[2]+‘。’for addr in range(1,254): a=sr1(IP(dst=prefix+str(addr))/ICMP(),timeout=0。1,verbose=0) if a == None: pass else: print prefix+str(addr)

執行結果如下:

資訊蒐集-三層發現 Scapy

協議的話就是 ICMP 了,因為指令碼中使用 icmp 函式發的包,wireshark 抓包如下:

資訊蒐集-三層發現 Scapy

如果已經有了要掃描的目標列表,也可以使用 python 寫一個指令碼來實現讀取檔案內容進行目標發現,示例如下:

#!/usr/bin/python# -*- coding: UTF-8 -*-import loggingimport subprocesslogging。getLogger(“scapy。runtime”)。setLevel(logging。ERROR)from scapy。all import *if len(sys。argv)!=2: print “引數錯誤,示例:。/scapy-icmp-txtList。py filename” sys。exit()filename=str(sys。argv[1])file=open(filename,‘r’)for addr in file: a=sr1(IP(dst=addr。strip())/ICMP(),timeout=0。1,verbose=0) if a==None: pass else: print addr。strip()

0x02:總結

scapy 可以利用 arp 函式來進行二層的目標發現,也可以使用 icmp 函式來實現三層目標發現。不支援批次掃描,但因 scapy 本就是 python 的一個網路分析包的庫,所以可用 python 來用指令碼實現批次掃描。