标签:
ZCTF的pwn赛题分析,
这道题与SCTF的pwn100玩法是一样的,区别在于这个要过前面的几个限制条件。不能触发exit(0)。否则就不能实现溢出了。
依然是触发canary来leak出内存中的flag。
这次ZCTF的题是以一个系列出的,以下三个题都是同一个程序。
首先看了一下程序的大概流程,这个是记事本程序。
1.New note\n
2.Show notes list\n
3.Edit note\n
4.Delete note\n
5.Quit\noption--->>
有这么5个选项。
程序也是通过5个单独的函数来实现的,
分别对应了这几个选项。
程序不是简单的通过一个空间去储存数据的,而是把数据块组成了一个链表。
通过sub_400989也就是New note功能我们可以看到每个块的结构。
通过这张图我们可以看到
这个块的结构应该是
struct data
{
byte junk[16];//前16byte用途未知
byte title[64];//偏移16~80byte处存储title的字符串
byte type[32];//偏移80~112byte处储存type的字符串
byte content[256];//偏移112~368byte处储存正文的字符串
}
正好就是分配的堆的0x170=368个字节,充分利用了。
用途未知的那部分应该是用来维护链表的。但是我没怎么看懂它是怎么搞的链表
标签:
原文地址:http://www.cnblogs.com/Ox9A82/p/5492698.html