在安全测试过程中,第一步就需要信息收集,信息收集时我们需要扫描网站根目录下是否存在备份文件。
扫描网站根目录下是否存在备份文件需要发起http请求,第一次编写时使用的是requests模块的get请求,当进行测试时发现脚本会卡住,通过分析得知,当get一个存在的备份文件时,相当于下载,如果备份文件很大则需要等待超长时间。因此通过查找资料发现使用requests模块head方法时可以解决以上遇到的问题。
HEAD方法与GET方法的行为很类似,但服务器在响应中只返回实体的主体部分。这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查,使用HEAD,我们可以更高效的完成以下工作:
#!/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)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。