最近一直刷新AppScan的下限,對於Appscan報出的中危漏洞“啟用不安全的HTTP方法”。分析了其掃描機制,以及處理方法和繞開方法。如果不耐煩看分析過程,請直接跳到文章最后看處理方法。
0. 漏洞背景
“啟用了不安全的 HTTP 方法”屬於“中”危漏洞。漏洞描述是:根據APPSCAN的報告,APPSCAN通過OPTIONS請求,當響應中發現DELETE、SEARCH、COPY等方法為允許方法時,則認為是漏洞。 詳見下圖:
Web服務器(以IIS為例)在沒有任何設置是,使用OPTIONS命令,可以返回所有能夠響應的HTTP方法,如OPTIONS, TRACE, GET, HEAD, COPY, PROPFIND, SEARCH, LOCK, UNLOCK。
發送OPTIONS請求:(使用telnet或者secureCRT等軟件):
1. 實驗環境
Web服務器環境:IIS6。站點結構如下,使用了主機頭myapp.com指向了我的測試應用app。
配置只有讀取權限,還有執行權限設置為“純腳本”。
2. 實驗
實驗1:裸實驗
未啟用WebDav,OPTIONS命令的返回中,只顯示只有OPTION、TRACE、GET、HEAD和POST。
APPSCAN掃描結果也沒有掃描出“啟用了不安全的 HTTP 方法”這個漏洞。
實驗2:開啟WebDAV
啟用WebDAV后,OPTIONS命令的返回中,顯示多了很多新的HTTP方法,包括APPSCAN會認為是不安全的COPY、SEARCH、LOCK和UNLOCK等。
APPSCAN的掃描結果如下,掃描到了“啟用了不安全的HTTP方法”這個漏洞。
結論1:如果關閉WebDAV支持,APPSCAN則無法掃描出“啟用了不安全的 HTTP 方法”漏洞。
實驗3:URLScan正向實驗
安裝URLScan(URLScan是微軟提供給IIS6的路徑重定向工具,在這里下載),在URLScan.ini中配置,只允許GET、HEAD和POST這三個常用命令(UseAllowVerbs=1)。
運行OPTIONS命令,則服務器返回響應失敗,無法列出所有的HTTP方法
APPSCAN掃描結果顯示,禁用OPTIONS命令后無法掃描出“啟用了不安全的 HTTP 方法”這個漏洞。
實驗4:URLScan正向實驗2
安裝URLScan,在URLScan.ini中配置,只允許GET、HEAD、POST和OPTIONS命令。
由於URLScan的模式,要么設置允許命令,要么設置禁止命令,不能同時設置。因此允許這4個命令,表示不能禁用其他命令,因此OPTIONS會顯示其他的可用命令。
由於APPSCAN默認是以OPTIONS命令來看漏洞的,因此自然本次掃描會有漏洞。
實驗5:URLScan反向實驗
在URLSCAN中,采用禁止模式(UseAllowVerbs=0),只禁止OPTIONS命令。
結果OPTIONS被禁用。
當然此時其他不安全的HTTP方法,其實是沒有禁用的,如LOCK、UNLOCK等,只是是否可用要看服務器是否設置了對應的程序。
實驗5:URLScan反向實驗2
在URLSCAN中,采用禁止模式(UseAllowVerbs=0),禁止不安全HTTP方法- DELETE- SEARCH- COPY- MOVE- PROPFIND- PROPPATCH- MKCOL- LOCK- UNLOCK- PUT等。
但是使用OPTIONS命令后,仍然顯示這些不安全的方法,即使這些方法實際已經被禁用了。
見下圖,使用LOCK命令已經顯示無法訪問了,但APPSCAN實際也會說有漏洞,由於OPTIONS方法告訴它有這些HTTP方法。
結論2:消除“啟用了不安全的 HTTP 方法”漏洞,關鍵在於是否能夠阻止OPTIONS命令。
3. URLScan參數討論
使用URLSCAN確實可以禁用掉無用的HTTP方法,但根據參數配置,有可能會產生副作用。因此需要了解每一個參數,以減少對現有系統的影響。
| 參數(默認值) |
描述 |
建議值 |
| UseAllowVerbs=1 |
; If 1, use [AllowVerbs] section, else use the [DenyVerbs] section. |
0,使用禁用模式,禁用OPTIONS |
| UseAllowExtensions=0 |
; If 1, use [AllowExtensions] section, else use the [DenyExtensions] section. |
0,使用禁用模式,並將禁用列表清空 |
| NormalizeUrlBeforeScan=1 |
; If 1, canonicalize URL before processing. |
0,不掃描 |
| VerifyNormalization=1 |
; If 1, canonicalize URL twice and reject request if a change occurs. |
0,不掃描 |
| AllowHighBitCharacters=0 |
; If 1, allow high bit (ie. UTF8 or MBCS) characters in URL. |
0,不啟用 |
| AllowDotInPath=0 |
; If 1, allow dots that are not file extensions. |
0,不啟用 |
| RemoveServerHeader=0 |
; If 1, remove the 'Server' header from response. |
0,不啟用 |
| EnableLogging=1 |
; If 1, log UrlScan activity. |
0,不啟用 |
| PerProcessLogging=1 |
; If 1, the UrlScan.log filename will contain a PID (ie. UrlScan.123.log). |
0,不啟用 |
| AllowLateScanning=0 |
; If 1, then UrlScan will load as a low priority filter. |
0,不啟用 |
| PerDayLogging=1 |
; If 1, UrlScan will produce a new log each day with activity in the form 'UrlScan.010101.log'. |
0,不啟用 |
| UseFastPathReject=0 |
; If 1, then UrlScan will not use the RejectResponseUrl or allow IIS to log the request. |
0,不啟用 |
| LogLongUrls=0 |
; If 1, then up to 128K per request can be logged. If 0, then only 1k is allowed. |
0,不啟用 |
| MaxAllowedContentLength =30000000 |
請求內容最大長度,默認為3G |
不修改 |
| MaxUrl=260 |
URL長度,默認260字符 |
不修改 |
| MaxQueryString=2048 |
QueryString的最大長度,默認2048字符 |
不修改 |
| RejectResponseUrl= |
不修改 |
|
| LoggingDirectory |
不修改 |
|
| AlternateServerName= |
不修改 |
4.處理方法
回顧一下實驗過程中的結論:
如果禁止OPTIONS命令,但沒有禁用其他危險命令如MOVE等,APPSCAN不會提示漏洞
如果禁止所有危險命令如MOVE等(實際調用出錯),但是OPTIONS命令沒有禁止並且顯示這些危險命令可以使用,APPSCAN提示漏洞。
如果關閉WebDAV支持,APPSCAN則無法掃描出“啟用了不安全的 HTTP 方法”漏洞。
因為不開啟WebDAV,則不開啟OPTIONS命令。
因此
王道方法是:禁用所有危險命令以及OPTIONS(OPTIONS命令並不危險,但不禁用是不行的)
邪道方法是:只禁用OPTIONS命令,其他危險命令APPSCAN是不會主動掃描,留着也不會報漏洞。但實際是不是有,這個就要具體分析了。
綜上:解決“啟用了不安全的 HTTP 方法”,可采用3種方法:
| 方法 |
描述 |
|
| 1 |
禁用WebDAV功能 |
根本解決。不引入新的不穩定因素URLSCAN |
| 2 |
使用URLSCAN禁用OPTIONS
|
實際沒有真正禁用,但縮小了影響范圍。URLSCAN可能有副作用。 |
| 3 |
使用URLSCAN禁用OPTIONS和其他HTTP方法 或者只允許GET/POST/HEAD方法(自動禁用其他方法) |
等效於取消WebDAV,但URLSCAN可能副作用。 |





![clip_image002[7] clip_image002[7]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vYW5pYy8yMDEyMDkvMjAxMjA5MjMxMjI0MzYzMDcuZ2lm.png)
![clip_image002[6] clip_image002[6]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vYW5pYy8yMDEyMDkvMjAxMjA5MjMxMjI0NDE4ODgzLmpwZw==.png)
![clip_image002[9] clip_image002[9]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vYW5pYy8yMDEyMDkvMjAxMjA5MjMxMjI0NDM2MDE2LmdpZg==.png)
![clip_image002[11] clip_image002[11]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vYW5pYy8yMDEyMDkvMjAxMjA5MjMxMjI0NDQ2NjcyLmdpZg==.png)
![clip_image002[13] clip_image002[13]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vYW5pYy8yMDEyMDkvMjAxMjA5MjMxMjI0NDU0Nzg2LmdpZg==.png)
![clip_image002[15] clip_image002[15]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vYW5pYy8yMDEyMDkvMjAxMjA5MjMxMjI0NDYyOTY2LmdpZg==.png)
![clip_image002[17] clip_image002[17]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vYW5pYy8yMDEyMDkvMjAxMjA5MjMxMjI0NDc1MDUwLmdpZg==.png)
![clip_image002[19] clip_image002[19]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vYW5pYy8yMDEyMDkvMjAxMjA5MjMxMjI0NDg3NjI1LmdpZg==.png)


![clip_image002[21] clip_image002[21]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vYW5pYy8yMDEyMDkvMjAxMjA5MjMxMjI0NTU4MzUxLmdpZg==.png)
![clip_image004[7] clip_image004[7]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vYW5pYy8yMDEyMDkvMjAxMjA5MjMxMjI0NTY0MDIzLmdpZg==.png)
![clip_image002[23] clip_image002[23]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vYW5pYy8yMDEyMDkvMjAxMjA5MjMxMjI0NTc0NDcxLmdpZg==.png)
![clip_image004[9] clip_image004[9]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vYW5pYy8yMDEyMDkvMjAxMjA5MjMxMjI0NTk0MzIwLmdpZg==.png)
![clip_image006[6] clip_image006[6]](/image/aHR0cHM6Ly9pbWFnZXMuY25ibG9ncy5jb20vY25ibG9nc19jb20vYW5pYy8yMDEyMDkvMjAxMjA5MjMxMjI1MDA4NjQuZ2lm.png)
