在滲透測試初期,需要進行大量的信息收集。一般情況下,信息收集可以分為兩大類————被動信息收集和主動信息收集。
其中,被動信息收集主要是通過各種公開的渠道來獲取目標系統的信息,例如:站長工具、Google hack等。這類信息收集的特點是不與目標系統產生直接的交互,從而避免留下痕跡,但帶來的缺點就是收集的信息可能是一些過時的信息,不夠准確。
相反,主動信息收集是與目標系統進行直接的交互,進而得到更為准確的及時信息。例如:AWVS、Appscan等漏洞掃描工具對目標站點進行的掃描。但不可避免的就是可能會在目標系統中留下痕跡,可能會被封殺。
在利用python來進行信息收集,主要是體現在了主動信息收集方面。
在主動信息收集中,主要內容是主機發現、端口掃描、指紋識別。
在主機發現部分,主動信息收集主要是通過掃描來實現的,其中掃描是可以在不同的網絡層次中實現,包括數據鏈路層主機發現、網絡層主機發現和傳輸層主機發現。
下面先介紹二層主機發現。
主機發現,顧名思義,就是確定一個IP范圍內存活的主機,找到潛在攻擊的目標。二層主機發現主要利用的協議是ARP協議,主要用於在內網中進行探測,發現與攻擊者在同一個網段內的主機。二層的主機發現,一般掃描速度都很快,並且可靠性較高,因為即便是安裝了安全軟件,安全軟件都是默認沒有防御ARP攻擊的。
在Kali中,我們只要執行arping命令,就可以對外發送ARP響應包來進行主機的探測了,只要我們收到響應,即可判斷對方主機在線。
我們要用到的python第一個模塊,是subprocess模塊,subprocess模塊可以用來創建一個子進程,並且運行一個外部的程序。一般使用subprocess模塊中的check_output()方法來調用系統命令。
如下:
上面是調用python模塊實現的單個語句判斷主機是否在線,如果使用python腳本來實現的話,如下所示:
代碼如下
import subprocess
import sys
import time
from threading import Thread
def arping(ip):
try:
subprocess.check_output('arping -c 1 ' + str(ip),shell=True)
time.sleep(0,1)
print ip,'在線'
return
except:
return
def main():
host = str(sys.argv[1]).strip()
addr=host.split(".")[0]+"."+host.split(".")[1]+"."+host.split(".")[2]+"."
for i in range(1,255):
ip = addr + str(i)
t=Thread(target=arping,args=(ip,))
t.start()
if __name__=='__main__':
main()