前言
- 一步一步构建
dl-runtime-resolve,详细理解其解析过程 - 参考 http://pwn4.fun/2016/11/09/Return-to-dl-resolve/
- 参考 https://ctf-wiki.github.io/ctf-wiki/pwn/linux/stackoverflow/advanced-rop-zh/
elf文件链接 https://github.com/hitcxy/pwn-challenges/tree/master/study
漏洞利用方式
- 控制
eip为PLT[0]的地址,只需传递一个index_arg参数 - 控制
index_arg的大小,使reloc的位置落在可控地址内 - 伪造
reloc的内容,使sym落在可控地址内 - 伪造
sym的内容,使name落在可控地址内 - 伪造
name为任意库函数,如system
stage1
- 先把栈迁移到
bss上,并返回write@plt
1 | #coding=utf-8 |
stage2
- 控制
eip返回PLT[0],要带上write的index_offset
1 | #coding=utf-8 |
stage3
- 控制
index_offset,使其指向我们构造的fake_reloc
1 | #coding=utf-8 |
stage4
- 这次构造
fake_sym,使其指向我们控制的st_name
1 | #coding=utf-8 |
stage5
- 把
st_name指向输入的字符串"write"
1 | #coding=utf-8 |
stage6
- 替换
write为system,并修改system的参数
1 | #coding=utf-8 |
