double_free
场景
fastbin
(一般是)free
后没有将指针置空
流程
思路
利用double_free更改某个函数的got表为magic函数的地址。
注意点
-
fake_chunk
的size域要合适,只用考虑一个字中的低4个字节。无需考虑和8对齐,因为最后3个bits是AMP标志。和got表相近的地方,有一个
写全的话,是
0x0000000000601e28
。这里的\x60
刚好可以满足上述要求。- 可以看到这个地方的地址是
0x602000
,那么\x60
的地址是0x602000 - 0x8 + 0x3
也就是0x601ffb
,size域的整个字节的地址是0x6012002
。
那么fake_chunk
的地址就是0x601ffa
。
- 可以看到这个地方的地址是
-
由于改的是got表,所以要用六个字节对齐0x8。
-
magic的地址按理是随便选一个,但是
_dl_runtime_resolve_xsavec
并不在got表中。
我已开始把他也覆盖成magic的地址,然后就循环执行magic
。 覆盖成0就正常在执行puts
的时候执行了magic
。
getshell?
看起来是可以的,但可能就是麻烦一点。
- double_free到fake_chunk,用show打印某个got表项值,计算libc基址。
- double_free改got表
麻烦在怎么找一个合适的size,能既不覆盖需要打印的原有got表也能够通过free的检查……
exp
2.27仍旧没法跑= =
1 |
|