zoukankan      html  css  js  c++  java
  • DVWA靶场之Command Injection(命令行注入)通关

    Command Injection

    Low:

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

    }

    ?>

    两个值得注意的方法:stristr与php_uname

    Stristr(被搜索的字符串,要搜索的字符串)搜索字符串在另一字符串中的第一次出现,返回字符串的剩余部分(从匹配点)

    Php_uname(’s’)是返回操作系统名称

    源代码判断了是Windows系统,还是*nix系列系统,但对$target = $_REQUEST[ 'ip' ];

    中ip没有任何检查,所以你懂的

    用127.0.0.1&&命令  可绕过

    Medium

    多了个过滤&&与;

    那么用&也可以顶

    但是双符号就是传说中的短路运算,a&&b,只有a命令正确执行才会执行b命令,否则根本不管你后面写得天花乱坠,是为“短路”

    而&比较仁慈,a命令无论成功与否,都会执行b命令(“||”与“|”类似道理)

    用127.0.0.1&;&命令  可绕过

    High

    High还是用的黑名单,只不过比原来的黑名单长了不少

    嗯。。。。。。出题人比较nice,特意过滤了“| ”(有空格的),但是没有过滤“ |”,只能说是故意留洞,正常哪有这么写的。。。

    127.0.0.1 |命令    可绕过

    Impossible

    Stripslashes 用于去掉反斜杠

    Explode用于将字符串按某种条件分割打散变成数组

    is_numeric 用于判断输入是否是数字

    还有checkToken

    格式已经定死了,没毛病

    开发基础:用户都是大坏蛋,不要相信他们的输入

  • 相关阅读:
    python---装饰器用法小结
    python---mysql事务
    python---sql语句集体更改数据
    python多继承中的深度优先与广度优先
    python---copy
    vue 主次页面区分
    css 过渡动画
    android web外壳
    cordova 打包 守护进程无法启动
    JavaScript 原生控制元素添加删除
  • 原文地址:https://www.cnblogs.com/lcxblogs/p/13257445.html
Copyright © 2011-2022 走看看