安全性测试入门 (二):Command Injection 命令行注入攻击和防御

本篇继续对于安全性测试话题,结合 DVWA 进行研习。

Command Injection:命令注入攻击。

image.png

1. Command Injection 命令注入

命令注入是通过在应用中执行宿主操作系统的命令,来达到破坏目的的一种攻击方式。如果我们的应用程序将不安全的用户输入传递给了系统命令解析器(shell),那么命令攻击就有可能发生。

通常来说,由应用程序传递操作系统命令会赋有和应用一样的权限,所以如果没有合理防御机制会给系统带来很大危害。命令注入攻击漏洞是 PHP 应用程序中常见的漏洞之一。

命令注入和代码注入不同,代码注入的目的在于将外部代码注入应用程序本身,并随程序执行;命令攻击的对象是服务器的宿主机。

DVWA 的相应模块中,有如下功能:应用提供了一个用来 ping 对象主机的功能。正常情况下,输入 IP 地址,返回命令结果。

image.png

在 DVWA 最低防御级别下,尝试进行攻击。

由于在 windows cmd 和 Linux shell 条件下,都可以通过&&来串行执行命令,我们附上 dir 命令执行后:

image.png

可以看到 dir 命令被执行,并且打印出了其结果。

如果我们用更复杂的命令附在以上命令之后,基本都可以执行,包括创建删除文件等等,可以对宿主系统造成非常大的危害。

2. 防御机制

分别对比 DVWA4 个安全级别的后台核心代码:

Low:
代码使用 shell_exec 将用户输入执行 ping 命令,基本没有任何防御。

image.png

Medium:
使用黑名单机制,替换掉如“&&”和“;”这样的命令符号。但是这样简单的黑名单是很容易绕过的,比如“|”管道符就没有屏蔽。

image.png

High:
完善了黑名单机制,筛除了更多字符,但仍有可能绕开。

image.png

Impossible:
使用白名单机制替换掉黑名单,将用户输入的字符串重组为数组,依次遍历数组内元素,删除其中所有的非数字和“.”。这样就达到了防御命令注入的目的。

image.png

回帖
请输入回帖内容 ...