Home

pwnable.tw writeup - tcache tear

checksec $ checksec tcache_tear [*] '/home/z1933/workplace/vbshare/ctf/tcache_tear' Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x3fe000) FORTIFY: Enabled Full RELRO 表示 GOT 表会在程序加载时就填好库函数地址,然后把 GOT 表设置为只读,程序运行时就不能改 GOT 表了。 程序流程还是不难分析的。 double free Gl...

Read more

pwnable.tw writeup - re-alloc

这道题太好了。 程序比较简单,程序流程分析起来比较容易,这里就不赘述了。 有关 malloc,realloc,free,calloc 函数的流程&源码分析可以参考 linux-heap-study。 漏洞函数 释放chunk是通过 rfree 函数调用 realloc(ptr,0) 的形式来进行的。 rfree 之后会把对应的 heap 指针设置为NULL。 分配chunk通过 allocate() 函数调用 realloc(0,size) 的形式来进行的。realloc 会调用malloc进行分配内存。 调整chunk的大小通过 reallocate 函数调用 realloc(ptr,newsize) 的形式来进行的。 rfree 函数,alloc 函数没有找...

Read more

pwnable.tw writeup - applestore

主要参考了这篇文章: pwnable.tw - applestore 。 main 函数设置了信号,到时之后程序自动退出,可以把 call _alarm patch 掉。 关键函数 程序没有去符号,分析起来还是比较容易的。 handler 函数: unsigned int handler() { char nptr[22]; // [esp+16h] [ebp-22h] BYREF unsigned int v2; // [esp+2Ch] [ebp-Ch] v2 = __readgsdword(0x14u); while ( 1 ) { printf("> "); fflush(stdout); my_read(np...

Read more

pwnable.tw writeup - Silver Bullet

关键函数分析 程序没有金丝雀,smash the stack! main 函数 int __cdecl main(int argc, const char **argv, const char **envp) { int choice; // eax wolf Werewolf; // [esp+0h] [ebp-3Ch] BYREF bullet bullet; // [esp+8h] [ebp-34h] BYREF init_proc(); memset(&bullet, 0, sizeof(bullet)); Werewolf.hp = 2147483647; Werewolf.name = "Gin"; while ( 1 ) ...

Read more

pwnable.tw writeup - hacknote

关于 malloc 的首次适配可以参考 how2heap - first_fit: 程序分析 main 函数 void __cdecl __noreturn main() { int choice; // eax char buf[4]; // [esp+8h] [ebp-10h] BYREF unsigned int v2; // [esp+Ch] [ebp-Ch] v2 = __readgsdword(0x14u); setvbuf(stdout, 0, 2, 0); setvbuf(stdin, 0, 2, 0); while ( 1 ) { while ( 1 ) { Printmenu(); re...

Read more

pwnable.tw WriteUp - dubblesort

dubblesort 可惜,它给的那个 libc 库用不了,这里先用本地的 libc库 分析。 $ export LD_LIBRARY_PATH="$(pwd)/libc_32.so.6" ERROR: ld.so: object '/home/z1933/workplace/vbshare/ctf/libc_32.so.6' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored. 程序分析 用 IDA 对程序逆向分析。 main 函数反编译大概长这样。 int __cdecl main(int argc, const char **argv, const char **en...

Read more

pwnable.tw writeup - 3x17

3x17 题目链接 z1933@1933:~/workplace/vbshare/ctf $ file 3x17 3x17: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=a9f43736cc372b3d1682efa57f19a4d5c70e41d3, stripped z1933@1933:~/workplace/vbshare/ctf $ checksec 3x17 [*] '/home/z1933/workplace/vbshare/ctf/3x17' Arch: amd64-6...

Read more

pwnable.tw writeup - calc

calc题目链接 calc 比较好的题。 对程序逆向工程可以看出是一个计算器。 下面是几个关键函数的反编译代码: main 函数 int __cdecl main(int argc, const char **argv, const char **envp) { ssignal(14, timeout); alarm(60); puts("=== Welcome to SECPROG calculator ==="); fflush(stdout); calc(); return puts("Merry Christmas!"); } 主要工作就是调用 calc 函数。 alarm 函数是设置时间发送信号。 calc 函数: unsigned...

Read more