php-bypass

$npx mdskill add wgpsec/AboutSecurity/php-bypass

Bypass PHP sandbox restrictions to execute arbitrary commands.

  • Enables command execution when disable_functions or open_basedir blocks standard access.
  • Depends on PHP runtime environment and available extensions like FFI or iconv.
  • Analyzes PHP configuration to select the most effective bypass technique.
  • Returns executable code snippets tailored to the detected security constraints.

SKILL.md

.github/skills/php-bypassView on GitHub ↗
---
name: php-bypass
description: "PHP 安全特性绕过:disable_functions 和 open_basedir 限制突破。当已获取 webshell 但命令执行函数被禁用或文件操作被 open_basedir 限制时使用"
metadata:
  tags: "disable_functions,open_basedir,php,bypass,rce,webshell,LD_PRELOAD,putenv,FFI,iconv,imagick,绕过,沙箱逃逸"
  category: "exploit"
---

# PHP 安全特性绕过方法论


当你已获取 webshell(能执行 PHP 代码)但无法执行系统命令时,本 skill 指导你突破 `disable_functions` 和 `open_basedir` 限制。

## 深入参考

- 方法 A-G 完整绕过代码 → [references/disable-functions-bypass.md](references/disable-functions-bypass.md)
- open_basedir 绕过方法 → [references/open-basedir-bypass.md](references/open-basedir-bypass.md)
- CTF PHP 技巧(OPcache 投毒、多态文件) → [references/ctf-php-tricks.md](references/ctf-php-tricks.md)

---

## Phase 0: 信息收集(30 秒判断)

首先确认限制范围,这决定了攻击路径:

```php
<?php
echo "disable_functions: " . ini_get('disable_functions') . "\n";
echo "open_basedir: " . ini_get('open_basedir') . "\n";
echo "PHP version: " . phpversion() . "\n";
echo "OS: " . PHP_OS . "\n";
echo "Loaded extensions: " . implode(', ', get_loaded_extensions()) . "\n";
// 关键扩展检查
echo "FFI: " . (extension_loaded('ffi') ? 'YES' : 'NO') . "\n";
echo "imagick: " . (extension_loaded('imagick') ? 'YES' : 'NO') . "\n";
echo "iconv: " . (extension_loaded('iconv') ? 'YES' : 'NO') . "\n";
echo "putenv: " . (function_exists('putenv') ? 'YES' : 'NO') . "\n";
echo "mail: " . (function_exists('mail') ? 'YES' : 'NO') . "\n";
echo "error_log: " . (function_exists('error_log') ? 'YES' : 'NO') . "\n";
?>
```

## Phase 1: disable_functions 绕过决策树

```
putenv() 可用?
├─ YES → mail()/error_log() 可用?
│   ├─ YES → 方法 A: LD_PRELOAD 劫持(最稳定,首选)
│   └─ NO → iconv 扩展加载?
│       ├─ YES → 方法 B: iconv + LD_PRELOAD
│       └─ NO → imagick 扩展?
│           ├─ YES → 方法 C: ImageMagick delegate
│           └─ NO → 下一分支
├─ NO → FFI 扩展 (PHP ≥ 7.4)?
│   ├─ YES → 方法 D: FFI 直接调用 system()
│   └─ NO → PHP < 7.4.21 / 8.0 < 8.0.8?
│       ├─ YES → 方法 E: PHP Backtrace UAF (CVE-2019-11043 等)
│       └─ NO → PCNTL 扩展?
│           ├─ YES → 方法 F: pcntl_exec()
│           └─ NO → 方法 G: ShellShock (CVE-2014-6271) / Apache mod_cgi
```

> 每种方法的完整代码见 [references/disable-functions-bypass.md](references/disable-functions-bypass.md)

---

## 实战速查表

| 看到什么 | 方法 | 命令 |
|----------|------|------|
| putenv + mail 可用 | LD_PRELOAD | 上传 .so → putenv → mail() |
| putenv + error_log 可用 | LD_PRELOAD | 同上,用 error_log() 替代 |
| putenv + iconv 可用 | GCONV_PATH | 上传 gconv-modules + .so |
| imagick 已加载 | delegate 注入 | MVG/SVG payload |
| PHP ≥ 7.4 + FFI | FFI::cdef | 直接调 system() |
| pcntl 已加载 | pcntl_exec | fork + exec |
| Bash ≤ 4.3 | ShellShock | putenv 环境变量注入 |
| 全部不行 | UAF exploit | 搜索版本对应的利用脚本 |

## 注意事项

- 优先检查 phpinfo() 确认环境,不要盲试
- LD_PRELOAD 方法需要上传 .so 文件,确保有可写目录
- FFI 方法最简洁但 PHP 版本要求高
- 某些 Docker 环境 `/usr/sbin/sendmail` 不存在 → mail() 不触发 execve → 换 error_log
- 成功执行命令后记得清理上传的 .so 文件

More from wgpsec/AboutSecurity

SkillDescription
401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
agent-security|
ai-data-security|