美文网首页程序员
DVWA--Command Execution

DVWA--Command Execution

作者: 六亲不认的步伐 | 来源:发表于2020-05-27 12:38 被阅读0次

本次搭建OWASP靶机中自带的DWVA靶机对命令注入执行


Simple级别

源代码查看
<?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>';      
    }    
}
?>
关键函数

php_uname(mode) 函数:
mode内容如下:
'a':此为默认。包含序列 "s n r v m" 里的所有模式。
's':操作系统名称。例如: FreeBSD。
'n':主机名。例如: localhost.example.com。
'r':版本名称,例如: 5.1.2-RELEASE。
'v':版本信息。操作系统之间有很大的不同。
'm':机器类型。例如:i386。
shell_exec() 函数:
通过shell执行命令并以字符串的形式返回完整的输出

代码审计:

通过关键函数结合源代码,可以看到原意是通过ping命令和用户输入的信息进行拼接调用shell_exec()函数来执行shell命令,最后回显结果。由于此处只是进行简单凭借,所以通过构造特殊输入内容,可以利用命令注入漏洞来进行执行。

命令注入

核心思想是,通过执行完第一个command后,在执行恶意拼接的command
主要使用的命令拼接符号有 | || & &&

拼接符 使用方法 功能 适用系统
| command1 | command2 只显示Command2结果 W/L
|| command1 || command2 显示command1和command2结果,Command1不影响2 W/L
& command1 & command2 显示command1和command2结果,Command1不影响2 W
&& command1 && command2 显示command1和command2结果,Command1必须正确 W/L
; command1 ; command2 显示command1和command2结果,Command1不影响2 L

Simple测试
| 符号测试
|| 符号测试,Command1正确
|| 符号测试,Command1错误
&& 符号测试,Command1正确
&& 符号测试,Command1错误
; 符号测试

Medium级别

源代码查看
<?php
if( isset( $_POST[ 'submit' ] ) ) {
    $target = $_REQUEST[ 'ip' ];
    $substitutions = array(
        '&&' => '',
        ';' => '',
    );
    // 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>';      
    }    
}
?>
代码分析

相对于Simple的源代码,此处进行了关键性的黑名单替换,对&&与;进行了过滤,所以可以通过采用未过滤连接符( | 与 || )进行测试。

| 符号测试
当然可以尝试继续利用黑名单的&&符号,可以进行绕过操作,为了更好理解,可以添加代码,查看效果。代码添加部分如下
回显过滤后效果
根据最后黑名单替换结果变为' '的思想,可以输入&;&进行绕过,由于;进入了黑名单,而&与第二个&和黑名单不匹配所以,可以进行绕过。
运行效果如下
成功利用命令注入漏洞
经过测试可进行绕过的payload有
&a& ;&-&;&+&;&_&;
对于这些payload,刚开始不是很理解为什么可以执行,通过在系统呢测试,可以发现,本质上是将中间的符号当做命令执行了
&uname&测试

High级别

源代码查看
High等级代码
代码分析

相对于Simple和Medium的源代码,对输入内容进行严格的预处理,通过点.将Ip地址分开,将每部分进行判断是否是数字。

关键函数

stripslashes():删除反斜杠

反函数:addslashes()函数添加的反斜杠
explode():将字符串分割后打散为数组

is_numeric():函数用于检测变量是否为数字或数字字符串

此函数具有漏洞,常见于CTF中获取flag时进行与特定值比较
目前自己未发现有好的绕过方法,详细可以参考资料一栏

思维扩展

可以根据目前High级别的源码,可进行稍作修改,变为正则表达式匹配,自己尝试写出的简单WAF如下:
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

参考资料

CSDN:PHP is_numeric()函数安全漏洞
51CTO:PHP 函数漏洞原理解析

实战练习

可参考文章
RCE-命令注入

相关文章

  • DVWA--Command Execution

    本次搭建OWASP靶机中自带的DWVA靶机对命令注入执行 Simple级别 源代码查看 关键函数 php_unam...

  • 59 - ASM之JVM Execution Model

    Execution Model 什么是Execution Model Execution Model就是指Stac...

  • Javascript执行上下文

    原文章资料:Understanding Execution Context and Execution Stak ...

  • 02-01 AOP学习之execution

    execution:使用“execution(方法表达式)”匹配方法执行 execution是AOP匹配中的基础,...

  • Java 多线程设计模式之 Single Threades Ex

    Single Threades Execution 模式 所谓 Single Threades Execution...

  • How to win?

    the king: your execution. execution divides winners and l...

  • AOP

    1)execution(* (..))//表示匹配所有方法2)execution(public * com. sa...

  • Execution

    1、.py文件第一行插入python解释器的安装位置可快速执行,如 该方法需要知道python解释器安装位置,可使...

  • spring aop

    一、Spring Aop 表达式: (1)、execution表达式详解: execution(* com.sam...

  • TiDB new feature max_execution_t

    max_execution_time的作用 据说max_execution_time是mysql5.7.8(没有实...

网友评论

    本文标题:DVWA--Command Execution

    本文链接:https://www.haomeiwen.com/subject/tvhxuhtx.html