千家信息网

网站备份文件扫描

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,网站备份文件扫描0x00 需求在安全测试过程中,第一步就需要信息收集,信息收集时我们需要扫描网站根目录下是否存在备份文件。0x01 代码编写扫描网站根目录下是否存在备份文件需要发起http请求,第一次
千家信息网最后更新 2024年09月22日网站备份文件扫描

网站备份文件扫描

0x00 需求

在安全测试过程中,第一步就需要信息收集,信息收集时我们需要扫描网站根目录下是否存在备份文件。

0x01 代码编写

扫描网站根目录下是否存在备份文件需要发起http请求,第一次编写时使用的是requests模块的get请求,当进行测试时发现脚本会卡住,通过分析得知,当get一个存在的备份文件时,相当于下载,如果备份文件很大则需要等待超长时间。因此通过查找资料发现使用requests模块head方法时可以解决以上遇到的问题。

head方法简介:

HEAD方法与GET方法的行为很类似,但服务器在响应中只返回实体的主体部分。这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查,使用HEAD,我们可以更高效的完成以下工作:

  1. 在不获取资源的情况下,了解资源的一些信息,比如资源类型;
  2. 通过查看响应中的状态码,可以确定资源是否存在;
  3. 通过查看首部,测试资源是否被修改。

0x02 代码

#!/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#registerfrom pocsuite.api.poc import register#reportfrom pocsuite.api.poc import Output, POCBase#url转换hostfrom pocsuite.lib.utils.funs import url2ipclass 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)
0