web CE DVWA CE mengnankkzhou 2023-11-28 2024-08-08 简介:
Command Injection(命令注入),就是指通过提交一些恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。
Low
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input $target = $_REQUEST[ 'ip' ]; // 确定操作系统并执行ping命令 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>"; }
通过代码可以发现,服务器仅仅只是判断了不同的操作系统执行不同的命令,并没有做其他的限制
注:操作符的使用
1 2 3 4 5 A;B A 不论正确与否都会执行 B 命令 A&B A 后台运行,A 和 B 同时执行 A&&B A 执行成功时候才会执行 B 命令 A|B A 执行的输出结果,作为 B 命令的参数,A 不论正确与否都会执行 B 命令 A||B A 执行失败后才会执行 B 命令
运行127.0.0.1&ls查看目录
Medium
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input $target = $_REQUEST[ 'ip' ]; // Set blacklist //设置命令黑名单,里面包含&&和; $substitutions = array( '&&' => '', ';' => '', ); // 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 "<pre>{$cmd}</pre>"; } ?>
从源码中可以看出,相比于Low难度,增加了黑名单,将 “&&”,“;” 做了限制,将其改成空格,但是别的没有什么改变,在这里依旧可以通过 127.0.0.1 & ipconfig 来绕过
High
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 <?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input $target = trim($_REQUEST[ 'ip' ]); // Set blacklist //设置命令黑名单,里面包含& ;| - $ ( ) \ ' || $substitutions = array( '&' => '', ';' => '', '| ' => '', '-' => '', '$' => '', '(' => '', ')' => '', '`' => '', '||' => '', ); // 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 "<pre>{$cmd}</pre>"; } ?>
看到代码,发现黑名单中的限制更多了,像 ‘&’,‘| ‘,’||’,‘;’,‘$’ 等许多都加了限制,但是要仔细观察 ,比如说这个 '| ’ ,它是在管道符后面加了个空格,因此考虑使用 127.0.0.1 |ipconfig 来绕过