当前位置:网站首页>中职网络安全技能竞赛——广西区赛中间件渗透测试教程文章
中职网络安全技能竞赛——广西区赛中间件渗透测试教程文章
2022-07-05 05:38:00 【旺仔Sec】
中间件渗透测试环境可以私信博主
PHPStudy后门分析
由于PHPStudy遭受了供应链攻击, PHPStudy软件安装包中的php_xmlrpc.dll
模块隐藏有后门. 其中, 影响的版本包括PHPStudy 20161103
和PHPStudy 20180211
. 经过分析, 该后门的核心功能模块有两部分: 第一是通过判断特殊的HTTP头执行远程PHP代码; 第二个是通过判断特殊的HTTP头后连接C&C服务器并执行回传的PHP代码.
实验环境: Windows 7(32位) , PHPStudy 20181103 版本 php-5.2.17/ext 扩展文件夹下的php_xmlrpc.dll.
样本信息
名称 | php_xmlrpc.dll |
---|---|
SHA256 | aea021c5d79adbdc8a755d2f56db4f2e71781abbdcce2a2fa6e04aff3c02be75 |
类型 | 32位DLL |
大小 | 73,728Byte |
定位特征代码位置
使用IDA打开样本php_xmlrpc.dll
, 然后打开字符串窗口, 可以发现@eval()
这个代码执行函数 (查阅资料得知, @是PHP提供的错误信息屏蔽专用符号, eval()
函数把字符串按照PHP代码执行, 中间%s格式符为字符串传参). 如下图所示, 共有两处eval特征代码, 都位于该后门的核心函数中:
根据这两个字符串的位置和IDA的交叉引用功能, 就可以直接定位到后门代码的位置. F5分别生成这部分后门漏洞的伪代码, 进行如下分析.
远程命令执行后门功能分析
通过参考相关资料得知, 如果攻击者构造的HTTP头中含有Accept-Encoding
字段时就会进入对应的攻击流程. 如果HTTP头中同时含有Accept-Encoding: gzip,deflate
以及Accept-Charset
两个字段时,会先解密Accept-Charset
中Base64
后的PHP代码,然后执行该代码,从而造成远程命令执行的危害. 这一部分的伪代码分析如下图所示:
连接C&C执行任意代码功能分析
如果攻击者发起的HTTP请求的头部中带有Accept-Encoding:compress,gzip
时则会进入另外一个后门功能逻辑:其首先会拼接获取到的磁盘序列号和MAC地址,后续会将磁盘序列号和MAC地址上传作为被控机器的唯一标识,之后会拼接一些其它数据以及PHP函数传递给PHP Zend引擎执行, 这一部分的伪代码如下图所示:
下面的spprintf函数是php官方自己封装的函数,实现了字符串拼接功能.
在这个后门功能模块中, spprintf函数拼接了两次字符串, 分别是: spprintf(&v46, 0, a_evalSS, aGzuncompress, v46);
和 spprintf(&v45, 0, aS_valSS, v42, aGzuncompress, v45);
. 如下图所示:
由于变量v45和v46在之后都作为参数被zend_eval_strings
函数调用执行了, 因此, 可以推测出变量v45和v46存储了shellcode. 上述代码段分别对变量v45和v46进行了预处理. 分析得知, v46的shellcode位于地址1000C028
到1000C66C
之间, v45的shellcode位于地址1000C66C
和1000D5C4
之间. (见上图红框)
使用HexEditor查看第一个shellcode的对应位置, 可以看到shellcode前的gzuncompress
标识, 如下图所示:
Zend引擎需要解析的这段PHP代码的核心是gzuncompress
, 查阅资料得知, 该函数通常用于混淆免杀, 其整个语句的构造为$V='';$M='';;@eval(gzuncompress('数据');
. 网上已经有了提取并解压这两段shellcode的脚本, 不重复造轮子. 其代码如下所示:
在 ./phpStudy/php 目录运行下运行上述脚本, 成功获得两段被base64编码过的数据, 如下图所示:
第一段base64数据解码如下:
这段PHP代码功能是向本机发起一个HTTP请求,并带有Accept-Encoding:compress,gzip
请求头,然后该请求就可以自动激活功能模块二,从而连接C&C服务器上传系统信息。自动触发方式结束后就会更新当前触发的时间,下一次就根据这个时间来判断是否进入自动触发方式:
第二段base64数据解码如下:
这段PHP代码中内置有域名表和端口表, 批量遍历后发送请求到C&C地址360se.net, 然后执行由C&C服务器返回的内容.
远程命令执行后门测试
首先, 运行并启动存在问题的PHPStudy版本, 如下图所示:
EXP如下图, 通过构造http请求实现远程代码执行. 其中, echo system("net user")
命令经base64编码后为ZWNobyBzeXN0ZW0oIm5ldCB1c2VyIik7
, 可以显示主机上的用户, 用于回显验证. Accept-Encoding
字段值设为gzip,deflate
, 然后才会判断是否存在Accept-Charset
字段并取得该字段的值. base64解码后执行, 即实现远程命令执行:
在burpsuite中构造上述http请求, 并发送该请求给目标主机, 回显验证了该后门利用实现了.如下图所示:
边栏推荐
- Educational Codeforces Round 107 (Rated for Div. 2) E. Colorings and Dominoes
- Haut OJ 2021 freshmen week II reflection summary
- Little known skills of Task Manager
- 使用Electron开发桌面应用
- Web APIs DOM node
- 过拟合与正则化
- 个人开发的渗透测试工具Satania v1.2更新
- 每日一题-搜索二维矩阵ps二维数组的查找
- Codeforces Round #715 (Div. 2) D. Binary Literature
- 剑指 Offer 04. 二维数组中的查找
猜你喜欢
随机推荐
Improvement of pointnet++
Acwing 4301. Truncated sequence
Haut OJ 1243: simple mathematical problems
How many checks does kubedm series-01-preflight have
Daily question - Search two-dimensional matrix PS two-dimensional array search
Introduction to memory layout of FVP and Juno platforms
YOLOv5添加注意力機制
Talking about JVM (frequent interview)
Haut OJ 2021 freshmen week II reflection summary
Haut OJ 1352: string of choice
Hang wait lock vs spin lock (where both are used)
Detailed explanation of expression (csp-j 2021 expr) topic
Mysql database (I)
第六章 数据流建模—课后习题
Find a good teaching video for Solon framework test (Solon, lightweight application development framework)
A problem and solution of recording QT memory leakage
剑指 Offer 58 - II. 左旋转字符串
Pointnet++学习
Pointnet++ learning
Csp-j-2020-excellent split multiple solutions