端口掃描:端口對(duì)應(yīng)網(wǎng)絡(luò)服務(wù)及應(yīng)用端程序
服務(wù)端程序的漏洞通過(guò)端口攻入
發(fā)現(xiàn)開(kāi)放的端口
更具體的攻擊面
UDP端口掃描:
如果收到ICMP端口不可達(dá),表示端口關(guān)閉
如果沒(méi)有收到回包,則證明端口是開(kāi)放的
和三層掃描IP剛好相反
Scapy端口開(kāi)發(fā)掃描
命令:sr1(IP(dst="192.168.45.129")/UDP(dport=53),timeout=1,verbose=1)
nmap -sU 192.168.45.129
TCP掃描:基于連接的協(xié)議
三次握手:基于正常的三次握手發(fā)現(xiàn)目標(biāo)是否在線
隱蔽掃描:發(fā)送不完整的數(shù)據(jù)包,不建立完整的連接,如ACK包,SYN包,不會(huì)在應(yīng)用層訪問(wèn),
僵尸掃描:不和目標(biāo)系統(tǒng)產(chǎn)生交互,極為隱蔽
全連接掃描:建立完整的三次握手
所有的TCP掃描方式都是基于三次握手的變化來(lái)判斷目標(biāo)系統(tǒng)端口狀態(tài)
隱蔽掃描:發(fā)送SYN數(shù)據(jù)包,如果收到對(duì)方發(fā)來(lái)的ACK數(shù)據(jù)包,證明其在線,不與其建立完整的三次握手連接,在應(yīng)用層日志內(nèi)不記錄掃描行為,十分隱蔽,網(wǎng)絡(luò)層審計(jì)會(huì)被發(fā)現(xiàn)跡象
僵尸掃描:是一種極其隱蔽的掃描方式,實(shí)施條件苛刻,對(duì)于掃描發(fā)起方和被掃描方之間,必須是需要實(shí)現(xiàn)地址偽造,必須是僵尸機(jī)(指的是閑置系統(tǒng),并且系統(tǒng)使用遞增的IPID)早期的win xp,win 2000都是遞增的IPID,如今的LINUX,WINDOWS都是隨機(jī)產(chǎn)生的IPID

1,掃描者向僵尸機(jī)發(fā)送SYN+ACY,僵尸機(jī)判斷未進(jìn)行三次握手,所以返回RST包,在RST數(shù)據(jù)包內(nèi)有一個(gè)IPID,值記為X,那么掃描者就會(huì)知道被掃描者的IPID
2,掃描者向目標(biāo)服務(wù)器發(fā)送SYN數(shù)據(jù)包,并且偽裝源地址為僵尸機(jī),如果目標(biāo)服務(wù)器端口開(kāi)放,那么就會(huì)向僵尸機(jī)發(fā)送SYN+ACK數(shù)據(jù)包,那么僵尸機(jī)也會(huì)發(fā)送RST數(shù)據(jù)包,那么其IPID就是X+1(因?yàn)榻┦瑱C(jī)足夠空閑,這個(gè)就為其收到的第二個(gè)數(shù)據(jù)包)
3,掃描者再向僵尸機(jī)發(fā)送SYN+ACK,那么僵尸機(jī)再次發(fā)送RST數(shù)據(jù)包,IPID為X+2,如果掃描者收到僵尸機(jī)的IPID為X+2,那么就可以判斷目標(biāo)服務(wù)器端口開(kāi)放
使用scapy發(fā)送數(shù)據(jù)包:首先開(kāi)啟三臺(tái)虛擬機(jī),
kali虛擬機(jī):192.168.45.128
Linux虛擬機(jī):192.168.45.129
windows虛擬機(jī):192.168.45.132
發(fā)送SYN數(shù)據(jù)包:

通過(guò)抓包可以查看kali給linux發(fā)送syn數(shù)據(jù)包

linux虛擬機(jī)返回Kali虛擬機(jī)SYN+ACK數(shù)據(jù)包

kali系統(tǒng)并不知道使用者發(fā)送了SYN包,而其莫名其妙收到了SYN+ACK數(shù)據(jù)包,便會(huì)發(fā)RST包斷開(kāi)連接

也可以使用下列該命令查看收到的數(shù)據(jù)包的信息,收到對(duì)方相應(yīng)的SYN+ACK數(shù)據(jù)包,scapy默認(rèn)從本機(jī)的80端口往目標(biāo)系統(tǒng)的20號(hào)端口發(fā)送,當(dāng)然也可以修改

如果向目標(biāo)系統(tǒng)發(fā)送一個(gè) 隨機(jī)端口:

通過(guò)抓包的獲得:1,kali向linux發(fā)送SYN數(shù)據(jù)包,目標(biāo)端口23456,

2,Linux系統(tǒng)由自己的23456端口向kali系統(tǒng)的20號(hào)端口返回RST+ACK數(shù)據(jù)包,表示系統(tǒng)端口未開(kāi)放會(huì)話結(jié)束

使用python腳本去進(jìn)行scapy掃描

nmap做隱蔽端口掃描:
nmap -sS? 192.168.45.129 -p 80,21,110,443 #掃描固定的端口
nmap -sS 192.168.45.129 -p 1-65535 --open? #掃描該IP地址下1-65535端口掃描,并只顯示開(kāi)放的端口
nmap -sS 192.168.45.129 -p --open? #參數(shù)--open表示只顯示開(kāi)放的端口
nmap -sS -iL iplist.txt -p 80
由抓包可知,nmap默認(rèn)使用-sS掃描,發(fā)送SYN數(shù)據(jù)包,即nmap=nmap? -sS

hping3做隱蔽端口掃描:
hping3 192.168.45.129 --scan 80 -S? #參數(shù)--scan后面接單個(gè)端口或者多個(gè)端口.-S表示進(jìn)行SYN掃描
hping3 192.168.45.129 --scan 80,21,25,443 -S
hping3 192.168.45.129 --scan 1-65535 -S

由抓包可得:


hping3 -c 100? -S? --spoof 192.168.45.200 -p ++1 192.168.45.129
參數(shù)-c表示發(fā)送數(shù)據(jù)包的數(shù)量
參數(shù)-S表示發(fā)送SYN數(shù)據(jù)包
--spoof:偽造源地址,后面接偽造的地址,
參數(shù)-p表示掃描的端口,++1表示每次端口號(hào)加1,那么就是發(fā)送SYN從端口1到端口100
最后面跟的是目標(biāo)IP
通過(guò)抓包可以得知地址已偽造,但對(duì)于linux系統(tǒng)(192.168.45.129)來(lái)說(shuō),它收到了192.168.45.200的SYN數(shù)據(jù)包,那么就會(huì)給192.168.45.200回復(fù)SYN+ACK數(shù)據(jù)包,但該地址卻是kali偽造的地址,那么要查看目標(biāo)系統(tǒng)哪些端口開(kāi)放,必須登陸地址為kali偽造的地址即(192.168.45.200)進(jìn)行抓包

hping3和nmap掃描端口的區(qū)別:1,hping3結(jié)果清晰明了
? 2,nmap首先對(duì)IP進(jìn)行DNS反向解析,如果沒(méi)成功,那么便會(huì)對(duì)其端口發(fā)送數(shù)據(jù)包,默認(rèn)發(fā)送SYN數(shù)據(jù)包
hping3直接向目標(biāo)系統(tǒng)的端口發(fā)送SYN數(shù)據(jù)包,并不進(jìn)行DNS反向解析
全連接端口掃描:如果單獨(dú)發(fā)送SYN數(shù)據(jù)包被被過(guò)濾,那么就使用全連接端口掃描,與目標(biāo)建立三次握手連接,結(jié)果是最準(zhǔn)確的,但容易被入侵檢測(cè)系統(tǒng)發(fā)現(xiàn)
response=sr1(IP(dst="192.168.45.129")/TCP(dport=80,flags="S"))
reply=sr1(IP(dst="192.168.45.129")/TCP(dport=80,flags="A",ack=(response[TCP].seq+1)))
抓包情況:首先kali向Linux發(fā)送SYN,Linux回復(fù)SYN+ACK給kali,但kali的系統(tǒng)內(nèi)核不清楚kali曾給linux發(fā)送給SYN數(shù)據(jù)包,那么kali內(nèi)核莫名其妙收到SYN+ACK包,那么便會(huì)返回RST請(qǐng)求斷開(kāi)數(shù)據(jù)包給Linux,三次握手中斷,如今kali再給Linux發(fā)ACK確認(rèn)數(shù)據(jù)包,Linux莫名其妙收到了ACK數(shù)據(jù)包,當(dāng)然也會(huì)返回RST請(qǐng)求斷開(kāi)數(shù)據(jù)包,具體抓包如下:

那么只要kali內(nèi)核在收到SYN+ACK數(shù)據(jù)包之后,不發(fā)RST數(shù)據(jù)包,那么就可以建立完整的TCP三次握手,判斷目標(biāo)主機(jī)端口是否開(kāi)放
因?yàn)閕ptables存在于Linux內(nèi)核中,通過(guò)iptables禁用內(nèi)核發(fā)送RST數(shù)據(jù)包,那么就可以實(shí)現(xiàn)

使用nmap進(jìn)行全連接端口掃描:(如果不指定端口,那么nmap默認(rèn)會(huì)掃描1000個(gè)常用的端口,并不是1-1000號(hào)端口)

使用dmitry進(jìn)行全連接端口掃描:
dmitry:功能簡(jiǎn)單,但功能簡(jiǎn)便
默認(rèn)掃描150個(gè)最常用的端口
dmitry -p 192.168.45.129? #參數(shù)-p表示執(zhí)行TCP端口掃描
dmitry -p 192.168.45.129 -o output? #參數(shù)-o表示把結(jié)果保存到一個(gè)文本文檔中去
使用nc進(jìn)行全連接端口掃描:
nc -nv -w 1 -z 192.168.45.129 1-100:? ? ? 1-100表示掃描1-100號(hào)端口
參數(shù)-n表示不對(duì)Ip地址進(jìn)行域名解析,只把其當(dāng)IP來(lái)處理
參數(shù)-v表示顯示詳細(xì)信息
參數(shù)-w表示超時(shí)時(shí)間
-z表示打開(kāi)用于掃描的模式
