DVWA靶场之Command Injection(命令行注入)通关

Command Injection

Low:

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {

    // Get input

    $target = $_REQUEST[ 'ip' ];

 

    // 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 "<pre>{$cmd}</pre>";

}

 

?>

两个值得注意的方法:stristr与php_uname

Stristr(被搜索的字符串,要搜索的字符串)搜索字符串在另一字符串中的第一次出现,返回字符串的剩余部分(从匹配点)

Php_uname(’s’)是返回操作系统名称

源代码判断了是Windows系统,还是*nix系列系统,但对$target = $_REQUEST[ 'ip' ];

中ip没有任何检查,所以你懂的

用127.0.0.1&&命令  可绕过

Medium

多了个过滤&&与;

那么用&也可以顶

但是双符号就是传说中的短路运算,a&&b,只有a命令正确执行才会执行b命令,否则根本不管你后面写得天花乱坠,是为“短路”

而&比较仁慈,a命令无论成功与否,都会执行b命令(“||”与“|”类似道理)

用127.0.0.1&;&命令  可绕过

High

High还是用的黑名单,只不过比原来的黑名单长了不少

嗯。。。。。。出题人比较nice,特意过滤了“| ”(有空格的),但是没有过滤“ |”,只能说是故意留洞,正常哪有这么写的。。。

127.0.0.1 |命令    可绕过

Impossible

Stripslashes 用于去掉反斜杠

Explode用于将字符串按某种条件分割打散变成数组

is_numeric 用于判断输入是否是数字

还有checkToken

格式已经定死了,没毛病

开发基础:用户都是大坏蛋,不要相信他们的输入

posted @ 2020-07-06 20:53  anoldcat  阅读(314)  评论(0编辑  收藏  举报