一次编码WebShell bypass D盾的分析尝试

前言

webshell是获得网站的控制权后方便进行之后的入侵行为的重要工具,一个好的webshell应该具备较好的隐蔽性能绕过检测,最近偶然间捕获到了一个webshell的样本经过了4次编码来绕过检测感觉功能还挺强大的,于是就简单分析一下然后再简单的优化了一下发现更nice。

0x1 功能

本地访问了一下主要功能也就3个主要包括读取系统信息与当前用户、命令执行和文件上传,感觉还是常规的操作访问界面如下:

主要代码如下:

0x2 解码

主要是用了eval函数配合base64进行简单的绕过,base_decode函数进行了简单的大小写混淆都是很常规的操作。

对base64编码的字符串进行解码后得到如下字符串,得到如下字符串又是一串代码。

出于直觉对base64的字符串再一次进行解码,得到一串乱码,看来也不是这么容易。

关键点定位在了str_rot13 和gzinflate二个函数上面,就顺便查了一下这二个函数的用途,都是属于一种编码类感觉这操作很nice。

然后通过修改一下webshell的内容,将解码后的源码就直接输出了,算了一个2次base64、1次str_rot13、1次gzinflate就4次编码了,这个几个编码都是标准库里的函数。

解码后的代码一共只有60+行,短小精悍。

0x3 详细代码

感觉还是很6的操作,先收集了网站系统的信息IP、路径、权限一类的数据通过邮件的方式先发送到了已经设定好的邮箱setoran.target26@gmail.com,这个操作不错。

同时检测本的一个bajak的session值,确保邮件不会重复发送。

在本地创建一个副本放在指定的目录下 images/stories/food/footer.php:

后续就是一个命令执行和文件上传的操作,还有一个读取配置的文件的代码上二级目录的configuration.php,说实话并不是很理解。

0x4 监测

简单抓包看了一下流量层面执行了一个ipconfig,没有捕获到比较有用的信息,命令主要是以cmd的参数进行传递。

感觉操作很牛逼的webshell,应该不会被查杀出来的,毕竟解码还是比较复杂的。

然后用D盾进行查杀,报警提示为4级,这好不科学只有给Orz了。看看提示的是什么,主要依据是eval函数跟了一个base64的字符串,总觉得有什么不对,按理说不应该D盾应该是没有解码的!!!迷之自信!!

按照这个猜想,我自己创建了一个hello world的字符,按照通用的方式进行编码,然后使用D盾进行查杀,果然查杀出来了!!!

2个文件、2个可疑。D盾的确是通过这二个特征进行识别的,主要特征就是如下,那想想办法绕过呢。

首先测试一下注释绕过base64的检测,的确成功绕过了base64的特征,但是仍然识别出了eval的后门还是4级有点upset了。

既然是这样的话,那就再换一种方式。

用函数的方法输出eval居然成功了,级别直接就降低到了2级!!!

0x5 总结

1. 问题到底是还出在eval这个函数,后面陆陆续续尝试了字符串拼接、大小写混淆、逆序等方式居然都没有绕过。最近又要忙着搬砖就没有继续深入下去了,欢迎各位大佬们尝试顺便给点思路指点一二。

2. 通过一些编码和变化去绕过检测规则对于技术的总结提高还是很有帮助的,日常还是需要多练习尝试。

3. 上次偶然间看到有一些通过特征提取使用朴素贝叶斯做机器学习检测webshell的,攻防对抗越来越有意思以后的绕过技巧也许会更加丰富。

4. 用别人的的过狗大马小马一句话的时候,也要多留心别人留一个后门瞬间就尴尬了。

*本文作者:si1ence,本文属 FreeBuf 原创奖励计划,未经许可禁止转载

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-11-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PPV课数据科学社区

数据流编程教程:R语言与DataFrame

DataFrame DataFrame 是一个表格或者类似二维数组的结构,它的各行表示一个实例,各列表示一个变量。 一. DataFrame数据流编程 ? 二....

496120
来自专栏小樱的经验随笔

BugkuCTF 计算器

前言 写了这么久的web题,算是把它基础部分都刷完了一遍,以下的几天将持续更新BugkuCTF WEB部分的题解,为了不影响阅读,所以每道题的题解都以单独一篇文...

280100
来自专栏点滴积累

geotrellis使用(十)缓冲区分析以及多种类型要素栅格化

目录 前言 缓冲区分析 多种类型要素栅格化 总结 参考链接 一、前言        上两篇文章介绍了如何使用Geotrellis进行矢量数据栅格化以及栅格渲染,...

38380
来自专栏牛客网

阿里技术一面,Java研发岗

之前过了个简单的简历面,过了几天后没打来以为凉了,然后昨晚又接到了电话,括号内容是回答说的,理解有限,不一定都对,欢迎纠正~加油每一个牛友们! 阿里一面: ...

47190
来自专栏ImportSource

设计模式-搞个接口,留有余地,让你我不再尴尬

设计模式,Design Patterns,Pattern,翻译为“模式”总感觉不够接地气,用今天的话来说可以叫“套路”。设计模式就是写代码的过程中一些常规打法和...

378120
来自专栏Golang语言社区

C++ 实现银行排队服务模拟

教程简介:使用 C++对银行排队服务进行模拟,以事件驱动为核心思想,手动实现模板链式队列、随机数产生器等内容,进而学习概率编程等知识。作为可选进阶,这个模型同时...

51350
来自专栏用户画像

13年5月 软考笔记整理

虚拟存储器为了给用户提供更大的随机存储空间而采用的一种存储技术。它将内存(主存)与外存(辅存)结合使用,好像有一个容量巨大的内存储器,工作速度接近于主存,每位成...

10430
来自专栏CDA数据分析师

三行Python代码,让数据预处理速度提高2到6倍

Python 是机器学习领域内的首选编程语言,它易于使用,也有很多出色的库来帮助你更快处理数据。但当我们面临大量数据时,一些问题就会显现……

20740
来自专栏大数据杂谈

如何用 Python 执行常见的 Excel 和 SQL 任务

作者:ROGER HUANG 本文翻译自:http://code-love.com/2017/04/30/excel-sql-python/ 来源:https:...

58260
来自专栏web前端教室

如何阅读JS源码?读源码有什么好处

这几天在公司接手了一个项目,是之前其它组的,现在要继续完成它。那我要做的第一件事,就是熟悉代码。对,就是看别人写的JS代码。文档嘛,自然是没有的。 之前也有试过...

531100

扫码关注云+社区

领取腾讯云代金券