system hacking/dreamhack(드림핵)

basic_exploitation_002

blackbearwow 2022. 4. 5. 18:13

format string bug를 이용한 exploit이다.

Arch:     i386-32-little
RELRO:    Partial RELRO
Stack:    No canary found
NX:       NX enabled
PIE:      No PIE (0x8048000)

no pie이어서 get_shell함수의 주소를 안다면, rip를 get_shell의 주소로 설정되게 하면 된다.

no canary found이고 read가 buf의 크기보다 크게 읽는다면, return address overwrite가 가능하다.

하지만 이 문제에서는 딱 buf의 크기만큼만 읽는다. 또한 buf보다 큰 값을 읽는다 하더라도 exit(0)때문에 return 주소로 가지 않고 프로그램이 종료된다.

RELRO(realocation read only)가 Partial Relro이므로 exit함수의 got에 get_shell함수의 주소로 덮을 수 있다. (got.plt에 쓰기 권한이 있다.)

하지만 로드맵에서 배운것처럼 한다면 실수할 수 있다.

fstring = b"%134514185c%5$n".ljust(4*4)
fstring += p32(exit_got)

이렇게 한다면 30초 시간체한이 있어서 화면에 빈칸을 보여주다가 인터럽트가 일어나서 실패한다.

앞에 한바이트 한바이트 먼저 write하고 나머지 두바이트 write하자.

%[parameter]$n은 이때까지 화면에 출력된 문자의 개수를 저장하기 때문에, 작은 숫자부터 저장해야 한다.

'system hacking > dreamhack(드림핵)' 카테고리의 다른 글

uaf_overwrite  (0) 2022.04.17
basic_exploitation_003  (0) 2022.04.06
out_of_bound  (0) 2022.04.02
oneshot  (0) 2022.04.01
hook  (0) 2022.04.01