網站備份文件掃描

網站備份文件掃描

0x00 需求

在安全測試過程當中,第一步就須要信息收集,信息收集時咱們須要掃描網站根目錄下是否存在備份文件。html

0x01 代碼編寫

掃描網站根目錄下是否存在備份文件須要發起http請求,第一次編寫時使用的是requests模塊的get請求,當進行測試時發現腳本會卡住,經過分析得知,當get一個存在的備份文件時,至關於下載,若是備份文件很大則須要等待超長時間。所以經過查找資料發現使用requests模塊head方法時能夠解決以上遇到的問題。python

head方法簡介:

HEAD方法與GET方法的行爲很相似,但服務器在響應中只返回實體的主體部分。這就容許客戶端在未獲取實際資源的狀況下,對資源的首部進行檢查,使用HEAD,咱們能夠更高效的完成如下工做: web

  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
#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)
相關文章
相關標籤/搜索