久久久亚洲精品成人,色五月丁香六月欧美综合,午夜影视啪啪免费体验区,噜噜综合亚洲AV中文无码

安全資訊

漏洞掃描技巧篇-Web漏洞掃描器

0x00 前言
之前我們簡(jiǎn)單介紹了一下掃描器中爬蟲(chóng)的部分,接下來(lái)將繼續(xù)介紹掃描器中一些我們認(rèn)為比較有趣的技巧。
0x01 編碼/解碼/協(xié)議

在很久以前有人提問(wèn) AMF 格式的請(qǐng)求怎么進(jìn)行檢測(cè),或者有什么工具可以檢測(cè)。

既然我們要講解的是 Web 漏洞掃描,那么就先假設(shè)是 AMF over HTTP (這里并不需要你了解 AMF,你只需要知道 AMF 是一種數(shù)據(jù)格式類型就行)。

假設(shè)我們需要測(cè)試一個(gè) AMF 格式數(shù)據(jù)的 SQL 注入問(wèn)題,那么按照通常的思路就是在 SQL 注入模塊中:

  1.先解析 HTTP 中 AMF 格式數(shù)據(jù)

  2.然后在測(cè)試參數(shù)中填寫(xiě) payload

  3.重新封裝 AMF 格式數(shù)據(jù)

  4.發(fā)送 HTTP 請(qǐng)求

整個(gè)流程下來(lái)沒(méi)什么問(wèn)題,但是如果又來(lái)了一個(gè) X 協(xié)議(X over HTTP),那么我們就得繼續(xù)修改 SQL 注入模塊以便支持這種 X 協(xié)議,但是掃描器中可不是只有 SQL 注入檢測(cè)模塊,還有其他同類模塊,難道每加一個(gè)新協(xié)議我還得把所有檢測(cè)模塊都改一遍?

所以我們需要把這些協(xié)議解析和封裝單獨(dú)抽出來(lái)放在一個(gè)模塊中。

上面的遞歸 decode 主要是為了解碼某種格式的數(shù)據(jù)里面還有另外一種格式的數(shù)據(jù),雖然看起來(lái)這種場(chǎng)景比較少見(jiàn),但是仔細(xì)想一下 multipart 帶著 json,json 里的字符串是另外一個(gè) json 字符串,是不是又覺(jué)得這種情況也并不少見(jiàn)。

那 encode/decode 剝離出來(lái)就可以了嗎?請(qǐng)注意到上面?zhèn)未a使用了 requests. request 發(fā)送請(qǐng)求,那如果某天需要我們?nèi)y(cè)試 websocket 協(xié)議,是不是又得在檢測(cè)模塊中多加一套 websocket client 發(fā)送請(qǐng)求?
所以我們也需要將具體的網(wǎng)絡(luò)操作給剝離出來(lái),具體的協(xié)議類型直接由上面來(lái)處理,檢測(cè)模塊只需要關(guān)注具體填寫(xiě)的 payload。

因?yàn)槊總€(gè)檢測(cè)模塊的檢測(cè)依據(jù)大致就幾種:

  • 返回內(nèi)容

  • 消耗時(shí)間 (time based)

  • 另外一條信道的數(shù)據(jù) (比方說(shuō) dnslog)

所以即便是我們將網(wǎng)絡(luò)操作剝離出來(lái)也不會(huì)影響檢測(cè)的效果。

在編寫(xiě)檢測(cè)模塊的時(shí)候,編寫(xiě)者可以不用關(guān)心基礎(chǔ)協(xié)議是什么,怎么對(duì)數(shù)據(jù)編碼解碼,只用關(guān)心根據(jù) value 生成 payload 并填寫(xiě)到相對(duì)應(yīng)的 key 中。

假如某天出現(xiàn)了這么一種流行編碼格式 http://zgdagm.com/key1, value1,key2,value2,那我們所有的檢測(cè)模塊也無(wú)需修改,僅僅需要在上一層再添加一套 encode/decode 操作即可。假如某天出現(xiàn)了一種比較流行的協(xié)議,我們也僅需要在上一層提供一套 client 即可。檢測(cè)模塊的工作就僅僅剩下生成并填寫(xiě) payload。

0x02 PoC 分類

在 2014 年的時(shí)候,我做了大量的競(jìng)品分析,包括使用逆向工程逆向商業(yè)的 Acunetix WVS, HP Webinspect, IBM AppScan, Netsparker 掃描邏輯,也包括閱讀開(kāi)源的 w3af, arachni 代碼。

如果不談掃描質(zhì)量,只關(guān)注整體項(xiàng)目設(shè)計(jì)以及產(chǎn)品中使用到的猥瑣技巧,那么其中最讓我眼前一亮的當(dāng)屬 AWVS,接下來(lái)我將詳細(xì)介紹一下我從 AWVS 中學(xué)習(xí)到的 PoC 分類。

PoC 分類:

類型 描述
PerServer 用于檢測(cè) Web Server 級(jí)別中存在的漏洞,比方說(shuō)各種中間件,Web 框架的漏洞
PerFile 用于檢測(cè)某個(gè)文件中是否存在漏洞,比如對(duì)應(yīng)文件的備份,Bash RCE 等
PerFolder 用于檢測(cè)某個(gè)目錄中是否存在漏洞,比如敏感信息的泄漏,路徑中的 SQL 注入等
PerScheme 用于檢測(cè)某個(gè)參數(shù)中是否存在漏洞,比如 SQL 注入,XSS 等
PostCrawl 在爬蟲(chóng)結(jié)束之后啟動(dòng),直接使用爬蟲(chóng)的資源進(jìn)行檢測(cè)
PostScan 在掃描結(jié)束之后啟動(dòng),用于檢測(cè)二階注入,存儲(chǔ) XSS等
WebApps 用于檢測(cè)比較常用的 Web 應(yīng)用的漏洞

在獲取到爬蟲(chóng)資產(chǎn),對(duì)相關(guān)資產(chǎn)格式化之后,便下發(fā)到各個(gè)不同類型的 PoC 中進(jìn)行檢測(cè),這樣做的好處是分類明確,覆蓋大多數(shù)檢測(cè)階段,也避免為了減少重復(fù)請(qǐng)求的下發(fā)而需要額外記錄中間狀態(tài)的行為。

0x03 IAST

AWVS 有個(gè)比較有趣的功能 AcuMonitor ,也就大家熟知的 dnslog、反連平臺(tái)。在 2014 年看到 AWVS 的這個(gè)功能時(shí),就建議 WooYun 出個(gè)類似的功能,也就是 cloudeye,tangscan 也就算是國(guó)內(nèi)比較早使用這種技術(shù)的掃描器,當(dāng)然后續(xù)又出現(xiàn)了各種類似 cloudeye 的項(xiàng)目,自然而然也出現(xiàn)了各種使用該技術(shù)的掃描器。

不過(guò)今天我們不打算繼續(xù)介紹 AcuMonitor,而是介紹另外一個(gè)也很有趣的功能 AcuSensor 。AcuSensor 就是IAST,只要稍微了解過(guò) Web 漏洞掃描器的,都應(yīng)該會(huì)知道 IAST 是干啥的。那為什么我要單獨(dú)拎出來(lái)講這個(gè)呢?

主要是因?yàn)?AcuSensor 的實(shí)現(xiàn)方式非常有趣。AcuSensor 提供了 Java、 .NET、PHP 這三個(gè)語(yǔ)言版本,其中比較有趣的是 PHP 版本的實(shí)現(xiàn)。

PHP版本的AcuSensor使用方法是下載一個(gè)acu_phpaspect.php文件,再通過(guò) auto_prepend_file 加載這個(gè)文件, 眾所周知,PHP 是不能改直接 hook PHP 內(nèi)置函數(shù)的,那么單單依靠一個(gè) PHP 腳本,AcuSensor是如何做到類似 IAST 功能的呢?

很簡(jiǎn)單,直接替換所有關(guān)鍵函數(shù)。嗯,真的就那么簡(jiǎn)單。

我們來(lái)詳細(xì)介紹一下這個(gè)過(guò)程,在 acu_phpaspect.php 中:

1.獲取用戶實(shí)際請(qǐng)求的文件內(nèi)容

2.檢查一下有沒(méi)有相關(guān) cache,如果有 cache 那么直接加載執(zhí)行 cache,然后結(jié)束

3.使用 token_get_all獲取所有 token遍歷每一個(gè) token,對(duì)自己感興趣的函數(shù)或者語(yǔ)句使用自己定義的函數(shù)進(jìn)行 wrap 并替換

4.將替換后的內(nèi)容保存到 cache 中并使用 eval 執(zhí)行

5.__halt_compiler中斷編譯

整個(gè)過(guò)程簡(jiǎn)單粗暴有效,這樣做的優(yōu)點(diǎn)在于:

  • 實(shí)現(xiàn)簡(jiǎn)單,只需要編寫(xiě) PHP 即可

  • 安裝簡(jiǎn)單,無(wú)需安裝擴(kuò)展,只需修改配置文件可以

  • 兼容性強(qiáng),比較容易兼容性各種環(huán)境,各種版本 PHP

如果有意向去做 IAST 或者想做類似我的 prvd 項(xiàng)目,但又不太喜歡寫(xiě) PHP 擴(kuò)展,那么我強(qiáng)烈建議你完整的看一遍 PHP 版本 AcuSensor 的實(shí)現(xiàn)。如果對(duì)自己實(shí)現(xiàn)的檢測(cè)邏輯效率比較自信的話,甚至可以基于這個(gè)原理直接實(shí)現(xiàn)一個(gè) PHP 版本的 RASP 項(xiàng)目。
0x04 限速

在 Web 漏洞掃描器中,無(wú)論作為乙方的商業(yè)產(chǎn)品、甲方的自研產(chǎn)品,限速都是一個(gè)至關(guān)重要的功能,甚至可以說(shuō)如果你的掃描器沒(méi)有限速功能,那壓根就不能上線使用。接下來(lái)我們將介紹一下在掃描器中限速的幾種方法。

1.代理

使用代理做限速功能,將所有執(zhí)行掃描任務(wù)的 worker 的測(cè)試流量全轉(zhuǎn)發(fā)proxy 服務(wù)器上:

由 proxy 服務(wù)器統(tǒng)一調(diào)度發(fā)送測(cè)試請(qǐng)求頻率,直接使用 proxy 方案優(yōu)點(diǎn)是可以兼容之前沒(méi)做限速功能的掃描器,缺點(diǎn)是所有基于 time based 的檢測(cè)均無(wú)效(當(dāng)然也可以讓 proxy 返回真正的響應(yīng)時(shí)間來(lái)進(jìn)行判斷,不過(guò)仍需要修改檢測(cè)模塊),也不允許在檢測(cè)模塊中加入超時(shí)設(shè)置。

2.雙重隊(duì)列

另外一種方法是使用雙重隊(duì)列實(shí)現(xiàn)限速功能,流程圖如下:

 1. worker1 從隊(duì)列中取到名為 target1 的任務(wù)

 2. worker1 從 target1 隊(duì)列中取出和 target1 相關(guān)的任務(wù)

 3. 默認(rèn)單并發(fā)執(zhí)行和 target1 相關(guān)任務(wù),根據(jù)設(shè)置的 QPS 限制,主動(dòng) sleep 或者增加并發(fā)

這種方案的缺點(diǎn)是掃描器設(shè)計(jì)之初的時(shí)候就得使用這種方法,優(yōu)點(diǎn)是每個(gè)并發(fā)可以穩(wěn)定的和遠(yuǎn)程服務(wù)器保持鏈接,也不影響掃描功能。

0x05 漏洞檢測(cè)

實(shí)際上這一節(jié)并不會(huì)講具體某個(gè)漏洞檢測(cè)方法,只是簡(jiǎn)單談一下漏掃模塊每個(gè)階段該干的事情。

項(xiàng)目之初,沒(méi)有相關(guān)積累,那么可以選擇看一下 AWVS 的檢測(cè)代碼,雖然說(shuō)網(wǎng)上公開(kāi)的是 10.5 的插件代碼,但其實(shí)從 8.0 到 11 的插件代碼和 10.5 的也差不多,無(wú)非新增檢測(cè)模塊,修復(fù)誤漏報(bào)的情況,也可以多看看 SQLMap 代碼,看看檢測(cè)邏輯,但是千萬(wàn)不要學(xué)習(xí)它的代碼風(fēng)格。從這些代碼中可以學(xué)習(xí)到非常多的小技巧,比如動(dòng)態(tài)頁(yè)面檢測(cè),識(shí)別 404 頁(yè)面等。看代碼很容易理解相關(guān)的邏輯,但我們需要去理解為什么代碼這樣處理,歷史背景是什么,所以多用 git blame。

到了中期,需要提升漏洞檢測(cè)的精準(zhǔn)度,漏洞檢測(cè)的精準(zhǔn)度是建立在各種 bad case 上,誤報(bào)的 case 比較容易收集和解決,漏報(bào)的 case 就需要其他資源來(lái)配合。作為甲方如果有漏洞收集平臺(tái),那么可以結(jié)合白帽子以及自己部門(mén)滲透團(tuán)隊(duì)提交的漏洞去優(yōu)化漏報(bào)情況。

如果掃描器是自己的一個(gè)開(kāi)源項(xiàng)目的話,那么就必須適當(dāng)?shù)耐茝V自己的項(xiàng)目,讓更多的人去使用、反饋,然后才能繼續(xù)完善項(xiàng)目,從而繼續(xù)推廣自己的項(xiàng)目,這是一個(gè)循環(huán)的過(guò)程。總而言之,提升漏洞檢測(cè)的精準(zhǔn)度需要兩個(gè)條件:1. bad case,2. 維護(hù)精力

到了后期,各種常規(guī)的漏洞檢測(cè)模塊已經(jīng)實(shí)現(xiàn)完成,也有精力持續(xù)提升檢測(cè)精準(zhǔn)度,日常漏洞 PoC 也有人員進(jìn)行補(bǔ)充。

那么事情就結(jié)束了么?
不,依舊有很多事情我們可以去做,掃描器的主要目標(biāo)是在不影響業(yè)務(wù)的情況下,不擇手段的發(fā)現(xiàn)漏洞,所以除了常規(guī)的資產(chǎn)收集方式之外,我們還可以從公司內(nèi)部各處獲取資產(chǎn)相關(guān)的數(shù)據(jù),比方說(shuō)從 HIDS 中獲取所有的端口數(shù)據(jù)、系統(tǒng)數(shù)據(jù),從流量中或業(yè)務(wù)方日志中獲取 url 相關(guān)數(shù)據(jù)等。

當(dāng)然除了完善資產(chǎn)收集這塊,還有輔助提升檢測(cè)效果的事情,比如說(shuō)上面提到的 AcuSensor,這部分事情可以結(jié)合公司內(nèi)部的 RASP 做到同樣效果,還有分析 access log、數(shù)據(jù)庫(kù) log 等事情。總的來(lái)說(shuō),做漏掃沒(méi)有什么條條框框限制,只要能發(fā)現(xiàn)漏洞就行。

以上都是和技術(shù)相關(guān)的事情,做漏掃需要處理的事情也不僅僅只有技術(shù),還需要去搞定詳細(xì)可操作的漏洞描述及其解決方案,匯報(bào)可量化的指標(biāo)數(shù)據(jù),最重要的是擁有有理有據(jù)、令人信服的甩鍋技巧。

0x06 總結(jié)

以上即是我認(rèn)為在掃描器中比較有用且能夠公開(kāi)的小技巧,希望能夠?qū)δ阌兴鶐椭?/span>

服務(wù)熱線

138-6598-3726

產(chǎn)品和特性

價(jià)格和優(yōu)惠

安徽靈狐網(wǎng)絡(luò)公眾號(hào)

微信公眾號(hào)

东乡族自治县| 黔南| 关岭| 西藏| 荥阳市| 寻乌县| 永寿县| 昆山市| 开阳县| 濮阳县|