*本文作者:si1ence,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。
前言
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 原创奖励计划,未经许可禁止转载。