命令注入

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

例子

<?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 语法

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

最后更新于