在安全測試過程當中,第一步就須要信息收集,信息收集時咱們須要掃描網站根目錄下是否存在備份文件。html
掃描網站根目錄下是否存在備份文件須要發起http請求,第一次編寫時使用的是requests模塊的get請求,當進行測試時發現腳本會卡住,經過分析得知,當get一個存在的備份文件時,至關於下載,若是備份文件很大則須要等待超長時間。所以經過查找資料發現使用requests模塊head方法時能夠解決以上遇到的問題。python
HEAD方法與GET方法的行爲很相似,但服務器在響應中只返回實體的主體部分。這就容許客戶端在未獲取實際資源的狀況下,對資源的首部進行檢查,使用HEAD,咱們能夠更高效的完成如下工做: web
#!/usr/bin/env python # -*- coding: utf-8 -*- #命令行 from pocsuite import pocsuite_cli #驗證模塊 from pocsuite import pocsuite_verify #×××模塊 from pocsuite import pocsuite_attack #控制檯模式 from pocsuite import pocsuite_console #requests from pocsuite.api.request import req #register from pocsuite.api.poc import register #report from pocsuite.api.poc import Output, POCBase #url轉換host from pocsuite.lib.utils.funs import url2ip class webBackPOC(POCBase): vulID = '1' # ssvid ID 若是是提交漏洞的同時提交 PoC,則寫成 0 version = '1' #默認爲1 vulDate = '2018-07-12' #漏洞公開的時間,不知道就寫今天 author = 'xiaohuihui1' # PoC做者的大名 createDate ='2018-07-12'# 編寫 PoC 的日期 updateDate = '2018-07-12'# PoC 更新的時間,默認和編寫時間同樣 references = ['']# 漏洞地址來源,0day不用寫 name = 'website back '# PoC 名稱 appPowerLink = [''] # 漏洞廠商主頁地址 appName = '網站備份文件下載'# 漏洞應用名稱 appVersion = 'all versions'# 漏洞影響版本 vulType = 'information leakage'#漏洞類型,類型參考見 漏洞類型規範表 desc = ''' 網站備份文件下載 ''' # 漏洞簡要描述 samples = []# 測試樣列,就是用 PoC 測試成功的網站 install_requires = [] # PoC 第三方模塊依賴,請儘可能不要使用第三方模塊,必要時請參考《PoC第三方模塊依賴說明》填寫 cvss = u"嚴重" #嚴重,高危,中危,低危 #指紋方法 def _fingerprint(self): pass #驗證模塊 pocsuite -r 1-redis.py -u 10.1.5.26 --verify def _verify(self): import requests import hashlib result = {} vul_url = '%s' % self.url if(vul_url.endswith("/")): test_url = vul_url+"aswe2sda2323ra2.html" else: test_url = vul_url+"/aswe2sda2323ra2.html" vul_url+="/" test_html = requests.head(test_url,timeout=5).text #md5值 hl = hashlib.md5() test_html.replace("aswe2sda2323ra2.html","") hl.update(test_html.encode(encoding='utf-8')) test_md5 = hl.hexdigest() domain=vul_url.split(".")[1].split(".")[0] fileName = ['www','admin','wwwroot','web','data','ftp','flashfxp',domain] suffix = ['zip','tar.gz','rar']#後綴列表 result2=[] for fn in fileName: for s in suffix: try: tmp = requests.head(vul_url+fn+"."+s,timeout=5) if(tmp.status_code == 200): result2.append(fn+"."+s) except Exception as e: print e pass if(len(result2) != 0): result['VerifyInfo'] = {} result['VerifyInfo']['URL'] = vul_url result['VerifyInfo']['Payload'] = result2 return self.save_output(result) #×××模塊 def _attack(self): pass #輸出報告 def save_output(self, result): #判斷有無結果並輸出 output = Output(self) if result: output.success(result) else: output.fail() return output #註冊類 register(webBackPOC)