[BJDCTF 2020]YDSneedGirlfriend
经典的增删改查
add 函数中就很有看头了,先申请了一个固定 0x10 大小的 chunk,又在 chunk 的 data 段写入的 puts 函数地址,又在 chunk->data 段+0x8 后面写入了一个新 chunk,并且往新 chunk 的 data 段写入 her name
free 函数中未置 0 存在 uaf
show 函数中使用 chunk->data 作为函数调用输出chunk->data(我调用我自己输出我自己了属于是
程序有完整的后面函数
此时我们想法是在 show 中实现调用后面函数
此时我们如果申请两个 0x20(实际申请 0x30 大小的 chunk ,并且 free 掉后
在 fastbin 中 0x20:chunk1->chunk0、0x30:chunk1->chunk0
0x20 是 add 函数中在每一次调用时都会申请的一个 0x10 大小的 chunk
此时我们可以利用这一点 在 add 函数中申请一个 0x10 大小的 chunk,会把 fastbin 链表中两个 0x20 的 chunk 申请出去
此时 0x1677050 为 add 函数中固定申请的 chunk
0x1677000 为我们申请的 0x10size 大小的 chunk,但是0x1677000 原本是 chunk0 中固定申请的 chunk,此时我们在 add 时填入后门函数的地址,原本的 chunk1 就变为了
0x400b9c 是后门函数的地址,他现在在的位置是 chunk0 ->data 段,正好符合了 show 去执行的地方
调用 show(0)就是调用后门函数了
1 | from pwn import * #引用pwntools库 |
评论