이번에 풀어볼 문제는 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

'Security > Pwnable' 카테고리의 다른 글
| [Pwnable] dreamhack Basic_BOF #2 문제 풀이 (0) | 2022.04.21 |
|---|---|
| [Pwnable] dreamhack basic_exploitation_000 문제 풀이 (0) | 2022.04.21 |
| [Pwnable] HackCTF Gift 문제 풀이 (0) | 2021.01.20 |
| [Pwnable] HackCTF Poet 문제 풀이 (0) | 2021.01.20 |
| Dreamhack-Memory Corruption - C(1) (0) | 2021.01.20 |