week1
babysc
- 思路 :
- shellcode 对应(index + 1)异或处理后再执行
- exp
aaaaaaaaaa
- 思路:
- 按照逻辑 输入 超过99 个a 即可执行 system("/bin/sh")
薯片拯救世界1
-
思路 :
- 这道题目是一个比较flag 和 输入是否相同的判断逻辑
- 漏洞点在 对比的长度上 , 对比的长度由输入的长度决定,所以可以单个字符进行逐个爆破,爆破难度为 256 * 0x18
- 爆破最后一个字符时有个bug,最后一个字符手动猜测下 是 '}'
Steins;Gate
- 思路:
- 在 id 中输入 /bin/sh , 方便最后跳转
- 在 0x400958 位置的函数中 布置栈 满足 0x400A00 的条件
- 在 0x400A00 函数中 leak canary
- 在 0x4008F6 函数中 栈溢出跳转到后门函数执行 system("/bin/sh")
- exp
week2
CSTW2
- 思路 :
- 数组指针负数溢出,可修改 got表 , 跳转至后门函数
- exp
SteinsGate2
思路 :
在 上周 Steins_Gate 的基础上多开了一个 pie 保护,
第一轮 leak 随机数和 canary 之后 rop返回main函数,
第二轮 leak 出 codebase , 然后利用后门函数和 id getshell
handsomeariis
- 思路 :
- 普通栈溢出 , 未给 libc , 需要使用 LibcSearcher 查找对应版本的 libc
- exp
babyfmtt
- 漏洞点:
- offbyone | 可以触发__stack_chk_fail
- 格式化字符串 | 任意地址读写
- 思路:
- 利用 格式化字符串 修改 __stack_chk_fail@got 为 后门函数
- 利用 offbyone 触发 __stack_chk_fail
- exp
week 3
nameBook
- 漏洞点在于 edit 的堆溢出
- 过程:
- 1.unlink 获取读写权限
- 2.修改 __free_hook 绕过 Full Relro 执行 system("/bin/sh")
- exp
薯片拯救世界3
- 漏洞点
- uaf
- 利用过程
- double free 修改 puts@got 为 后门函数地址 get shell
- exp
babytcache
- 漏洞点: uaf
- 利用过程:
- 两次 double free
- 第一次是 tcache double free , 特点是没有检查
- 第二次 因为 tcache 被破坏的next占用,直接进入 fastbin , 进行普通的 double free , 修改got 表 getshell
- 两次 double free
- exp
Steins;Gate3
这道题目是在 SteinsGate2 的 基础上限制了 栈溢出的输入长度,在 rbp之后只能修改4个字节, 我自己想的思路是 4个字节修改到 leave_ret ,做一个栈迁移 到前方拓展可用的栈长度即可
week4
3x18
- 这道题目 魔改自 pwnable 3x17
- 参考
- 功能流程:
- 一次任意地址写
- 利用过程:
- 修改 fini_array 再次进入 main ,触发一次任意地址写
- 因为 rbp 在 fini_array 附近 所以会触发 stack_canary , 劫持 _stack_chk_fail 中的一个 plt 函数,来进行无限次任意地址写
- 在 fini_array 中布置 getshell 的 rop链 , linux 64 的 系统调用参数 分别存储在 rax , rdi , rsi , rdx | 目标 execve("/bin/sh\x00" , null , null)
- 将 plt 修改到 fini_array + 8 ,通过栈迁移 执行 rop 链
- exp
blind
- 漏洞点 :
- 堆溢出
- 利用过程 :
- unlink 造成一个 任意地址写
- 修改 .dynamic 段中 .dynstr 的偏移 , 从而指定解析任意的libc函数
- exp