花溪九尾 xray重復漏洞去重


起因

因為有朋友使用花溪九尾的過程中發現在報告中存在重復漏洞,今天回學校收拾東西,晚上終於有空來解決這個問題了

為什么會出現重復漏洞,按理說使用集合存儲crawlergo爬取到的URL,不重復的URL出現了重復的漏洞,猜測是因為對於不同的URL同一個poc也適用

例如(只是舉例:http://www.baidu.comhttp://www.baidu.com/index.php

如果存在備份文件泄露 www.zip,則對於上面兩個站點都會檢測出

http://www.baidu.com/www.zip

從而出現了重復漏洞

解決辦法

因為不能修改xray的邏輯,只能在花溪九尾中使用代碼去重

先查看漏洞格式如圖:

很明顯是python dict ,整理一下如圖

很容易得出去重的解決思路:在獲得一個target的漏洞列表后,判斷每一個漏洞詳情的requestmd5值,是否在該targetmd5集合中出現,這樣會出現兩種結果,若出現過,則不將該漏洞詳情添加到漏洞報告里,若未出現,更新md5集合,並將該漏洞詳情添加到漏洞報告里

判斷標准

判斷標准:以漏洞詳情中的request是否一致來決定是否為重復

代碼實現

先獲取漏洞列表

pattern = re.compile(r'<script class=\'web-vulns\'>webVulns.push\((.*?)\)</script>')

for report in reportList:
    tempReport="{}\\{}".format(config.Xray_temp_report_path,report)
    with open(tempReport,'r',encoding='utf-8') as f:
        temp=f.read()
        result=pattern.findall(temp)
        resultList+=result

resultList則為漏洞列表

讀取漏洞報告模板

context=""
with open("{}\\modelFile.html".format(config.Root_Path),'r',encoding='utf-8') as f:
    context+=f.read()

targetmd5集合

requestMd5Set=set()

接着遍歷漏洞列表resultList

for result in resultList:
    tempResultDict=eval(result)
    tempDetailRequest=tempResultDict["detail"]["request"]
    tempRequestMd5=hashlib.md5(tempDetailRequest.encode('utf-8')).hexdigest()

此處的tempResultDict=eval(result)即將str轉化為dict

tempRequestMd5為該漏洞的md5

if tempRequestMd5 not in requestMd5Set:
    requestMd5Set.add(tempRequestMd5)
    result="<script class=\'web-vulns\'>webVulns.push({})</script>".format(result)
    context+=result

if判斷,為真則更新集合,並寫入漏洞報告,與之前的解決思路一致

最后將報告從內存寫入文件,清理臨時報告

with open("{}\\{}.html".format(config.Xray_report_path,filename),'w',encoding='utf-8') as f:
    f.write(context)
cleanTempXrayReport()

測試

掃描命令:

python3 scan.py -a http://testphp.vulnweb.com/

之前掃描該網站漏洞報告顯示有一百多個,包含重復漏洞,更新去重代碼后漏洞數量降為97,掃描結果如圖:

雖然同一個URL會有同名的漏洞,但是其檢測poc不同

例如95號的漏洞,漏洞類型為:baseline/server-error

96號漏洞,漏洞類型也為:baseline/server-error

但可以看出其request不同,則可以判斷為不同漏洞,成功實現目標

End~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM