第一次校赛Web题目复现
Web(写的比较详细)
unserialize
出题人: Yalois
难度: 普通
题目描述:寻找调用关系。
PHP 魔术方法
魔术方法的触发条件
前置知识
什么是 PHP 反序列化?
PHP 反序列化是将通过 serialize()
转换成字符串的对象重新还原为对象的过程。
在反序列化过程中,可能会调用某些特殊的魔术方法(如 __wakeup()
),这些方法可以执行特定逻辑。如果攻击者构造了一个包含恶意代码的序列化字符串,就可能利用这些魔术方法触发意外逻辑,甚至执行敏感操作。
简单来说,PHP 反序列化漏洞是由于程序信任了用户传入的序列化数据,导致攻击者可以通过精心构造的数据控制程序的执行流程,从而执行恶意代码或获取敏感信息。
这道题目用到的几个魔术方法
__wakeup()
- 触发时机:
- 当对象通过
unserialize()
反序列化时自动调用
- 当对象通过
__toString()
- 触发时机:
- 当对象被当作字符串使用时触发,比如在
echo
或字符串连接中。
- 当对象被当作字符串使用时触发,比如在
__invoke()
- 触发时机:
- 当对象被当作函数直接调用时触发。
分析代码逻辑
class A
属性:
$x
: 用于控制__wakeup()
的分支逻辑。$s
: 存储另一个对象(类B
的实例)。
方法:
__wakeup()
:- 当对象被反序列化时触发。
- 若
$x
值为"hello"
,则打印提示并访问$s
属性。 - 若
$x
不为"hello"
,直接结束程序。
class B
属性:
$qwq
: 存储另一个对象(类candy
的实例)。
方法:
__toString()
:- 当
B
类的对象被作为字符串使用时触发。 - 调用
$qwq
(存储的candy
对象)作为函数执行(触发__invoke()
)。
- 当
class candy
属性:
$v
: 用于存储文件路径。
方法:
__invoke()
:- 当对象被函数调用时触发。
- 尝试读取
$v
指定的文件内容并检查其值是否为"love"
。 - 若条件满足,调用
getFlag()
。
getFlag()
:- 输出环境变量中的
GZCTF_FLAG
。
- 输出环境变量中的
exp:
1 | <?php |

Flag:
1 | QLNU{8e364303-528a-4b49-b8ab-a15a900c529d} |
拯救大福学长
出题人: Yalois
难度: 普通
题目描述:大福被我上传在了这个系统里并压缩了,请黑进去这个系统,拯救大福
md5 和 sha1 是不是差不多
这个和练习题平台的 md5 差不多
绕过 md5 之后 rce
前置知识
- 什么是 0e 绕过?
PHP 中的弱类型比较(==
)会将某些看似数字的字符串转换为数字进行比较。例如:
"0e12345"
会被解析为科学计数法中的数字0
。- 因此,
"0e12345" == "0e67890"
相当于"0" == "0"
在 PHP 中会视为相等。
SHA1 通常会生成 40 位的十六进制字符串,但某些特殊的字符串(如 aaroZmOk
)会导致 SHA1 输出以 0e
开头的字符串(如 0e665253196792481973726967923058
),只要找到两个不同的字符串,但是生成的 SHA1 都是以 0e
开头,就可以利用弱类型比较绕过逻辑验证进行利用。
- 什么是命令执行漏洞?
命令执行漏洞(RCE)是指程序将用户输入作为系统命令执行的情况。如果程序没有对用户输入进行充分过滤,攻击者可以通过精心构造的输入执行任意系统命令,从而获取敏感信息或完全控制服务器。(需要学习一点常用的 linux 命令,比如:ls、cat 等) - 这道题的逻辑漏洞分析
1 | if ($a != $b && sha1($a) == sha1($b)) { |
$a != $
b
:要求两个字符串不同。sha1($a) == sha1($b)
:要求 a 和 b 的值经过 sha1 加密之后的值弱相等,利用弱类型比较和 SHA1 的0e
绕过,找到合适的$a
和$b
,如:$a = "aaroZmOk"
$b = "aaK1STfY"
通过构造这两个输入可以绕过验证条件,进而利用 POST 参数中的 cmd
执行系统命令,实现远程命令执行
简单来说,这道题考察了两点:
- 利用 0e 绕过 满足条件,完成逻辑验证。关于 0e 绕过 可以看一下这篇文章:https://blog.csdn.net/cosmoslin/article/details/120973888
- 利用 命令执行漏洞,实现对服务器的操作。
解题步骤:
查看根目录文件,找到 flag 文件的文件名为 flllag
。
1 | curl "http://101.35.218.130:33155/?a=aaroZmOk&b=aaK1STfY" -d "cmd=ls /" |
查看 flllag
文件。
1 | curl "http://101.35.218.130:33155/?a=aaroZmOk&b=aaK1STfY" -d "cmd=cat /flllag" |
获得压缩包密码。
1 | jiujiudafuxuezhang |
寻找大福学长。
1 | curl "http://101.35.218.130:33155/?a=aaroZmOk&b=aaK1STfY" -d "cmd=ls /var/www/html" |
在网站目录下找到大福学长
1 | 大福.zip |
下载大福学长。
1 | wget "http://101.35.218.130:33155/大福.zip" |
使用之前获得的压缩包密码解压大福学长,即可获得 flag。

Flag:
1 | QLNU{6b309e5d-c1c8-4aba-a4c7-0402fdb10dd5} |
模板注入
出题人: Yalois
难度: 普通
题目描述:没听说吧,现学,搜索引擎拿来用。
Python SSTI
前置知识
- 什么是 SSTI (服务器端模板注入)?
SSTI 是一种 Web 漏洞,攻击者通过在模板引擎中注入恶意代码,迫使服务器执行其注入的代码。很多 Web 应用程序使用模板引擎(如 Jinja2、Mako、Thymeleaf)来渲染 HTML 内容。如果这些模板引擎没有进行适当的输入过滤,攻击者可以利用模板引擎的功能来执行任意代码。 - 什么是 fenjing?
fenjing 是一个用来处理模板注入漏洞的 Python 工具,它能帮助攻击者构造有效的 payload 来执行命令或者提取信息。它通过封装了注入代码的函数,帮助构造出可以绕过模板引擎防护的 payload,通常用于快速测试和分析模板注入漏洞。fenjin 提供了一个非常方便的方式来构造执行命令的 payload,在针对模板引擎的攻击中,利用传入的输入来控制模板的行为。
解题步骤
- 分析代码逻辑:
页面包含一个表单,用户提交的内容会被传递到后台,后台会显示用户输入的内容。
BlackList:['flag']
说明某些关键字(例如 flag
)被列入了黑名单,不允许显示或传递。
- 使用 fenjing 工具来编写 exp(需要配置 python 环境和安装 fenjing)。
导入 fenjing 库:
1 | from fenjing import exec_cmd_payload |
模拟 waf 函数:
1 | def waf(s: str): |
使用 fenjing 的 exec_cmd_payload
函数生成 Payload:
1 | shell_payload, will_print = exec_cmd_payload(waf, 'cat /flllag') |
打印生成的 Payload:
1 | print(f"{shell_payload}") |
exp:
下方是完整的 exp,运行出来的结果就是 payload。
1 | from fenjing import exec_cmd_payload |
在文字框输入 payload 后提交即可获得 flag。

Flag:
1 | QLNU{255eca38-8ab5-4ab8-9810-a77be9e7e3c0} |
游戏大师
出题人: Yalois
难度: 简简单单
题目描述:拿到 10000 分给 flag 哈!
F12->”源代码”找入口 js 文件
入口一般叫什么名字
找关键词
F12 的控制台是不是能够改变量的值
解题步骤:
审一下代码,发现 getFlag 函数。
1 | if (score >= 10000) { |
当游戏结束时,score 大于 10000,即可获得 flag。
开始游戏后在控制台输入 score = 10000;

游戏结束之后即可获得 flag。

Flag:
1 | QLNU{65945992-a2d4-4c28-8dea-f880302500ac} |
Misc(写的很省略)
薇尔莉特的秘密
出题人: DkingL
难度: 简单
题目描述:得到的 flag 用 QLNU{}包裹
当薇尔莉特走在路上时,突然遭到一条蟒蛇的袭击。她感觉自己的眼睛好像被某种遮挡物阻隔,无法看清周围的世界。然而,其他人却没有注意到她眼睛有任何异常。请你帮助薇尔莉特解开这个身上的秘密,重新还原她眼前的世界。
解题步骤:
根据“蟒蛇”、“眼睛遮住”等提示信息,推测为盲水印加密,同时题目只给出一张图片,推测为单图盲水印。
使用工具解密附件中的图片。

解出后的水印即为 flag。

Flag:
1 | QLNU{z1_Luo_lAn_7ong_h3n9_garden} |
宇宙深处的声音
出题人: DkingL
难度: ez
题目描述:公元 80065 年,地球派出银河号宇宙飞船在银河系中探寻可能存在生命的星球。船员们充满期待地前行,迎接着未知的挑战。
然而,漫长的宇宙探索过程中,飞船一直没有发现任何迹象。船员们由最初的聚精会神逐渐变得无精打采,有的甚至开始怀疑自己的使命。就在船员们陷入低谷的时候,突然!探测器发出了一阵特别响亮的警报,整个飞船都沸腾起来。
船员们迅速各司其职,全神贯注地尝试破解来自宇宙深处银河系的声音。他们调整频率、分析波形、寻找规律,但始终无法理解这个神秘的声音在传递着什么信息。警报持续响个不停,气氛变得紧张起来。
在无数次尝试无果后,船员们感到十分沮丧。他们开始在舱内各处寻找灵感,思绪纷乱中,突然灵光一现!一位机智的船员想到了将声音拆分成不同频段进行分析,终于找到了破解的线索。
船员们齐心协力,一步步还原这段来自银河系深处的声音。逐渐,他们听清了那个声音传递的信息,是一种古老的宇宙语言,在呼唤着他们。船员们意识到,这是一个来自遥远星球的求救信号。
于是,船员们紧急向地球发来了求助信函,希望地球能够协助他们理解这个神秘的信号并找到它的来源。而在这个漫长的宇宙探索中,新的冒险即将开始,未知的星球、神秘的声音,一切都充满了无限的想象和期待。愿这段壮丽的银河探险之旅充满乐趣与奇迹!得到的 flag 用 QLNU{}包裹
🔑:^Qlnu[a-b]{2}#[0-9]{5}$
提示:来自银河系深处的古老语言
第一个提示好像是正则表达式哎
解题步骤:
题目中给出提示“^Qlnu[a-b]{2}#[0-9]{5}$”,为附件压缩包密码的正则表达式。
按照此正则,对压缩包进行掩码攻击,即可获得压缩包密码“Qlnuab#23356”。

打开压缩包中的文件,推测是某种加密,通过 Google 搜索密文内容,即可找到解密网站。

通过解密网站在线解密,即可获得 flag。

Flag:
1 | QLNU{Death_is_not_the_end_of_life_forgetting_is_the_end_of_life} |
来听首歌放松一下
这首歌真好听,就是咋有点奇怪,哪里奇怪捏······
频谱里面有什么东西啊到底
解题步骤:
用 Adobe Audition 打开音频文件,即可直接获得 flag。

Flag:
1 | QLNU{@U_yyds} |