Command Injection

Command Injection
command injection即命令注入,是指恶意用户通过构造请求,对于一些执行系统命令的功能点进行构造注入,本质上是数据与代码未分离。对于特殊的需求没有对请求进行过滤,导致绕过从而导致注入。
一.low
首先我们查看下php代码。
Command Injection
php_uname(mode)

这个函数会返回运行php的操作系统的相关描述,参数mode可取值”a” (此为默认,包含序列”s n r v m”里的所有模式),”s ”(返回操作系统名称),”n”(返回主机名),” r”(返回版本名称),”v”(返回版本信息), ”m”(返回机器类型)。

可以看到,服务器通过判断操作系统执行不同ping命令,但是对ip参数并未做任何的过滤,导致了严重的命令注入漏洞。

1.注入查看用户,输入127.0.0.1&&net user

2.查看端口信息,输入127.0.0.1&ifconfig

在linux里面,甚至可以结合cat命令来显示文件内容。
二.medium
先审计一下代码。
Command Injection
相比Low级别的代码,服务器端对ip参数做了一定过滤,即把”&&” 、”;”删除,本质上采用的是黑名单机制,因此依旧存在安全问题。

1.查看用户,如果输入127.0.0.1&&ifconfig

再输入127.0.0.1&ifconfig

因为只屏蔽了&&,所以&等还能继续使用。

三.high
首先进行代码审计。

Command Injection
High级别的代码进一步完善了黑名单,但由于黑名单机制的局限性,我们依然可以绕过。

可以看到,在“| ”这里多加了一个空格,“|”是管道符,表示将Command 1的输出作为Command 2的输入,并且只打印Command 2执行的结果。

这里我们还是测试出端口,输入127.0.0.1|ifconfig

测试成功。