ret2win
split
- elf文件的 plt 表中有system函数,并且文件内有 "/bin/cat flag.txt",可以直接调用,
- 溢出后调用 system("/bin/cat flag.txt")即可
- 32位 传参 (栈传参): func_addr , ret_addr , argv_1_addr
- 64位 传参 (寄存器传参): 传参顺序 从左至右 依次是 rdi,rsi,rdx,rcx,r8,r9
- 32exp
- 64exp
callme
- 分析 elf 和 .so 得到 顺序执行 callme_one , callme_two , callme_three 即可得到flag
- 考点 : 多次执行函数的堆栈平衡(32位) 和 传参
- 32exp
- 64exp
pivot
分析:在溢出长度较短时 劫持栈指针,从而执行getshell
流程 : 控制 esp后 执行 foothold_function , 将 got表的地址绑定上(lazy binding),pop eax , mov eax,[eax] 得到 foothold_function 地址,pop ebx , add eax ,ebx ;配合 offset 计算得出目标函数 ret2win的地址,然后用call eax 到达 ret2win
信息:1 . payload 输入点 : pwnme 函数中的第一个输入点, 并且在此之前给出了输入点的地址
badchars
分析: 执行过程中对输入进行过滤,在没有找到绕过过滤直接执行输入的情况下, leak了函数的地址,进行libcsearch,直接使用libc中的/bin/sh ,执行system("/bin/sh");
流程 :第一次使用栈溢出 调用 puts 输出 fgets 函数got表地址,并返回 pwnme 函数,然后在脚本中接受返回的函数地址,并进行libcsearch和计算。第二次栈溢出执行system("/bin/sh")
fluff
- 分析 : 栈溢出 , 有输出函数puts 和 libc函数 system
- 流程 :
- 1 . 使用 puts leak出libc地址后 , 获取 '/bin/sh'地址 , 然后重新返回漏洞函数 ,执行 system("/bin/sh\x00") | 2 次利用栈溢出
- 使用 puts leak出 stdin的值 , 使用 fgets输入 /bin/sh , 然后 使用system("/bin/bin") . | 3 次 利用栈溢出