bitflip
edit函数中存在off-by-one漏洞,版本glibc-2.27
add函数将malloc的size限制在了0x50内,不过可以通过off-by-one修改下一个chunk的size实现堆叠,进而释放0x410以上大小的堆,拿到libc
1 | #coding:utf-8 |
bornote
自己实现的输入函数存在off-by-null漏洞,版本glibc-2.31
先通过show函数泄漏heap和libc
之后通过off-by-null实现unlink,注意高版本的unlink会对pre_size进行检测
1 | #coding:utf-8 |
old_school
edit中很明显的off-by-one,版本glibc-2.27
不考虑unlink,直接伪造size实现堆叠
1 | #coding:utf-8 |
old_school_revenge
将old_school的off-by-one改成off-by-null,版本glibc-2.27
unlink,低版本,不需要考虑pre_size问题
1 | #coding:utf-8 |
pwnpwn
格式化字符串,给了system,也给了”/bin/sh”字符,也给了text地址,不过got表不可写
那就写main函数的返回地址,为p64(pop_rdi) + p64(binsh) + p64(system)
1 | #coding:utf-8 |
sonic
平平无奇栈溢出,没什么需要注意的
1 | #coding:utf-8 |
oldecho
格式化字符串,给了栈地址,但是关闭了输出[close(1)],且输入在bss段
虽然关闭了1,但是只要把stdout的fileno改为2即可重新输出。
观察栈内容没有发现stdout附近地址残留,但是在当前栈空间的上方存在stdout,但是上方的栈空间没法写
所以先抬栈:
1、先返回一次main
2、再将返回地址修改成ret,滑到start函数
再次回到格式化字符串位置时可以看到当前栈空间有stdout了
利用栈上的栈指针修改fileno为2,泄漏libc,构造orw读取flag
存在一定的爆破,概率大概是几十分之一,不是很低
- 题目环境为ubuntu16.04,(只能用桌面版,用docker 不行)
1 | #coding:utf-8 |