Web漏洞掃描碎碎念
- 2020 年 3 月 5 日
- 筆記
前言
這段時間一直在搞漏洞掃描方面相關的東西,之前也寫過一些小的掃描器demo,接觸到挺多開源和商業版漏掃。簡單念叨一些web掃描器相關的思路吧,也算做個記錄。 註:本文只提供一些思路
其實web掃描器形式分很多種
- 主動掃描例如 AWVS、APPScan
- 被動掃描例如 Xray
- 還有一些一把梭的插件類型掃描器,包括資產域名自動收集,指紋識別,POC掃描等
- IAST插樁也是挺好的一種方式
當然可能按照不同角度有不同的區分類型吧,這幾種類型的基本也都寫過一些。其實無論哪種方式,最核心的還是要拿到流量才能往下走。
參數解析
為什麼先說參數解析呢,因為後面的很多模塊都會依賴這裡。參數解析的是否完整,對掃描結果影響還是比較大的。 無論是GET還是POST,先把參數的raw拿回來,最後封裝回去就好 先看常見的格式
- id=1&name=bey0nd
- {「id」:1,」name」:」bey0nd」}
這兩種是最簡單的,格式較為統一,urlencode或json格式,只需要判斷並解析一下,然後加入payload的flag
- id=1__PAYLOAD__FLAG__&name=bey0nd__PAYLOAD__FLAG__
- {「id」:」1__PAYLOAD__FLAG__」,」name」:」bey0nd__PAYLOAD__FLAG__「}
看下幾種複雜格式
- {「age」:1,」service」:」getUserInfo」,」data」:[{「ID」:」0」,」name」:」sdf」},{「ID」:」3」,」name」:」sdf2」}]}
- id=3&pdata={」service」:」getUserInfo」}&t=&group=0
- id=3&pdata={」service」:」getUserInfo」,」data」:{」records」:[{」groupID」:」0」}]}}&version=1.1
- {「test」: 1,」record」:{「data」: {「test」: 12222, 「pdata」: {「service」: 「getUserInfo」}}}}
以上這幾種都是我在實際的線上環境中遇見的,在完全不知道參數格式時,解析還是比較麻煩的,burpsuite的API在獲取參數時對於這種混合格式就無法解析。之前調研一些商業漏掃也是無法識別的。後來自己寫的時候看sqlmap源碼有了思路解決了這個問題,有興趣的可以看一下libcorecommon.py的walk函數。
流量去重
我對於重複請求包的定義是域名及協議和url路徑相同,同時參數的key是完全一致。 像這種為重複
這種則需要再次掃描
- https://www.beysec.com/test.php?id=2&name=bey0nd
- https://www.beysec.com/test.php?id=6&name=zhangsan&data=hello
所以是否能完美的完成參數解析,就會影響到去重,把url與參數的key排序後判斷是否已經存在就可以判定是否重複,對於複雜格式的依然可行。然後把去重後的流量入庫後就可供掃描引擎調用,實時掃描或者計劃任務都可以。
漏洞檢測
這塊就是一些重頭戲部分了。我在做的時候參考了AWVS的設計模式。做了一些合併,把掃描插件大致分成了三類,目錄結構為
CoreScanEngine.py ——base ——perFolder ——perHost ——perRequest |
---|
舉個例子,當掃描 https://www.beysec.com/pro/test.php?id=2&name=bey0nd 這個url時
- CoreScanEngine.py就是掃描入口了,負責調用所有的掃描插件
- base目錄為一些掃描基類,定義一些基礎方法
- perFolder目錄為掃描當前目錄( https://www.beysec.com/pro/)的一些插件,例如一些備份文件 https://www.beysec.com/pro/test.php.bak, https://www.beysec.com/pro/test.bak 。一些敏感文件等等之類的
- perHost目錄就是一些單個主機的掃描插件了,例如心臟滴血,中間件,一些0/1/Nday這種
- perRequest目錄就是比較熟悉的常見web漏洞了,SQL注入,SSRF,命令執行這些。
這裡有個調度的問題就是perHost只掃一次,perFolder只掃當前目錄,perRequest每來一個包都掃。所以如果再來 https://www.beysec.com/notpro/hello.php perHost插件就不在掃描。
總結
這些都是一些大的方向,其實每個模塊都有許多細節需要處理,比如SQL注入檢測模塊中去掉返回包垃圾數據,restful接口返回數據儘可能去掉無關項,用分詞作相識度識別的閾值設置,來提高準確率減少誤報。SSRF的反鏈平台,每個掃描插件和模塊都需要迭代優化,以及漏洞掃出來後如何閉環和打通別的平台,還是比較刺激的。
文由https://www.beysec.com/security/web-vuln-scanner-thinking.html