본문 바로가기

Security/Pwnable

[Pwnable] HackCTF ROP 문제 풀이

 

이번에 풀어볼 문제는 https://ctf.j0n9hyun.xyz/ 에 Pwnable 문제인 ROP문제이다.

 

 

문제에서 준 파일을 열어보면 rop와 함께 libc.so.6이 함께 들어있는걸 확인할 수 있는데 이 라이브러리 소스를 이용해 상대주소인 offset 이용해 함수의 위치를 구하라는 의미인거 같고 문제의 제목인 ROP를 생각하며 풀어야 겠다.

 

접속하면 입력을 받고 Hello, World!를 출력하고 종료되는 모습을 확인할 수 있다.

 

보호기법은 NX-bit가 적용되고 있고(쉘코드 사용x) 부분적으로 RELRO가 적용되고 있다.

추가적으로 libc.so.6의 보호 기법을 확인해 보면 위와 같다.

 

main

ida를 이용해 main을 살펴보면 위와 같다.

vulnerable_function

vulnerable_function함수를 살펴보면 정말 ROP문제 답게 깔끔하게도 read를 이용해 bof를 발생시키고 있다.

 

취약점을 발견했으면 ROPgadget을 이용해 pop pop pop의 위치를 구한 후 binsh(/bin/sh)를 넣을 주소값을 확인한다(write는 인자가 3개라서 가젯도 pop pop pop ret을 찾아야 한다)

gadget

pop pop pop ret인 주소는 0x08048509인 것을 확인 할 수 있다(pppr = 0x08048509)

 

그 다음 binsh(\bin\sh)을 저장할 bss의 주소를 찾는다.

bss주소

bss의 address는 0x0804a024인 것을 알 수 있고 이를 바탕으로 페이로드를 작성한다.

payload