DVWA_(Command Injection)

前言

命令注入是一种攻击,其目标是通过易受攻击的应用程序在主机操作系统上执行任意命令。当应用程序将不安全的用户提供的数据>(表单,cookie,HTTP标头等)传递给系统shell时,可能会发生命令注入攻击。在此攻击中,攻击者提供的操作系统命令通常以易受攻击的应用程序的权限执行。命令注入攻击很可能主要是由于输入验证不足。
此攻击与代码注入不同,因为代码注入允许攻击者添加自己的代码,然后由应用程序执行。在命令注入中,攻击者扩展了执行系统命令的应用程序的默认功能,而无需注入代码。

command Injection>>借助PHP对服务端shell的启用>>攻击者插入恶意shell命令

low

源码分析

PHP执行流程>>传入IP地址>>php判断操作系统类型>>执行PING命令
从源码可分析,未对IP地址过滤。可以采用IP&&dos 命令对操作系统恶意操作
写入一句话
echo ““>F:\phpstudy\PHPTutorial\WWW\DVWA\vulnerabilities\post123.php

medium

对IP && ;; 进行过滤

1)我们可以通过&和;混搭,欺骗过滤函数,测试代码如下
2) command1&command2 先执行command1,不管是否成功,都会执行command2

higth

‘| ’ 过滤出现了差错

Command 1 | Command 2
“|”是管道符,表示将Command 1的输出作为Command 2的输入,并且只打印Command 2执行的结果。

impossible

对传入参数,对IP做约束。使得用户只能输入IP地址。

防御

摘自OWASP
理想情况下,开发人员应使用现有的API作为其语言。例如(Java):使用位于javax.mail的可用Java API,而不是使用Runtime.exec()发出’mail’命令。
如果不存在此类可用API,则开发人员应清除所有恶意字符输入。实施积极的安全模型将是最有效的。通常,定义合法字符要比非法字符容易得多。

命令执行执行模型

命令执行漏洞可以执行系统命令,代码执行漏洞也会执行系统命令

  • 命令执行漏洞是直接调用操作系统命令,叫做OS命令执行漏洞
  • 代码执行漏洞则是靠执行脚本代码调用操作系统命令

PHP命令执行

函数system()、shell_exec()、exec()和passthru()

命令执行

<?php 
    $host=$argv[1];
    system("ping",$host);
>

执行命令 "php.exe cmd.php www.123.com"

代码执行

eval() 解析括号中的内容

动态函数调用

  1. 危险代码一

    <?php
    function A(){
        return "A()函数..";
    }
    function B(){
        return "B()函数..";
    }
    $fun = $_REQUESTS['fun'];
    echo $fun()
    >

    PHP根据$fun值来调用对应函数,如"http://www.123.com/function.php?fun=phpinfo"
    就会输出函数phpinfo()

  2. 危险代码二

    <?php
        $fun = $_GET['fun'];
        $par = $_GET['par'];
        $fun($par)
    >

    "http://www.123.com/funtion.php/?fun=system&par=net user"组成函数为system("net user")

PHP函数代码执行漏洞

preg_replace()、ob_start()、array_map()

<?php
    $arr = $_GET['arr'];
    $array = array(1,2,3,4,5);
    $new_array = array_map(%arr,$array);
?>

http://192.168.43.195/xxx.php?arr=phpinfo

还有关于JAVA、框架命令执行漏洞等知识充沛在接触.

防范命令执行漏洞

  • 尽量不使用系统执行命令
  • 执行命令函数或方法之前,变量做好过滤
  • 使用动态函数之前,确保必须是使用指定函数
  • 无法控制危险函数最好不要使用

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!