在安全测试过程当中,第一步就须要信息收集,信息收集时咱们须要扫描网站根目录下是否存在备份文件。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)