本篇wp由小睿孩所写,已获得xrh同意上传!同时也感谢xrh的编写

第1关-第5关

第1关

image.png

靶场进去是这样的,然后查看网页源代码
image.png

ctfshow{5c545075-c0dd-4338-8bd8-6f6cadedd007}

第2关

image.png

第一种解法:
进去以后发现查看不了网页源代码

但是可以按crtl+u 查看

image.png

js前台拦截 === 无效操作

第二种解法

ctrl + shift + i 打开开发者工具

image.png

第三种解法

手动输入view-source协议:即可查看

image.png

第3关

首先进去界面

image.png

先抓包,开启拦截

将 Intercept 的选项变成on就可以了,如果是页面已经进去的情况下,那么重新刷新即可
image.png

然后右击

点击 send to repeater
image.png

得到返回的数据
image.png

成功得到flag,同样的在Inspector里可以看到返回包的细节,也可以看到flag

image.png
image.png

第4关


题目让我们查看robots,那么我们直接在url后面输入robot.txt
image.png

然后可以看到他给了一个路径

flagishere.txt,然后我们接着找

image.png

ctfshow{b95d7838-10a3-414b-814b-c0bc5a25231f}

同样的在bp里
image.png

第5关-第10关

第5关

image.png
phps
image.png

访问index.phps
image.png

ctfshow{0d81191b-ade7-4e83-82c8-b6106b470846}

第6关

image.png

通过dirsearch扫描发现

image.png

发现www.zip,然后在url后输入www.zip,发现网站把www.zip这个文件下下来,

image.png

打开后发现这有两个文件,

flag{flag_here}

这个flag不对,我们在打开另一个文件看看
image.png

发现他说flag是在fl000g.txt里,猜测可能是url加这个文件名字去访问
image.png

ctfshow{25b5e579-d458-4d55-beac-95a18eb7e723}

第7关

直接dirsearch 扫一下

txt复制

image.png

发现/.git/文件,然后在url后加上/.git/

ctfshow{5b3255e9-6826-4b0b-8a73-c937912ec9f6}

第8关

image.png

扫描一下发现

image.png

发现存在这个文件夹,所以我们在url后加上这个文件夹
image.png

第9关

image.png

这里提示了是使用vim命令的时候突然死机,想到是swp文件可能会泄露,因为是网页有个错别字,所以猜测可能文件是index.php

因为vim在异常终止的时候会在原文件后面加一个.swp的后缀

所以直接在url后面加index.php.swp试试

image.png

发现他自己下载了一个文件
image.png

ctfshow{ae1e33f0-7887-4b5f-a13a-4ab0ab12197c}

第10关

image.png

提到了cookie

那么我们就就向目标网址发送请求,然后看看他返回的数据

在 set-cookie里发现了flag,但是俩{}是被url加密的

可以解密一手

ctfshow{bc155f77-6679-4e60-b4a0-3bf912b3b14b}

第11关-第15关

第11关

image.png

ps: 这个域名出现问题了

命令: nslookup -qt = txt flag.ctfshow.com

flag{just_seesee}

第12关

image.png

先用dirsearch扫一下
image.png

然后发现网页底部有
image.png

372619038

结合题目给的信息可能这个就是密码啊

结合上面dirsearch的扫描结果发现还有/admin/index.php

弹出输入账户密码,账户是admin 密码是 372619038
image.png

ctfshow{760aa8fd-05dc-411b-a7e2-af67aa080d8c}

第13关

image.png

题目里提到了技术文档

所以我们应该查看网站的链接有无文档的链接

结果在网站末尾

image.png

这里出现了document也就是文档的意思

image.png

然后我们按照指示登录

默认后台地址:http://your-domain/system1103/login.php

默认用户名:admin

默认密码:admin1103

image.png

ctfshow{a14fd3f9-53cb-427b-9c85-dc559ca72ccc}

第14关

image.png

先扫描一下目录
image.png

然后发现有一个editor的目录
image.png

但是文件上传不行,因为提交内容以后是一个404

image.png

但是这里有图片显示

发现这里有一个图片空间,点进去发现能看到网站的源码和路径

然后进到网站目录下能发现一个nothinghere的文件夹

发现这里有fl000g.txt

image.png

image.png

第15关

image.png

他提示了邮箱

在这里发现了邮箱

1156631961@qq.com

image.png

然后这里还发现了一个admin目录,发现是后台登录系统,我们不知道账户和密码,但是我们可以选择忘记密码

image.png

但是他设置了密保

我的所在地是哪个城市?

但是我们之前拿到了qq邮箱,可以去qq搜索一下本人

发现他是西安人

那我们拿到位置了就可以重置密码
image.png

密码已经重置了
image.png

image.png

我们就拿到了flag

ctfshow{387353c7-525b-420c-8fb3-dee0d6063e27}

第16到20关

第16关

image.png

既然是探针,可以尝试几个默认的tz.php phpinfo.php info.php test.php
image.png

找到探针了

然后我们输入?act = phpinfo

当你在浏览器地址栏输入 ?act=phpinfo 并回车时,你实际上是在向服务器发送一个 GET 请求。顺便给你带个包裹,包裹名字叫 act,里面的内容是 phpinfo。

然后在这里找到了flag
image.png

第17关

image.png

先扫一下,

image.png

发现了backup.sql

image.png

得到flag

第18关

image.png

发现是一款游戏,但是让我玩到101分,

我们查看源代码

image.png

发现有一个js的文件,我们可以查看

image.png

我们发现了这一段

意思就是如果你的分大于100分就会弹出一个文本框,但是内容被加密了,是unicode编码,

这里有两种解密方法,第一种是使用js的调试功能

image.png

alert (“\u4f60\u8d62\u4e86\uff0c\u53bb\u5e7a\u5e7a\u96f6\u70b9\u76ae\u7231\u5403\u76ae\u770b\u770b”)

alert() 是 JavaScript 语言中内置的一个非常基础且常用的函数(准确地说是浏览器 window 对象的一个方法)。

简单来说,它的作用是:在浏览器窗口中弹出一个带有特定消息和“确定”(OK)按钮的警告对话框。

image.png

第二种我们可以使用随波逐流编码

也可以解密成功,但是这种方法解密出来的都表示需要我们去访问110.php

ctfshow{c3694a9b-471a-4921-9c3d-5c7e5cf6ba0a}

这样我们就拿到了flag

第19关

image.png

首先我们查看源代码,可以看到pazzword被写死了,也就是说我们可以绕过前端的验证逻辑,但是不能在表单里填写,因为这样的话,密码会再次被加密一遍,会导致校验不通过
image.png

所以我们可以使用bp
image.png

把pazzword里的数据换成 a599ac85a73384ee3219fa684296eaa62667238d608efa81837030bd1ce1bf04

image.png

同时我们知道解密算法,也可以还原这道题目的密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function checkForm(){
var key = "0000000372619038";
var iv = "ilove36dverymuch";
var pazzword = $("#pazzword").val();
pazzword = encrypt(pazzword,key,iv);
$("#pazzword").val(pazzword);
$("#loginForm").submit();

}
function encrypt(data,key,iv) { //key,iv:16位的字符串
var key1 = CryptoJS.enc.Latin1.parse(key);
var iv1 = CryptoJS.enc.Latin1.parse(iv);
return CryptoJS.AES.encrypt(data, key1,{
iv : iv1,
mode : CryptoJS.mode.CBC,
padding : CryptoJS.pad.ZeroPadding
}).toString();
}

加密算法:AES (高级加密标准)。具体来说是 AES-128,因为传入的 Key 是 16 个字符(16 Bytes ⋆8=128 Bits)。

加密模式:CBC (密码分组链接模式)。这种模式下,加密当前数据块会依赖前一个数据块的密文,因此必须提供一个初始化向量(IV)来加密第一个数据块。

密钥 (Key): “0000000372619038” (以 Latin1 也就是单字节 ASCII 编码解析)。

初始化向量 (IV): “ilove36dverymuch”。

填充方式 (Padding):ZeroPadding。AES 是一种块加密算法,要求明文必须是 16 字节的整数倍。如果不够,这里采用了补零(0x00)的方式凑满 16 字节。

解密脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from Crypto.Cipher import AES
import binascii
# 1. 提取前端代码中的硬编码 Key 和 IV (需转换为 bytes)
key = b"0000000372619038"
分区 WEB 的第 39 页
key = b"0000000372619038"
iv = b"ilove36dverymuch"
# 2. 后端期望接收到的密文 (Hex 十六进制字符串)
ciphertext_hex = "a599ac85a73384ee3219fa684296eaa62667238d608efa81837030bd1ce1bf04"
# 将 Hex 字符串转换为原始字节流
ciphertext = binascii.unhexlify(ciphertext_hex)
# 3. 初始化 AES 密码器 (必须指定相同的 CBC 模式和 IV)
cipher = AES.new(key, AES.MODE_CBC, iv)
# 4. 进行解密
padded_plaintext = cipher.decrypt(ciphertext)
# 5. 去除 ZeroPadding (把尾部补充的 0x00 字节去掉)
plaintext = padded_plaintext.rstrip(b'\x00')
# 6. 打印最终的明文密码
print(f"破解出的真实密码为: {plaintext.decode('utf-8')}")

i_want_a_36d_girl

所以这题的密码是admin i_want_a_36d_girl

第20关

image.png

首先进行目录扫描

image.png

发现有db目录,然后就去下面输入db.mdb,把文件下载下来后就发现这里有flag

image.png

第21-第22关

第21关

image.png

首先他给了我们一个字典,然后我们就可以根据他给的字典爆破

他的认证方式是这样的

image.png
首先我们抓包,抓的是用户名和密码那个界面的包

image.png
所以我们可以发现
image.png
在这里我们发现多了一行奇怪的东西
image.png
发现他是以admin:XXX的格式去显示的,我们后续准备爆破的时候需要记住这个格式。
准备开始爆破,在这里先对bp的intruder模块进行介绍
image.png
Payload position (载荷位置) :选择你需要爆破的位置
image.png
这里给了你几个选项,Add Clear Auto 分别是增加,清除和自动
bp选中方式是把你光标选中后的字符串包裹
image.png
比如你的光标在这里,我们添加以后就会遇到这种情况
image.png
他是成对的添加,所以我们需要爆破那一个字符串的话,我们就需要用光标选中那一串字符串
就像这样我们在添加的时候就会把这串字符串包裹上
image.png

Payload type (载荷类型):决定了数据的生成方式。图中当前选择的是 Simple list (简单列表),即手动或
导入一列字符串。Burp 还支持很多其他类型,比如 Numbers(数字递增)、Dates(日期生成)、Brute
forcer(字符组合爆破)等

image.png
image.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Simple list (简单列表):最基础也最常用的类型。你可以手动输入、粘贴或者从电脑导入一个文本文件(如
密码本)作为字典,Burp 会逐行读取并发送。
Runtime file (运行时文件):与 Simple list 类似,也是读取文件。但它是在攻击进行时逐行实时读取硬盘
上的文件,而不是一开始就把整个文件加载到内存里。非常适合读取几个 GB 的超大字典文件,能有效防
止 Burp 内存溢出卡死。
Numbers (数字):自动生成数字序列。你可以设置起始值、结束值、递增步长(比如从 1 到 1000,每次
加 1),还可以设置数字的格式(比如前缀补零 001, 002...)。常用于爆破订单号、验证码、ID 遍历等。
Dates (日期):生成日期序列。你可以指定日期的格式(如 yyyy-MM-dd)和时间跨度。常用于测试按日
期查询的接口或找回特定日期的历史记录。
组合与变形测试
Custom iterator (自定义迭代器):允许你将多个基础列表拼接到一起。比如,列表 1 是“颜色”,列表 2
是“衣服”,列表 3 是“尺码”,它会自动帮你组合出诸如 Red-Shirt-XL 这样的数据。
Character substitution (字符替换):根据你预设的规则替换基础词汇中的字符。例如著名的“黑客语
(Leet Speak)”,把 a 换成 @,e 换成 3,i 换成 1。用于密码变种爆破。
Case modification (大小写修改):自动对基础单词进行大小写转换。例如输入 admin,它会生成 Admin,
ADMIN, aDmIn 等组合。
Username generator (用户名生成器):你输入一些全名或邮箱(如 John Smith),它会根据欧美常见规
则自动生成各种用户名组合,如 jsmith, john.smith, smithj 等。


image.png
Payload count / Request count:只读的统计信息。它会根据你的配置实时计算当前有多少个有效载荷,
以及最终组合起来会发出多少个 HTTP 请求。
image.png
1
2
3
4
5
6
7
8
9
10
11
12
Payload configuration (载荷配置)
因为上面类型选择了 "Simple list",这里显示的便是如何向这个“简单列表”中添加数据的操作区。
右侧的大黑框:这就是你的 Payload 列表,当前是空的。
Paste (粘贴):直接将剪贴板里的多行文本粘贴到列表中(每行作为一个独立的 Payload)。
Load... (加载):从你的电脑本地选择一个 .txt 字典文件,将其内容导入列表。
Remove (移除) / Clear (清空):删除你在右侧列表中选中的某几项,或者一键清空整个列表。
Deduplicate (去重):自动扫描整个列表,删除重复的字符串,这样可以避免发送完全相同的无效请求,节
省测试时间。
Add (添加) 与 输入框 (Enter a new item):在输入框中手动输入你想要测试的字符串,然后点击 Add 按
钮(或直接回车),将其加入列表。
Add from list... (从内置列表添加):这是一个下拉菜单,Burp 官方内置了一些常用的基础字典(例如常见
用户名、密码、短目录名等),方便你快速调用。

image.png
1
2
3
4
5
6
7
8
9
Payload processing (载荷处理)
这个模块非常强大,它允许你定义一套规则,在 Payload 被实际插入到 HTTP 请求发出去 之前,对其进行
自动化的加工处理。
使用逻辑:你可以点击 Add (添加) 来增加处理规则。常见的规则包括:在字符串前后拼接特定字符(Add
prefix/suffix)、进行哈希计算(Hash)、Base64 编码/解码、或者使用正则表达式替换掉某些内容等。
执行顺序:添加到框内的规则会自上而下依次执行。你可以选中某条规则,通过 Up (向上) 和 Down (向
下) 按钮调整它们的处理顺序。
Edit (编辑) / Remove (移除):用于修改或删除已添加的处理规则。
在我们这一题,就需要把格式给base64以后去爆破,所以会用到这个模块

image.png
1
2
3
4
5
6
7
8
9
Payload encoding (载荷编码)
为了确保你的 Payload 在放入 HTTP 请求发送给服务器时,不会破坏 HTTP 协议本身的结构,通常需要进
行 URL 编码。
URL-encode these characters (勾选项):启用后,Burp 会在最终发送请求的最后一刻,对 Payload 中包
含的特定字符进行 URL 编码。
右侧的字符框:图中默认填写了 .\/=<>&+*;:"{}|^# 等字符。因为这些字符(如 & 和 =)在 HTTP 请求体
或 URL 中有特殊的语法含义,如果不进行编码(例如把 & 变成 %26),服务器可能会解析错误,导致你
的 Payload 无法完整地到达目标代码中。你可以根据需要在此处增加或删除需要转义的字符。
在这一题目里也不能使用,因为base64里的等号会被变成url编码

第22关