zoukankan      html  css  js  c++  java
  • PHP的命令执行漏洞学习

    首先我们来了解基础

    基础知识来源于:<web安全攻防>徐焱

    命令执行漏洞

    应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system、exec、shell_exec、passthru、popen、proc_popen等函数可以执行系统命令。当黑客能控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行漏洞,这就是命令执行漏洞。

    先了解下这些知识

    Windows管道符

    “|”:直接执行后面的语句。如:ping 127.0.0.1|whoami

    “||”:如果前面执行的语句出错泽执行后面的语句,前面的语句智能为假 如:ping 2 || whoami

    “&”:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假 如 ping 127.0.0.1&whoami

    “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句只能为真。例如:ping 127.0.0.1&&whoami

    Linux管道符

    “;”:执行完前面的语句再执行后面的 例如:ping 127.0.0.1;whoami

    “|”:显示后面语句的执行结果 例如:ping 127.0.0.1|whoami

    “||”:当前面的语句只能怪出错时,执行后面的语句,例如:ping 1||whoami

    “&”:如果当前面的语句为假则直接执行后面的语句,前面的语句可真可假。例如:ping 127.0.0.1&whoami

    “&&”:如果前面的语句为假则直接出错,也不执行后面的,前面的语句只能为真 例如:ping 127.0.0.1&&whoami

    测试学习我们可以写一个简单的PHP

    1 <?php
    2 
    3        echo system(“pint -n 2 ”.$_GET[‘IP’]);
    4 
    5 ?>

    搭建好我们可以进行简单漏洞攻击 如图我们执行了查看系统当前用户命令

    DVWA靶场的命令执行漏洞

    LOW

    Low Command Injection Source

    先分析代码!

    1.    <?php  
    2.      
    3.    if( isset( $_POST[ 'Submit' ]  ) ) {  
    4.        // Get input  
    5.        $target = $_REQUEST[ 'ip' ];  
    6.      
    7.        // Determine OS and execute the ping command.  
    8.        if( stristr( php_uname( 's' ), 'Windows NT' ) ) {  
    9.            // Windows  
    10.            $cmd = shell_exec( 'ping  ' . $target );  
    11.        }  
    12.        else {  
    13.            // *nix  
    14.            $cmd = shell_exec( 'ping  -c 4 ' . $target );  
    15.        }  
    16.        // Feedback for the end user  
    17.        echo "<pre>{$cmd}</pre>";  
    18.    }  
    19.      
    20.    ?>   

    我们分析这个靶场的代码可以看到$_REQUEST接受用户传过来的值 我们并没有看到有什么过滤机制的代码所以 可以输入任何东西。

    测试执行ping127.0.0.1没问题 我们利用管道命令来 再加命令语句

     

    我这边环境时本地windows我们选用windows的管道符 来执行  OK

     

    Medium

    Medium Command Injection Source

    继续先分析代码

    1.    <?php  
    2.    if( isset( $_POST[ 'Submit' ]  ) ) {  
    3.        // Get input  
    4.        $target = $_REQUEST[ 'ip' ];  
    5.        // Set blacklist  
    6.        $substitutions = array(  
    7.            '&&' => '',  
    8.            ';'  => '',  
    9.        );  
    10.        // Remove any of the charactars in the array (blacklist).  
    11.        $target = str_replace( array_keys( $substitutions ), $substitutions, $target );  
    12.        // Determine OS and execute the ping command.  
    13.        if( stristr( php_uname( 's' ), 'Windows NT' ) ) {  
    14.            // Windows  
    15.            $cmd = shell_exec( 'ping  ' . $target );  
    16.        }  
    17.        else {  
    18.            // *nix  
    19.            $cmd = shell_exec( 'ping  -c 4 ' . $target );  
    20.        }  
    21.        // Feedback for the end user  
    22.        echo "<pre>{$cmd}</pre>";  
    23.    }  

    我们注意6-9行 这里是个黑名单过滤 我们可以想办法绕过    这里虽然把&&和分号;加入了黑名单,但是我们还可以用逻辑或(||)、管道符(|)或(&)来命令执行  绕过

  • 相关阅读:
    VMWare Workstation的激活码 亲测有效
    虚拟机搭建appRtcDemo的appr.tc服务器
    windows webrtc支持H264的源码编译
    windows webrtc 编译
    获取windows系统分屏个数
    windows cmd窗口光标闪动效果消失
    win10 检测系统是不是正版的 以及slmgr.vbm -dlv命令不生效
    symfonos2
    利用ARP欺骗进行MITM(中间人攻击)
    内网学习之MySQL服务提权
  • 原文地址:https://www.cnblogs.com/xhds/p/10870758.html
Copyright © 2011-2022 走看看