解密2021年新型webshell
先讲一下拿到webshell的过程哈
事件的起因是酱紫的
之前和我玩CrossFire(CF)的一个朋友,前几天突然找到我,问怎么查询网站是不是真的
然后他解释说他想考一级消防工程师证,因为种种原因自己考不了,所以就找到了一家教育机构
那家机构就是假站的官方指定报名机构
他当时一听就感觉有问题,然后打电话到中国人事考试网咨询,了解到根本没有什么官方指定报名机构
然后我一搜索,就发现是假的了,也是急忙制止了我的这位好哥们
当然,这里可以忽视哈,我嘛,肯定是非常直的啦
接下来我便对假站开始了渗透之旅
再说下去就要跑题了,哈哈,至于入侵假站的过程,请听下回分解。
反正我几经波折,我终于拿到了那个假站的webshell
上去一看,哟呵,居然有人在2021-06-13就已经通过和我一样的入侵方式拿到了webshell,并且还明目张胆的放在根目录(我是没那么大胆)
于是,我便把这webshell拿来玩了一下,结果居然发现里面功能还挺多的,感觉还不错
但是打开代码一看,里面的乱码字符看得我头疼
是不是一眼就看到了str_rot13函数,我也是,但发现rot13解不开
于是我便转战pack()函数,俺不懂PHP,咋办捏
当然是打开万能的百度啦,家中常用,嘿嘿
这不就明白了,然而,有什么卵用呢
不管了,直接把这几行搞懂了,那么我们不要它执行,我们要他输出
把后两排删掉,直接上echo $uri; 开启Debug
结果,输出了个这么个鬼玩意
那咱肯定不服啊,建立个1.php文件,把这内容搞里头
尾部没有任何函数,就顶部有关键函数
我尝试过解密gzuncompress(base64_decode()),然并卵
那继续使用输出思路,看到就是这个eval在执行全局,那咱再来一波echo
VS Code抽风,咱们浏览器来当Debug哈
怎么样,看到这一串是不是头都大了
复制下来,继续建2.php呗
看到这个,是不是头更大了,我忍住了想关电脑睡觉的冲动,给他格式化并注释一下
舒服多了不是,但玩归玩,闹归闹,他还继续跟我开玩笑
去掉那些杂七杂八混淆视听的函数,那不就又回到1.php的开头了嘛
echo(gzuncompress(base64_decode("$data")));
那咱直接把1.php复制成3.php,直接替换里面的密文不就是了
Ctrl+C,打开浏览器看看结果
明人不恰暗shi,我想刀了他
这些函数的密文我都懒得解了,跟2.php一样的,直接替换密文做4.php吧
您猜怎么着,报错了,那肯定是哪里没对
既然开始报错了,那咱还得继续研究3.php echo出来的结果
然后发现,这密文就是base64加密的结果,我直接base64解密不就行了
但是,啊,但是,我去网站(base64.us)解密,然后复制回来,发现还是继续报错
base64.us就是这点不好,容易搞出编码问题来
那我就自己写个base64解密的php吧,现在已经来到了5.php
把3.php做出来的结果的密文搞里头,然后浏览器调试结果
捏麻麻滴,这什么鬼,直接给我执行HTML代码了,并且还给我中文乱码了是吧
那咱直接查看一波源代码,顺便把查看编码改成GBK
芜湖,这不就来了
然后上6.php,书写终章
这里的报错可以忽略不计了,几乎都是里面需要中文字符才提示报错的,并且头部已经关闭报错输出了
值得注意的是,图中的两个地方
1.源代码里面看见$password是被注释的,我们需要去掉
2.还记得之前的乱码问题么,那是因为他这里设定的是强制gbk编码(源代码里可见),咱们直接改成UTF-8
保存,调试终章
OK,完美谢幕