資訊收集之主動資訊收集(一)
資訊收集之主動資訊收集(一)
主動資訊收集:
1.主機發現
1.1二層主機發現
1.2三層主機發現
1.3四層主機發現
2.埠掃描
2.1TCP埠掃描
2.2UDP埠掃描
2.3殭屍掃描
3.服務識別
3.1 python socket
3.2 dmitry -pb
3.3 nmap
3.4 amap -B
4.作業系統識別
4.1 nmap
4.2 TTL
主動資訊收集
直接與目標系統互動通訊
使用受控的第三方電腦進行探測
使用代理或者已經被控制的主機
使用噪聲迷惑目標,淹沒真實的探測流量 #偽造不同的IP給目標傳送資料,並把真實的源IP的發包速率調低,以迷惑目標,讓目標認為是別的IP在攻擊它
掃描:傳送不同的探測,根據返回結果判斷目標狀態
主機發現--二層發現
原理:使用ARP協議,在網段內進行廣播,看是否有回包
1.arping實現二層主機發現
arping實現了簡單的二層發現,由於沒有ip層的參與,所以是不可路由的。
優點是速度快,準確性高
缺點是不可路由,無法發現區域網以外的主機,只能發現同一網段內的主機
arping 192.168.10.200 -c 1
arping 192.168.10.200 -w 2
arping 192.168.10.200 -c 1 |grep "Unicast" |cut -d' ' -f4
shell指令碼實現arping主機發現
#!/bin/bash #該指令碼用於實現arping掃描整個網段 if [ "$#" -ne 1 ] then echo "用法:$0 eth0" exit fi interface=$1 net=$(ifconfig eth1|grep "inet addr" |awk '{print $2}'|awk -F":" '{print $2}'|cut -d "." -f1-3) for ((i=1;i<=254;i++)) do arping -c 1 -I $interface $net.$i|grep "Unicast"|cut -d ' ' -f 4 done
執行效果如下:
2.nmap實現二層主機發現
nmap 192.168.10.200 -sn # -sn只進行主機發現,不進行埠掃描
建立IP字典,nmap -iL iplist.txt -sn #掃描特定IP列表的IP,只進行主機發現
3.Netdiscover 專用於二層發現
不僅支援主動arp檢測,還支援被動的arp檢測,即把網絡卡設定為混雜模式,收取所有區域網內的arp廣播資料包,從而判斷存活的ip
主動模式掃描主機 #主動arp容易觸發報警
netdiscover -i eth0 -r 192.168.10.0/24# -i指定所要偵聽的網絡卡,-r指定ip段
被動模式嗅探存活的主機
netdiscover -p 開啟監聽,然後在另一個視窗,ping目標主機
此時就可以看到netdiscover監聽到主機
4.Scapy實現二層主機發現
給目標傳送一個ARP資料包
收到響應,說明目標主機存活
主機發現--三層發現
原理:使用IP/ICMP協議
優點:相對於二層可以路由
缺點:相對於二層速度慢,經常被防火牆過濾掉
1.ping 實現三層主機發現
ping 192.168.10.200 -c 2
ping 192.168.10.200 -c 1 |grep 'bytes from' |cut -d' ' -f 4|cut -d':' -f 1
2.Scapy實現三層主機發現
給目標傳送一個ICMP包,收到響應,說明目標主機存活
3.fping實現三層主機發現
4.hping3實現三層主機發現
hping3 192.168.10.200 --icmp -c 2
主機發現--四層發現
原理:使用TCP/UDP協議
優點:可路由並且可靠,不太可能被防火牆過濾掉
缺點:基於狀態過濾的防火牆可能過濾掃描
雖然這裡使用到了埠發現,但是四層發現階段並不對埠進行解析,而是通過埠進行對ip是否存活的判斷
TCP發現:直接傳送ACK資料包,一般來說狀態為up的目標主機會返回一個RST資料包以終止這個不正常的TCP連結。也可以傳送正常的SYN資料包,若果目標主機返回SYN/ACK或者SRT資料包,都可以證明目標主機為up狀態。
UDP發現:如果目標ip為up狀態且UDP目標埠為關閉狀態,目標主機就會返回一個目標埠不可達的資料包,這就可以證明目標主機是up狀態(無論目標ip是down狀態還是目標ip為up只要目標埠為開放狀態,都不會有任何資料包返回,這是UDP的特點) #可以利用UDP的這一特點發送一個數據包給一個目標主機不可能開放的埠,如果收到icmp port-unreachable,說明目標主機存活。
Scapy實現四層主機發現
TCP
1.傳送一個ack包給目標主機,正常情況下up狀態的目標ip會返回一個SRT資料包
2.檢視目標主機返回的包,可以看到有一個RET包,說明目標主機存活
UDP
給目標主機的一個不可能開放的UDP埠傳送資料,得到(icmp port-unreachable),說明目標主機存活
檢視返回的資料包
二、埠掃描
TCP埠掃描 #基於連線的協議,三次握手
TCP掃描有三種類型:全連線掃描,隱蔽掃描,殭屍掃描
隱蔽掃描:傳送完SYN資料包以及收到SYN/ACK資料包後不再發送SCK資料包,由於沒有建立完整的TCP連線,所以在目標主機的應用日誌中不會有掃描的記錄,只會在ip層有記錄,因而較為隱蔽。
殭屍掃描:條件較為苛刻。首先要能夠進行地址欺騙,其次殭屍機沒有什麼網路流量產生,最後殭屍機的ipid必須是遞增的
所有的TCP掃描方式都是基於三次握手的變化來判斷目標的狀態
TCP埠掃描
1.nmap實現TCP埠掃描
nmap -sS 192.168.10.200 -p 80,21,23,25
nmap -sS -iL iplist.txt -p 80,21,23
2.Scapy實現TCP埠掃描
給目標主機發送一個SYN資料包,看是否收到響應
3.dmitry實現埠掃描
dmitry -p 192.168.10.200 #預設150個常見的埠
dmitry -p 192.168.10.200 -o scanport
python指令碼實現tcp埠掃描
#!/usr/bin/python from scapy.all import * if len(sys.argv)!=2: print("error,use example:./scanhost.py 192.168.10.0") sys.exit() ip=str(sys.argv[1]) net=ip.split(".")[0]+"."+ip.split(".")[1]+"."+ip.split(".")[2]+"." for addr in range(120,140): response=sr1(IP(dst=net+str(addr))/TCP(dport=22,flags="A"),timeout=0.1,verbose=0) try: if (response[TCP].flags) =="R": print(net+str(addr)+"is up!") except: pass
執行效果如下:
殭屍掃描:
1.確定殭屍機
1.1首先攻擊者尋找殭屍主機,先給殭屍機目標傳送一個sys/ack資料包,收到殭屍機回覆一個RST資料包並且IPID等於x
1.2等一段時間再給殭屍機目標傳送一個sys/ack資料包,收到殭屍機回覆一個RST資料包,並且帶有IPID值,如果IPID值為x+1,說明殭屍目標可以當成殭屍機,否則繼續尋找別的殭屍目標
2.確定完殭屍機之後,便開始殭屍掃描
2.1向殭屍機發送SYN/ACK資料包,殭屍機會返回一個RST資料包,記錄下ipip為y
2.2向目標主機發送SYN資料包(原地址偽造成殭屍機)
2.3若目標主機埠開放,則向殭屍機發送SYN/ACK資料包
2.3.1 殭屍機收到SYN/ACK資料包,則向目標主機發送RST資料包,此時殭屍機ipid為y+1
2.3.2攻擊方向殭屍機發送SYN/ACK資料包,殭屍機返回一個RST資料包,此時ipid為y+2
2.4若目標主機埠關閉,則向殭屍機發送RST資料包,此時殭屍機不會產生任何資料包
2.4.1攻擊方向殭屍機發送SYN/ACK資料包,殭屍機返回一個RST資料包,此時ipdi為y+1
通過攻擊方從殭屍機接收到的兩個RST資料包的ipid可以判斷目標主機的目標埠是否開放
目標埠開放:
目標埠不開放:
殭屍掃描實驗:
實驗環境:
Kali(攻擊者):192.168.10.128
Linux 6.5 (目標):192.168.10.200
Win7(殭屍機):192.168.10.129
Scapy實現:
下圖說明目標主機的21號埠是開放的
Nmap實現:
1.首先尋找殭屍目標
nmap -p445 192.168.10.0/24 --script=ipidseq.nse
2.開始殭屍掃描
nmap 192.168.10.200 -sI 192.168.10.129 -Pn # -sI引數指定殭屍機 -Pn 跳過主機發現
Python指令碼實現殭屍掃描
#/usr/bin/python # -*- coding: utf-8 -*- from scapy.all import * import time #查詢合適的殭屍機,根據IPID來判斷目標殭屍是否是個好的殭屍機 def IsZombie(zIP): response1=sr1(IP(dst=zIP)/TCP(dport=445,flags="SA"),timeout=1,verbose=0) time.sleep(1) response2=sr1(IP(dst=zIP)/TCP(dport=445,flags="SA"),timeout=1,verbose=0) if response1[IP].id+1==response2[IP].id: print "this is a very good zombie!" #開始殭屍掃描 targetIP=raw_input("請輸入目標的IP:") targetPort=int(raw_input("請輸入要掃描目標機的埠:")) scan(zIP,targetIP,targetPort) else: print "this is not a good zombie!" #定義掃描函式 def scan(zIP,targetIP,targetPort): #給殭屍機發生第一個SYN/ACK包 rz1=sr1(IP(dst=zIP)/TCP(dport=445,flags="SA"),timeout=1,verbose=0) #給目標主機發送一個偽造地址的SYN資料包 sr1(IP(dst=targetIP,src=zIP)/TCP(sport=445,dport=targetPort,flags="S"),timeout=1,verbose=0) #給殭屍機發生第二個SYN/ACK包 rz2=sr1(IP(dst=zIP)/TCP(dport=445,flags="SA"),timeout=1,verbose=0) if rz1[IP].id+2==rz2[IP].id: print "目標targetIP的埠targetPort is UP" else: print "目標targetIP的埠targetPort is closed" ip=raw_input("請輸入目標殭屍的IP:") IsZombie(ip)
執行效果如下:
UDP埠掃描
Scapy 實現UDP埠掃描
埠關閉: icmp port-unreachable
埠開放:沒有回包
下圖給目標主機udp53埠傳送資料包,響應icmp port-unreachable,說明目標相應的埠關閉
在目標主機開啟UDP 53埠,然後測試,下圖可以看到沒有返回資料包,說明目標埠UDP53是開放的
Nmap實現UDP埠掃描
nmap 192.168.10.200 -sU -p 53
Python指令碼實現UDP埠掃描
#!/usr/bin/python from scapy.all import * if len(sys.argv)!=2: print("error,use example:./scanhost.py 192.168.10.0") sys.exit() ip=str(sys.argv[1]) net=ip.split(".")[0]+"."+ip.split(".")[1]+"."+ip.split(".")[2]+"." for addr in range(120,140): response=sr1(IP(dst=net+str(addr))/UDP(dport=5555),timeout=0.1,verbose=0) try: if (response[TCP].flags) =="R": print(net+str(addr)+"is up!") except: pass
三、banner捕獲、服務掃描與識別
banner 可能是管理員偽造的
軟體開發商
軟體名稱
服務型別
版本號--直接發現已知的漏洞和弱點
連線建立後直接獲取banner
另類服務識別方法
特徵行為和響應欄位
不同的響應可用於識別底層作業系統
1.通過python socket獲得目標服務的banner
2.通過dmitry -pb獲得目標服務的banner資訊
dmitry -pb 192.168.10.200
3.通過nmap獲得目標服務的banner資訊
nmap -sT 192.168.10.200 -p21,22,53 --script=banner
4.通過amap獲得banner資訊 #專門用於發現開放埠後的服務的工具
amap -B 192.168.10.200 21
四、作業系統識別
windows:128(65-128) #TTL
linux/unix:64(1-64)
某些unix:255
1.通過ttl值判斷作業系統的型別
2.通過nmap -O 識別作業系統的型別
nmap -O 192.168.10.129
---------------------------------------------------------------------------------------------------------------
資訊收集之主動資訊收集(二): https://www.cnblogs.com/yuzly/p/10658570.html