I. FSOP

FSOP 是 File Stream Oriented Programming 的缩写。

FSOP 的核心思想就是劫持 _IO_list_all 的值来伪造链表和其中的 _IO_FILE 项,但是单纯的伪造只是构造了数据还需要某种方法进行触发。FSOP 选择的触发方法是调用_IO_flush_all_lockp,这个函数会刷新_IO_list_all 链表中所有项的文件流,相当于对每个 FILE 调用 fflush,也对应着会调用_IO_FILE_plus.vtable 中的_IO_overflow

Backto2016

但你必须先向我们证明自己有回到 2016 的实力!

祝你玩的开心 o ( ̄▽ ̄) ブ

没有附件是正常的喵

这个分数或许也考虑了买 hint 这件事,别害怕嘻嘻

这道题是没有给出附件的,我们需要根据输入和程序的输出获取一切信息。

前言

由于友链页面有使用图片的要求,同时为其他人的站点提供相关的图片资源(虽然使用现成的 GitHub Page 就可以基本实现,但是 Page 所在的仓库是公开的),尝试通过 GitHub 作为图床解决这个问题。然而,访问速度和稳定性都无法得到保证,为此通过网上搜索学习了一下反向代理 (Reverse Proxy) 的相关知识。

Signin2Heap

Vulnerabilities

存在 off-by-null 漏洞,当 prev_size 域复用时,可置零相邻 chunk 的 prev_inuse 位。

前言

本次 DASCTF 12 月赛尝试了 pwn 方向的两道题目,最终还是如愿以偿的爆零了。首先看到题目我就有种陌生的感觉,给定程序是去掉调试符号的,并且有多个函数,大大降低了可读性,和我先前遇见的题目有不小的区别。

一叶舟轻,双桨鸿惊。水天清、影湛波平。鱼翻藻鉴,鹭点烟汀。过沙溪急,霜溪冷,月溪明。

重重似画,曲曲如屏。算当年,虚老严陵。君臣一梦,今古空名。但远山长,云山乱,晓山青。

——《行香子・过七里濑》

shellcode

shellcode 是一段用于利用软件漏洞而执行的代码,shellcode 为 16 进制之机械码,以其经常让攻击者获得 shell 而得名。shellcode 常常使用机器语言编写。

堆的内部结构

在程序的执行过程中,我们称由 malloc 申请的内存为 chunk 。这块内存在 ptmalloc 内部用 malloc_chunk 结构体来表示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
This struct declaration is misleading (but accurate and necessary).
It declares a "view" into memory allowing access to necessary
fields at known offsets from a given base. See explanation below.
*/
struct malloc_chunk {

INTERNAL_SIZE_T prev_size; /* Size of previous chunk (if free). */
INTERNAL_SIZE_T size; /* Size in bytes, including overhead. */

struct malloc_chunk* fd; /* double links -- used only if free. */
struct malloc_chunk* bk;

/* Only used for large blocks: pointer to next larger size. */
struct malloc_chunk* fd_nextsize; /* double links -- used only if free. */
struct malloc_chunk* bk_nextsize;
};

关于堆的结构很重要的一点在于,其使用和 free 状态下的结构一致,只是相应功能有区别。例如使用时 fd 段用于存储数据,可以通过某些方法把不合法的数据写入一个 free chunk 的 fd 中。

0%