DVWA靶场通关(Command injection)

命令注入(Command Injection),是指在某些需要输入数据的位置,还构造了恶意的代码破坏了原先的语句结构。而系统缺少有效的过滤,最终达到破坏数据、信息泄露甚至掌控电脑的目的。许多内容管理系统CMS存在命令注入漏洞。

命令执行定义:当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system,exec,shell_exec等,当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行攻击。

形成原因:脚本语言优点是简洁,方便,但也伴随着一些问题,如速度慢,无法解除系统底层,如果我们开发的应用需要一些除去web的特殊功能时,就需要调用一些外部程序。带来方便的同时也存在威胁。

漏洞危害:继承Web服务程序的权限去执行系统命令或读写文件
                  反弹shell
                  控制整个网站甚至控制服务器
                  进一步内网渗透

代码执行与命令执行的区别:

命令执行漏洞:
直接调用操作系统命令(相当于在cmd下敲命令)
命令执行漏洞的原理:在操作系统中,“&、|、||”都可以作为命令连接符使用,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令(如添加一个名为admin 密码为admin的用户 net user admin admin/add net localgroup administrators admin /add 加入管理员组(赋予管理员权限))

命令执行常用函数:system()、Exex()、Passthru()、Shel_exec()。

代码执行漏洞:
应用程序在调用一些能够将字符串转换为代码的函数(如PHP中的eval)时,没有考虑用户是否控制这个字符串,将造成代码执行漏洞。
很难通过黑盒查找漏洞,大部分都是根据源代码判断代码执行漏洞。

代码执行相关函数:
PHP: eval、assert、preg_replace()、+/e模式(PHP版本<5.5.0)

Low

DVWA靶场通关(Command injection)_第1张图片

{$cmd}
"; } ?>

 stristr() 函数搜索字符串在另一字符串中的第一次出现。

php的代码的含义为接收了用户输入的ip,然后根据服务器是否是Windows NT系统,对目标ip进行不同的ping测试。但是这里对用户输入的ip并没有进行任何过滤,所以我们可以进行命令执行漏洞。

乱码问题

ping ip地址后,出现一堆乱码的情况,解决方法:在DVWA-master\dvwa\includes目录下找到dvwaPage.inc.php文件中所有的”charset=utf-8”,修改”charset=gb2312”,即可。

(1)正常输入百度的ip地址:14.215.177.38,可以正常ping通。

DVWA靶场通关(Command injection)_第2张图片

(2)利用命令连接符,执行命令注入漏洞。

14.215.177.38&ipconfig

ipconfig命令可以换成其他系统命令。

这里可以引入命令行的几种操作方式:

A && B: 先执行A,如果成功,执行B;

A || B :先执行A,如果失败,执行B;

A | B:管道,先执行A后,将A的结果作为B的输入,打印的是B的结果;

A & B:先执行A,然后不管成功与否,执行B;

DVWA靶场通关(Command injection)_第3张图片

(3)

 

 

medium

 '',
        ';'  => '',
    );

    // Remove any of the charactars in the array (blacklist).
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );

    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }

    // Feedback for the end user
    echo "
{$cmd}
"; } ?>

从set blacklist相关代码可以看出,网页会对&&和;进行过滤。

(1)验证过滤形式,注入命令:127.0.0.1&&ipconfig

网页回显错误,即网页对&&和;有明显过滤,需要想办法绕过这两个符号。

DVWA靶场通关(Command injection)_第4张图片

(2)在php中,知道网页是将&&和;直接过滤掉,因此可以构造&;&相当于&&。

注入命令:127.0.0.1&;& ipconfig

DVWA靶场通关(Command injection)_第5张图片

High

 '',
        ';'  => '',
        '| ' => '',
        '-'  => '',
        '$'  => '',
        '('  => '',
        ')'  => '',
        '`'  => '',
        '||' => '',
    );

    // Remove any of the charactars in the array (blacklist).
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );

    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }

    // Feedback for the end user
    echo "
{$cmd}
"; } ?>

在该level下,发现网页过滤的字符更多,如&、;、|、-、$、(、)......

现存问题:网页在dir和ipconfig命令注入时均可正常回显,而net user以及ls命令则没有回显。

只在网上找到一种方法,并没有解决现存的问题,该方法为将安装PHP的版本为5.5.38,配置环境变量后也无法解决。

你可能感兴趣的:(DVWA,p2p,网络协议,网络)