🎯
PHP代码审计入门指南
  • PHP代码审计入门指南
  • 序言
  • PHP审计基础
    • ⚒️工具准备
    • VS CODE 常用快捷键
    • PHP代码审计思路
    • 💉PHP用户可控输入速查表
    • 🧬PHP敏感函数速查表
    • 🩹PHP原生过滤方法
    • PHP动态调试-Xdebug安装配置
  • PHP常见漏洞
    • 命令注入
    • 代码注入
    • 文件包含
    • SQL注入
    • 文件操作
    • XSS
    • SSRF
    • CSRF
    • XXE
    • 反序列化
    • LDAP注入
    • 其他漏洞
  • PHP常见框架
    • Thinkphp
    • Laravel
    • Codeigniter
    • Yii
    • Cakephp
  • PHP审计实例
    • -
  • 附录
    • PHP弱类型
  • 🎉总结
  • 🔗参考
由 GitBook 提供支持
在本页
  1. PHP常见漏洞

命令注入

将用户输入拼接到命令行中执行 导致的任意命令执行问题

例子

<?php
$command = 'ping -c 1 '.$_GET['ip'];
system($command); //system函数特性 执行结果会自动打印
?>

这是一段简单的php代码 专门执行ping 命令并输出内容

正常输入: /xxx.php?ip=114.114.114.114

执行命令 ping -c 1 114.114.114.114

由于ip参数没有任何过滤限制

所以攻击者可以这样输入: /xxx.php?ip=114.114.114.114;whoami

执行命令 ping -c 1 114.114.114.114;whoami

这样就可以执行攻击者定义的命令 whoami

实际审计时输入常常不会非常简单 都有复杂的处理 慢慢追踪参数来源

遇到不会的函数可以在PHP手册查找对应的功能

命令执行基本语法不会的可以学习学习linux windows命令行语法基础

在审计时遇到输入可控时 要检查是否存在escapeshellarg escapeshellcmd 函数转义 或者是其他的处理方法(如 强制类型转换 替换字符 等)

常见bash shell 语法

符号
描述
示例

<和>

输入输出重定向

echo abc >1.txt

;分号

按照从左到右顺序执行命令

id;whoami;ls

| 管道符

将左侧命令的输出作为右侧命令的输入

ps -aux|grep root

&&

按照从左到右顺序执行命令 只有执行成功才执行后面的语句

||

按照从左到右顺序执行命令 只有执行失败才执行后面的语句

一些常见的可以执行系统命令的函数/语法

函数/语法
描述
例子

system

执行命令并输出结果

system('id');

exec

执行命令 只可获取最后一行结果

exec('id',$a); print_r($a);

passthru

同 system

passthru('id');

shell_exec ` (反引号)

执行命令并返回结果

$a=shell_exec('id');print_r($a); $a=`id`;print_r($a);

popen

执行命令并建立管道 返回一个指针 使用fread等函数操作指针进行读写

$a=popen("id", "r"); echo fread($a, 2096);

proc_open

同 popen (进程控制功能更强大)

pcntl_exec

执行命令 只返回是否发生错误

pcntl_exec('id');

上一页PHP动态调试-Xdebug安装配置下一页代码注入

最后更新于3年前

见PHP手册