并没有参加这次bctf,只有事后看看题目,这道题目不算难,不过还是学到了一些以前不是很清楚的东西,所以记录一下。
题目描述
题目来源: BCTF 2018
知识点:fastbin_attack、IO_FILE
题目提供的功能非常简单,只有add和delete
1 |
int menu() |
保护情况:
1 |
[*] '/home/hgy/pwn/bctf2018/easiest/easiest' |
漏洞情况
1 |
int remove() |
在remove时,没有清空ptr指针,存在double free。
1 |
int sub_400946() |
还有一个后门函数。。
利用过程
因为没有输出功能,所以泄露libc十分困难,改malloc_hook
之类的估计是不行了。
所以把目标转移到GOT表,这里有两种方法,一种是通过改GOT表
的值,一种是改stdout指针
。
要点
劫持stdout指针
0x602082
的值可以充当size
改写stdout指针,使vtable
的地址在我们的预先分配好的chunk处,并预先在chunk中伪造好vtable,将__xsputn
对应偏移处写入后门函数的地址。
这样,当调用printf
时,最终会调用__xsputn
,而执行后门函数
IO_FILE
结构体中_lock
的值必须是可写的地址mode
的值需要为0
劫持GOT表
0x60204d
的值可以充当size,因为size只检查低4个字节。
然后用system
的地址往后覆写掉strtol
函数的got表就行了
EXP1
劫持stdout指针
1 |
from pwn import * |
EXP2
劫持GOT表
1 |
from pwn import * |
相关链接
二进制文件:easiest
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论