WEB漏洞---命令注入

  命令注入(Command Injection)是指通过提交恶意构造的参数破坏命令语句结构。从而达到执行恶意命令的目的。

  查看命令注入的流程:

    1;查看是否调用系统命令。

    2;函数以及函数的参数是否可控。

    3;是否拼接命令注入。

  下面我们使用dvwa来做测试。

    A;我们先将安全等级调整为“low”

  1;查看源代码

<?php

if( isset( $_POST[ ‘Submit‘ ]  ) ) {
    // Get input
    $target = $_REQUEST[ ‘ip‘ ];

    // 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>";
}

?>

  2;代码分析:

    核心函数shell_exec(),该函数的功能就是通过shell执行命令并将完整输出作为字符串返回。整个代码看下来并没有对输入的参数做一些过滤。几乎可以判定存在命令注入的漏洞。

  3;漏洞利用:

    使用&&来执行多条命令(Window和linux都可以使用)输入命令“127.0.0.1 && ifconfig ”这个时候我们发现ifconfig 命令也成功被执行且返回效果。

  B;下面我们将安全等级调整为“Medium”

    1;查看代码

<?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>";
}

?>

    2;代码分析:

      这里我们发现代码中采用了黑名单的方法过滤了字符串“&&”,“;”也就说类似于127.0.0.1 && ifconfg 这样使用被过滤的连接符号就无法在成功执行。

      我们都知道,采用黑名单并不是绝对安全的,比如上面代码当中就没有过滤“&”那么下面我们就可以利用这点。

    3;漏洞利用:

      输入127.0.0.1 & ifconfig

  C;安全等级“High”

    1;分析代码,这里我们可以看到只是补充了黑名单。黑名单在过滤的过程中一般会出现遗漏关键字的问题。另外就是关键字过滤不当的问题。比如下面代码我们发现黑名单当中‘| ‘ 这么符号的过滤,我们仔细发现后面有一个空格,也就是说如果我们输入的参数管道符不带空格,代码就无法匹配到。

<?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>";
}

?>

    2;漏洞利用:

      注入代码:127.0.0.1|ifconfig 我们可以发现命令ifconfig可以被成功执行。

  C;Impossible

    1;查看代码

<?php

if( isset( $_POST[ ‘Submit‘ ]  ) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ ‘user_token‘ ], $_SESSION[ ‘session_token‘ ], ‘index.php‘ );

    // Get input
    $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‘ ) ) {
            // Windows
            $cmd = shell_exec( ‘ping  ‘ . $target );
        }
        else {
            // *nix
            $cmd = shell_exec( ‘ping  -c 4 ‘ . $target );
        }

        // Feedback for the end user
        echo "<pre>{$cmd}</pre>";
    }
    else {
        // Ops. Let the user name theres a mistake
        echo ‘<pre>ERROR: You have entered an invalid IP.</pre>‘;
    }
}

// Generate Anti-CSRF token
generateSessionToken();

?>

    2;代码分析:

      这段代码一共进行了两点防护,第一是对token进行了验证。第二对输入数据进行了严格的限定(这里功能是执行PING命令。所以严格设定了输入形式为IP 的形式)

      注释:token可以预防csrf的攻击。预防原理是

      1;当客户端请求页面时,服务器会生成一个随机数Token,并且将Token放置到session当中。然后将Token发给客户端(一般通过构造hidden表单)

      2; 客户端提交请求时,Token会随着表单一起提交到服务器端。 
然后,如果应用于"anti csrf攻击",则服务器端会对Token值进行验证,判断是否和session中的Token值相等,若相等,则可以证明请求有效,不是伪造的。

原文地址:https://www.cnblogs.com/aaron456-rgv/p/12245934.html

时间: 2024-08-04 09:27:52

WEB漏洞---命令注入的相关文章

Web漏洞-SQL注入

原文地址:https://blog.51cto.com/10945453/2391352

Commix命令注入漏洞利用

介绍 项目地址:https://github.com/stasinopoulos/commix Commix是一个使用Python开发的漏洞测试工具,这个工具是为了方便的检测一个请求是否存在命令注入漏洞,并且对其进行测试,在其作者发布的最新版本中支持直接直接导入burp的历史记录进行检测,大大提高了易用性. 使用 选项:     -v VERBOSE详细程度级别(0-1,默认值:0).     --version 显示版本号并退出.     --output-dir=.. 设置自定义输出目录路径

WEB安全第一篇--对服务器的致命一击:代码与命令注入

零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的payload技巧以便于备忘.不是大神.博客内容非常基础,如果真的有人看而且是大牛们,请不要喷我,欢迎指正我的错误(水平有限). 一.基本原理: 1.代码注入和命令注入的本质: 用户输入没有经过过滤而且与程序员开发的代码拼接后构成完成的可执行的代码段被服务器执行(命令也是代码的一部分,不过是拼接在命令执行

WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等

核心概念 WAF Web应用防火墙(Web Application Firewall),简称WAF. Web攻击 针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入.XSS跨站.Webshell上传.命令注入.非法HTTP协议请求.非授权文件访问等.

PHP漏洞全解(二)-命令注入攻击

本文主要介绍针对PHP网站常见的攻击方式中的命令攻击.Command Injection,即命令注入攻击,是指这样一种攻击手段,黑客通过把HTML代码输入一个输入机制(例如缺乏有效验证限制的表格域)来改变网页的动态 生成的内容.使用系统命令是一项危险的操作,尤其在你试图使用远程数据来构造要执行的命令时更是如此.如果使用了被污染数据,命令注入漏洞就产生了. 命令注入攻击 PHP中可以使用下列5个函数来执行外部的应用程序或函数 system.exec.passthru.shell_exec.“(与s

【笔记】网易微专业-Web安全工程师-04.WEB安全实战-3.命令注入

命令注入(Command Injection):是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的. 前面的基础课程中,我们提到命令注入需要三个条件: 1. 是否调用系统命令? 2. 函数/参数是否可控? 3. 是否拼接输入? 具体怎么应用,我们在接下去的实战中学习和体会. DVWA实战: 1. 打开phpStudy或xampp,运行Apach和MySQL: 2. 浏览器进入DVWA主界面,在左侧栏选择DVWA Security安全等级为Low,然后进入Command Inj

命令注入漏洞总结

前言 漏洞本身原理很简单,用户的输入作为 要执行命令的一部分被 一些执行系统命令的函数去执行,如果不注意就能够让攻击者执行系统命令. 正文 相关的工具 https://github.com/ewilded/shelling https://github.com/commixproject/commix 测试环境 win 10 phpstudy https://github.com/commixproject/commix-testbed/ 部署在 http://test.commix.top 一

[Web安全]SQL注入

Web网站最头痛的就是遭受攻击.Web很脆弱,所以基本的安防工作,我们必须要了解! 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 通过一下的例子更形象的了解SQL注入: 有一个Login画面,在这个Login画面上有两个文本框分别用来输入用户名和密码,当用户点了登录按钮的时候,会对输入的用户名和密码进行验证.验证的SQL语句如下:       select * from student where userna

黑客攻防技术宝典Web实战篇(二)工具篇DVWA Web漏洞学习

DVWA是一个学习Web漏洞的很好的工具. DVWA全程是Damn Vulnerable Web Application,还有一个跟它一样好的工具尽在http://www.360doc.com/content/13/0614/22/11029609_292922372.shtml 下载地址:http://www.dvwa.co.uk/ 安装教程:http://www.cnblogs.com/yaochc/p/5049832.html 声明:下面的示例都是在DVWA Security为Low时发生