如果不知道僵屍掃描是什么,請參考我的這篇博客
實驗環境:
kali(攻擊者) 192.168.0.103
metasploitable2(目標主機) 192.168.0.104
win xp sp2(僵屍機) 192.168.0.106
scapy實現:
1.包定義:
圖中rz和rt分別表示向僵屍機和目標主機發送的數據包。rt數據包進行了地址欺騙,將src定向到了擁有192.168.0.106的win xp主機。
2.包發送與接收:
圖中先向僵屍機發送了一個數據包,將返回結果保存為az1;然后向目標主機發送偽造數據包;最后向僵屍機發送數據包,將返回結果保存為az2。
3.數據包對比:
圖中兩個數據包的ipid差值為2,這證明僵屍機向目標機發送了一個RST數據包,即可得知目標機的端口是開放的。
python腳本實現:

1 #!/usr/bin/python 2 # -*- coding: utf-8 -*- 3 from scapy.all import * 4 import time 5 6 def IsZombie(zombieIp): #此函數用於判斷僵屍機是否是一個合格的僵屍機 7 a1 = sr1(IP(dst = zombieIp) / TCP(flags = "SA", dport = 445), timeout = 1, verbose = 0) 8 time.sleep(1) #這里延時1秒是為了給僵屍機充足的時間,以判斷僵屍機網絡是否繁忙,為了更精准,可以適當增大該值 9 a2 = sr1(IP(dst = zombieIp) / TCP(flags = "SA", dport = 445), timeout = 1, verbose = 0) 10 if a1[IP].id + 1 == a2[IP].id: #比較兩次ipdi值 11 print "this is a good zombie!" 12 action = raw_input("do you want to use this zombie?(y/n)") 13 if action == "y": 14 tip = raw_input("please input the target's ip:") #目標主機ip 15 tport = int(raw_input("please input the port:")) #要掃描的端口 16 scan(zombieIp, tip, tport) 17 else: 18 sys.exit() 19 else: 20 print "this is not a good zombie!" 21 22 def scan(zombieIp, tip, tport): 23 az1 = sr1(IP(dst = zombieIp) / TCP(flags = "SA", dport = 445), timeout = 1, verbose = 0) #給僵屍機發送第一個SYN/ACK數據包 24 send(IP(dst = tip, src = zombieIp) / TCP(sport = 445, flags = "S", dport = tport), verbose = 0) #給目標主機發送一個偽造原地址的SYN數據包 25 az2 = sr1(IP(dst = zombieIp) / TCP(flags = "SA", dport = 445), timeout = 1, verbose = 0) #給僵屍機發送第二個SYN/ACK數據包 26 if az1[IP].id + 2 == az2[IP].id: #比較ipdi值,從而判斷端口是否開放 27 print "the port is open!" 28 elif az1[IP].id + 1 == az2[IP].id: 29 print "the port is closed!" 30 else: 31 print "I don't know!!" 32 33 ip = raw_input("the zombie's ip:") 34 IsZombie(ip)
博主后來拿百度做了實驗,也是可以用的(但是要在24和25行之間添加一個sleep以彌補網絡延時)。
上圖是測試百度是抓取的數據包和過濾條件。
第一和第三個數據包是檢測一個主機是否是一個合格的僵屍機而分別發送的SYN/ACK數據包,第二個和第四個是預備僵屍機的回復數據,通過腳本分析,該主機是一個合格的僵屍機。從5到11個數據包就是正真的僵屍掃描過程了,過程就不贅述了,如有疑惑,請參照文首的鏈接。
nmap實現:
使用一個簡單的參數就可以實現了:nmap -p445 192.168.43.93 --script=ipidseq.nse
--script指定nmap中內置的腳本,注意"="兩邊不能有空格,否則會報錯。
運行結果:
Starting Nmap 7.70 ( https://nmap.org ) at 2018-07-29 20:54 CST
Nmap scan report for htk90-103fe22e8 (192.168.43.93)
Host is up (0.00057s latency).
PORT STATE SERVICE
445/tcp open microsoft-ds
MAC Address: 00:0C:29:5D:70:02 (VMware)
Host script results:
|_ipidseq: Incremental!
Nmap done: 1 IP address (1 host up) scanned in 0.45 seconds
高亮的部分表明待選僵屍主機的ipid是遞增的,符合僵屍機的要求。
既然符合僵屍機的要求,那么就可以使用這台主機進行僵屍掃描:
nmap 192.168.43.58 -sI 192.168.43.93 -Pn -p 0-100
其中-sI參數指定僵屍機。
結果:
Starting Nmap 7.70 ( https://nmap.org ) at 2018-07-29 21:03 CST
Idle scan using zombie 192.168.43.93 (192.168.43.93:80); Class: Incremental
Nmap scan report for bogon (192.168.43.58)
Host is up (0.045s latency).
Not shown: 95 closed|filtered ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
53/tcp open domain
80/tcp open http
MAC Address: 00:0C:29:D8:D7:B6 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 2.98 seconds