pwnable.tw exp
start
1 | from pwn import * |
calc
3×17
程序一开始会执行start函数,start函数内部的参数如下
1 | __libc_start_main(main,argc,argv&env,init,fini,rtld_fini) |
main函数启动过程
libc_csu_init -> main -> libc_csu_fini
更细致的过程如下
.init -> .init_array[0] -> .init_array[1] -> …… .init_array[n] -> main -> .fini_array[n] -> …… .fini_array[0]
1 | from pwn import * |
dubblesort
“+”号不会出现在栈里,通过输入名字的数量可以达到栈溢出的效果
1 | from pwn import * |
hacknote
1 | from pwn import * |
silver bullet
32位的栈的off-by-ones,顾名思义就是可以在栈中溢出多个字节,直到溢出到eip。需要泄露libc基址,然后栈迁移打
1 | from pwn import * |
applestore
1 | from pwn import * |
re-alloc
这题是利用realloc(ptr,0)来构成UAF,然后改got表
1 | from pwn import * |
tcache_tear
UAF
1 | from pwn import * |
seethefile
puts(ptr)用int接收,case5的情况有bss段溢出。伪造vtable虚表
1 | from pwn import * |
death note
难点是写shellcode,got表可改,在add时有bss越界。
1 | from pwn import * |
spirited_away
printf以0为结尾,puts以\n为结尾;read以