CTFSHOW Web 10
打开网页如下
- 有一个登录跟(取消按钮),点击取消按钮会把源码下载下来如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <?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' order by 1# '"; $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|
,而且得到flag的条件是$password==$row['password']
拿到password需要用到row=mysqlifetchassoc(result)
1 2 3 4 5 6 7 8
| mysqli_fetch_assoc
// demo mysqli_fetch_assoc(result); 返回代表读取行的关联数组。如果结果集中没有更多的行则返回 NULL。 取到result那一列所有值返回成一个数组
|