[网络安全学习篇59]:OS命令注入_cmd=whoami

[网络安全学习篇59]:OS命令注入_cmd=whoami
最新回答
甜心少女

2021-06-10 05:40:43

OS命令注入(以cmd=whoami为例)

OS命令注入是一种安全漏洞,当应用程序在调用系统命令时,未对用户输入进行充分过滤或转义,导致攻击者能够注入恶意命令并在服务器上执行。这种漏洞通常出现在使用脚本语言(如PHP)开发的应用程序中,尤其是当这些应用程序需要调用外部程序或系统命令时。

一、OS命令注入的原理及成因

  1. 原理

    应用程序在调用系统命令时,将用户输入作为命令参数的一部分进行拼接。

    如果用户输入未经过滤或转义,攻击者可以构造特殊输入,以注入恶意命令。

  2. 成因

    脚本语言开发快速、简洁,但可能缺乏对系统底层的严格控制。

    应用程序在调用系统命令时,未对用户输入进行充分的验证和过滤。

二、漏洞的危害

  1. 继承Web服务器程序权限:攻击者可以继承Web服务器的用户权限,执行系统命令。
  2. 读写文件:利用Web服务器权限,攻击者可以读写服务器上的文件。
  3. 反弹Shell:攻击者可以通过命令注入获得一个交互式Shell,进一步控制服务器。
  4. 控制整个网站或服务器:在极端情况下,攻击者可以完全控制整个网站或服务器。

三、相关函数及测试代码

  1. system()

    能够将字符串作为OS命令执行,并自带输出功能。

    测试代码:system.php,提交参数?cmd=ipconfig。

  2. exec()

    能将字符串作为OS命令执行,但需要显式输出执行结果。

    测试代码:exec.php,提交参数?cmd=whoami。

  3. shell_exec()

    类似于system(),但返回命令的完整输出,使用最多。

    测试代码:shell_exec.php,提交参数?cmd=whoami。

  4. passthru()

    类似于system(),但直接输出命令结果,不进行任何处理。

    测试代码:passthru.php(注意:示例中代码文件名应为passthru.php而非shell_exec.php),提交参数?cmd=whoami。

  5. popen()

    执行OS命令,但返回一个文件指针,而不是命令结果。

    测试代码:popen.php,提交参数?cmd=whoami,并查看生成的1.txt文件。

  6. 反引号

    反引号内的字符串会被解析成OS命令执行。

    测试代码:backticks.php(注意:示例中代码文件名应为反映实际功能的名称,如backticks_exec.php),提交参数?cmd=whoami。

四、漏洞利用

在Windows系统下,攻击者可以利用OS命令注入漏洞执行以下操作:

  • 查看系统文件:提交参数?cmd=type c:windowssystem32driversetchosts,查看系统hosts文件。
  • 显示当前路径:提交参数?cmd=cd(注意:此命令本身可能不会有太多输出,但可用于构造更复杂的命令)。
  • 写文件:提交参数?cmd=echo "<?php phpinfo();?>" > c:phpStudyWWWCommandishell.php,写入一个包含phpinfo()函数的PHP文件。

五、防御方法

  1. 减少命令执行函数的使用:尽量避免在应用程序中使用能够执行系统命令的函数。
  2. 禁用危险函数:在php.ini文件的disable_functions配置项中禁用system()、exec()等危险函数。
  3. 参数过滤与转义:在进入命令执行的函数或方法之前,对参数进行严格的过滤和转义。例如,使用引号包裹参数值,并在拼接前调用addslashes()函数进行转义。
  4. 使用更安全的替代方案:如果必须执行外部程序或命令,考虑使用更安全的替代方案,如通过配置好的API接口调用外部服务。

综上所述,OS命令注入是一种严重的安全漏洞,需要开发人员高度重视并采取有效的防御措施来避免其发生。