More Related Content
Similar to ret2dl resolve
Similar to ret2dl resolve (20)
ret2dl resolve
- 5. ライブラリ関数が呼び出されるフロー 1/2
2021/5/12
Rits Security Team
5
call func@plt
push *(0x8049ff8)
jmp *(0x8049ffc)
…
jmp *(0x804a00c)
push 0x18
jmp 0x8048300
• .got.pltを指す
• 初回は,次のアドレスを指す
• 名前解決された後は,func関数本体
のアドレスが入る
.pltの先頭を指す
.code
.plt
• reloc_offset(後述)
• _dl_runtime_resolve関数の第2引数
0x804a00c : 0x80483b0
.got.plt
push 0x18が
格納されてる
アドレス
- 6. ライブラリ関数が呼び出されるフロー 2/2
2021/5/12
Rits Security Team
6
call func@plt
push *(0x8049ff8)
jmp *(0x8049ffc)
…
jmp *(0x804a00c)
push 0x18
jmp 0x8048300
• _dl_runtime_resolve関数の第1引数
• 重要でない
• pltを使う全ての関数で共通
• _dl_runtime_resolve関数を指す
• _dl_runtime_resolveは名前解決を
行う関数である
.code
.plt
_dl_runtime_resolve(
0x18,
*(0x8049ff8)
)
libc
- 8. Elf32_Rel
typedef struct {
Elf32_Addr r_offset; // その関数のGOTアドレスが格納される
Elf32_Word r_info; // シンボルテーブルにおけるインデックス
} Elf32_Rel;
2021/5/12
Rits Security Team
8
.rel.plt (リロケーションテーブル)に配列が存在する
各関数ごとに対応するElf32_Relが存在する
- 9. Elf32_Sym
typedef struct {
Elf32_Word st_name; // .dynstrにおける関数名へのオフセット
Elf32_Addr st_value; // 重要でない
Elf32_Word st_size; // 重要でない
unsigned char st_info; // シンボルの種類を示す
unsigned char st_other; // 重要でない
Elf32_Section st_shndx; // 重要でない
} Elf32_Sym;
2021/5/12
Rits Security Team
9
.dynsym (シンボルテーブル)に配列が存在する
各関数ごとに対応するElf32_Symが存在する
.dynstr(ストリングステーブル)には,ここにエントリを持つ関数の関数名が格納されている