近期學習了一段時間python,結合自己的安全從業經驗,越來越感覺到安全測試是一個體力活。如果沒有良好的coding能力去自動化的話,無疑會把安全測試效率變得很低。
作為安全測試而言,第一步往往要通過爆破目標站的一級域名開始。作為安全而言,最薄弱的地方往往不是主站,而是二級和三級域名。通過大牛lijiejie的工具subdomainsbrute我們可以輕松的獲得一個子域名列表和IP的txt文件:
www.1.edu.cn 125.x.x.x cs.2.edu.cn 125.x.x.x my.3.edu.cn 182.x.x.x
作為安全測試最朴素的思想一定是,對整個網站的端口進行相關的掃描。分析lijiejie安全工具的源碼我們可知dns爆破主要是通過多線程對dns服務器進行請求,我們不可避需要對所有爆破出的url一個個粘貼到瀏覽器中進行測試,這樣的效率非常低,而且容易狗帶。同時鑒於這種黑暗的txt輸出格式,我們需要把所有ip都手工ctrl+c,ctrl+v到一個新的txt中才能進行nmap掃描,每次工作的時候我的心情總是崩潰的。學習了python之后我們可以通過比較簡單的方法來完成對上述工作的自動化。
主函數的設計思路非常簡單,主要就是三個簡單的功能,格式化subdommain輸出結果,放進nmap掃描,對域名進行url試探。
接下來我們希望對txt本身的字符串進行相關處理,format()。即我希望分離出兩個文檔,1個為ip地址的txt。一個為域名的txt。
1 temp=sys.argv[1] 2 print '-'*40 3 print '正在格式化文本' 4 inputname=str(temp) 5 input=open(inputname,'r') 6 scan=open('ip.txt','w') 7 url=open('url.txt','w')
首先通過創建一個input,讀入subdommain輸出的txt文件。
同事創立兩個scan與url分別存放即將輸出的IP和url文件。
下面要做的就是對subdomain的字符串格式化。
for line in input: t=line.strip() final=t.split() scan.write(final[1]+'\n') url.write(final[0]+'\n')
通過for循環讀入文件中的每一行,通過line.strip()去掉兩遍的空格后,用.split()方法以空格為界,切出一個list保存原文件的ip和url。
下一步主要是將ip循環放進nmap掃描即可。這個實現比較容易。
1 os.system(order+'-iL ip.txt')
最后通過request模塊對url地址獲得狀態嗎,即可完成收集工作。
1 print '-'*40 2 print '正在請求url分析響應結果' 3 urlfile=open('url.txt','r') 4 urlfinal=open('urlresult.txt','w') 5 for line in urlfile: 6 t=line.strip('\n') 7 try: 8 status=requests.get('http://'+t).status_code 9 print t+' '+str(status) 10 urlfinal.write(t+' '+str(status)+'\n') 11 except: 12 print t + ' ' + 'unknown' 13 urlfinal.write(t+' '+'unknown\n') 14 continue 15 urlfinal.close() 16 os.remove('url.txt')