前言
- 一步一步构建
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 |