在进入这道题目之前,有提示说是SQL约束,这是什么鬼,,,,于是就有以下的。。。。。
什么是SQL约束:
这是注册页面代码:
<?php
// Checking whether a user with the same username exists
$username = mysql_real_escape_string($_GET['username']);
$password = mysql_real_escape_string($_GET['password']);
$query = "SELECT *
FROM users
WHERE username='$username'";
$res = mysql_query($query, $database);
if($res) {
if(mysql_num_rows($res) > 0) {
// User exists, exit gracefully
.
.
}
else {
// If not, only then insert a new entry
$query = "INSERT INTO users(username, password)
VALUES ('$username','$password')";
.
.
}
}
这是登陆页面的代码:
<?php
$username = mysql_real_escape_string($_GET['username']);
$password = mysql_real_escape_string($_GET['password']);
$query = "SELECT username FROM users
WHERE username='$username'
AND password='$password' ";
$res = mysql_query($query, $database);
if($res) {
if(mysql_num_rows($res) > 0){
$row = mysql_fetch_assoc($res);
return $row['username'];
}
}
return Null;
从以上的代码可以看出,在登陆和注册的代码里,都过滤的该过滤的,这是不是就是说没有什么可利用的呢,答案当然是NO!
接下来是由两个一样的连接,这两个讲的都是SQL约束攻击,但是从两个不同的角度来阐述,里面的原理和操作思路都非常的清晰,话不多说,直接上链接:
https://www.cnblogs.com/ECJTUACM-873284962/p/8977983.html
https://www.freebuf.com/column/179817.html
看完以上,我想你们应该理解了,什么是约束攻击了,接下来,就是这道题的题解
首先,我想,应该是先注册一个账号吧。。。
扫描二维码关注公众号,回复:
4727764 查看本文章
用户名那里应该就不需要多加解释了吧。。。
然后再登陆。。。。。
这里需要注意的是,在登陆账号的时候,用户名前面的空格是和你在注册账户里的用户名前面的空格是一样多的,要不然就会一直说账号或密码不正确。。。。。
登上后,如图所示,我想应该是可以交flag了。。。。。。