Week 5
收官之战,感谢陪伴。每一个坚持到本周的选手,都将创造属于自己的神话。再接再厉!
Pwn
C_or_CPP
本题的难点主要在于程序的逆向和分析,和以往不同的是,本题需要找到漏洞点,并思考如何利用。
如果没有思路,不妨对危险函数多加留意。
Simple_Shellcode
建议可以阅读下 vector
的源码喵 ~
No_Output
没有输出,可以看看侧信道。
EldenRing
可以先学习 strcmp
的绕过,和基础的堆知识。
推荐 hack1s.fun 的《从零开始的 Linux 堆利用》系列文章进行学习,本题建议的学习路线如下:
- 1 House of Force: 学习基础及调试命令
- 2/3 FastBin Dup: 学习 FastBin 的利用
- 8 Off-By-One: 学习 Off-By-One 的利用
另外,对于本题具体的漏洞,可能需要注意涉及 Base64 的部分。
Reverse
Pangbai 泰拉记(2)
一份 PDF:VM 逆向学习。
可以学习通过 Y 键修改类型,修正结构体。
可以先搞清题目写了哪些指令,再研究 opcode 是什么,最后通过 opcode 还原加密。
Pangbai 泰拉记(3)
iOS 逆向,比赛中极其罕见的题目,可以作为挑战题试试。
个人做所有逆向题思路:找判断,找密文,找密钥,找算法,写正向,写逆向。
可以通过字符串去查找关键函数,多使用 R 键去转化类型,不必花太长时间去研究 mach-o 的结构。
MY_ARM
QEMU 是一个托管的虚拟机,它使用动态二进制转换技术来模拟处理器,并且提供多种硬件和外设模型,这使它能够运行多种未修改的客户机操作系统,能与 KVM 配合以接近本地速度运行虚拟机(接近真实电脑的速度)。
QEMU 可以执行用户级的进程仿真,从而可以使为某一架构编译的程序在另一架构上运行(通过 VMM 的形式实现)。
QEMU 的远程调试方法可参见下面的文章:
ohn_flutter
使用 blutter 解析 app.so
,导入符号与头文件配合 IDA 分析,需要动调获取密钥。
Web
PangBai 过家家(5)
本题考查 XSS 基本原理以及简单的正则表达式绕过。
作为《PangBai 过家家》系列第一季的收官之作,本题相对简单。主要希望新生能够认识 XSS 这种攻击方式。
题目在渲染时对用户的输入经过了一层较为简单的过滤,试图过滤掉用户输入中的 HTML 标签。这类 XSS 往往要求选手想办法使页面能够构造出能够执行命令的 <script>
标签。题目往往会有一个 Bot,当你将页面地址发送给 Bot,Bot 将会以「受害者」的身份去访问这个地址,而 flag 一般在 Bot 的 Cookie 中(总之只有 Bot 能够获取 flag)。
XSS 的全称为「跨站脚本攻击」(Cross-Site Scripting),攻击者通过构造使得一个页面能够执行任意的脚本代码,然后将该页面地址通过社会工程学等方法使特定目标访问,从而在对方的设备上执行该代码,窃取 Cookie 等用户凭据或页面数据等。
臭皮的网站
本题比较侧重综合能力,这种题目的流程一般如下:
- 对网站进行全面的信息收集,寻找可能存在的线索;
- 通过利用 CVE 或者文件泄露等手段,获取到源码或关键文件进行分析,寻找可能的利用点。
本题涉及的单个考点并不难。
臭皮吹泡泡
上一周,你可能已经接触到了 PHP 反序列化的过程和原理,这一次让我们更进一步。
你需要学习如何构造 pop 链子——在这之前,你需要先了解各个魔术方法的触发条件,下面是一些举例:
魔术方法 | 描述 |
---|---|
invoke() | 当尝试以调用函数的方式调用对象的时候,就会调用该方法 |
__construst() | 具有构造函数的类在创建新对象的时候,回调此方法 |
destruct() | 反序列化的时候,或者对象销毁的时候调用 |
__wakeup() | 反序列化的时候调用 |
__toString() | 把类当成字符串的时候调用,一般在echo处生效 或者作为字符串处理的时候 |
set() | 在给不可访问(protected、private)或不存在的属性赋值的时候,会被调用 |
get() | 读取不可访问或者不存在的属性的时候,进行赋值 |
__call() | 在对象中调用一个不可访问的方法的时候,会被执行 |
你需要寻找出本题目中的链子起点和利用终点 构造对应的反序列化输出触发这些函数 构造出一条可能的 pop 链,完成最终操作。
本题内需要一些简单的 PHP 小 trick 来完成这次奇妙的吹泡泡之旅。
sqlshell
本题考查使用 MySQL 进行写文件的知识。
Crypto
学以致用
题目描述里提供的 PDF 就是 WP 捏,上世纪的小短文,相信大家能学以致用的。
整理一下题目信息,找到 PDF 中对应的解决方法,然后搜 SageMath 参考文档或者问问 GPT.
格格你好棒
本题考查有关格密码的代码编写和对格密码基础的理解。
可参阅文章:格密码基础。
Misc
pyjail
match case
是 Python 3.10 才有的语法,可以用来获取一个对象的属性。
class Dog:
def __init__(self, name):
self.name = name
def describe_pet(pet):
match pet:
case Dog(name=name1):
print(name1) # 这个位置会输出 Rover,原因是 pet 对象的属性 name 被传给了 name1
pet = Dog("Rover")
describe_pet(pet)
# str() 是一个空字符串对象,下面这部分等价于 `bfc = ''.join([chr(37), chr(99),])`,也就是 `bfc = %c`.
match str():
case str(join=join):
bfc = join(list((chr(37),chr(99),)))
后面拿到了 %c
,就可以使用 %
构造字符串。
PlzLoveMe
题目给了三个文件。
RAW 记录了音频采样数据(采样率已在题目提示),需要以适合的方式解析音频。
AXF 文件是带符号的固件,使用 Linux 的 file
命令可查看其相关信息。请用 IDA 分析。