本篇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