본문 바로가기

System Hacking

[드림핵] rop (return oriented programming) 풀이 - 티스토리

 

리턴 가젯과 Got overwrite을 이용해 푸는 문제이다

 

 

 

 

코드를 보면 buf에서 BOF가 발생한다.

 

 

 

코드 내 특정 함수에 got값에 system함수 주소를 overwrite하는 방법으로 풀이를 정리해보겠다

 

 

 

원래 puts함수에 got값을 overwrite하려 했으나 우분투 새 버전 부터 뭐가 바껴서 puts으로는 안 된다는 댓글을 봄..

 

 

 

write함수 이용

 

** 필요한 것들

1. 카나리 -> 생략

 

2. system 주소 -> libc주소와 libc내 system의 offset을 이용

 

3. libc 주소  -> 코드 내 함수들의 got, plt 값을 이용

 

4. 필요한 가젯들

 

 

 

 

*시나리오*

 

- 카나리 릭 -> buf에 특정값 대입

 

- libc주소 -> read의 got값을 인자로 write 함수의 plt 값을 이용해서 호출한 후 libc내 read의 주소를 출력하여 변수에 저장

                -> 저장된 변수와 offset 차이를 이용

 

- system주소 -> libc주소와 system의 offset 이용

 

- 필요한 가젯들 : write, read함수 호출 하므로 pop_rdi, pop_rsi, pop_rdx 필요

 

 

카니리 릭

 

 

 

 

write함수 이용, read주소 릭

 

 

read의 got에 system함수 overwrite

 

 

read 재호출로 system함수 실행

 

 

 

 

전체 exploit

 

 

 

감격스럽다..