[ROP] gadget찾는법

두비니

·

2019. 10. 11. 02:09

 

 

 

 

 

ROP(Return Oriented Programming)에서 가장 핵심적인 부분을 고르라고 하면 gadget을 구하는 것일 것이다.

 

이에는 몇가지 방법이 있다.

 

 

 

1. ROPgadget 이용하기

 

명령어는 다음과 같이 쓰면 됩니당.

 

ROPgadget --binary (파일명) | grep '(찾을 가젯)'

 

 

짠. 다음과 같이 사용하면 된다. 위의 경우는 64비트의 경우고 32비트도 그냥 똑같다.

(참고로 64비트에서 인자 받는 순서는 rdi, rsi, rdx 순서라고 한다 외우장)

근데 저기 세 번째의 경우를 보면 아무런 결과가 없다. 그럼 경우는 두가지이다.

 

 

1. 진짜로 pop rdx가 없다.

2. ROPgadget 으로는 조회가 되지 않는다.

근데 이경우는 프로그램에 pop rdx가 없을리가 없기때문에 libc를 직접 찾아주어야 한다.

(방법은 밑에 쓰여있음)

 

 

 

2. ropsearch 명령어 이용하기(gdb-peda plugin)

 

일단 파일을 실행시켜준 뒤 쓸 수 있는 명령어다.

 

r 명령어로 실행시킨 다음 ctrl+c 로 중단시키거나 breakpoint를 통해 중단시켜주자.

 

 

원래 이렇게하면 된다는데 왜 나는 안될까...?

해결하고 수정하겠슴다...ㅠ

 

 

 

 

 

3. rp 사용 (ubuntu 추가 plugin)

 

일단 rp는 추가적으로 다운받아야하는 겁니당.

다운받는거는 다음 링크 참조

다운받을때는 sudo apt git clone (좌표)

 

https://github.com/0vercl0k/rp/downloads

 

0vercl0k/rp

rp++ is a full-cpp written tool that aims to find ROP sequences in PE/Elf/Mach-O x86/x64 binaries. It is open-source and has been tested on several OS: Debian / Windows 8.1 / Mac OSX Lion (10.7.3)....

github.com

 

 

그러고 나서 다음과 같이 이용해주면 됩니다.

 

혹시 저렇게 명령어를 넣었는데 풀리지 않는다면 그건 저같은 경우에는 bin에 연동을 시켜놔서 그렇습니당

저게 안된다면 저 명령어 제일 앞에 ./를 붙여서 실행시켜보세용

 

 

 

4. objdump 이용 (GNU 바이너리 기본 유틸)

 

objdump는 실행 파일의 바이너리 정보를 보여주는 명령어입니다. objdump라는 명령어 자체는 

오피셜 설명은 아래에!

objdump는 GNU 바이너리 유틸리티의 일부로서, 라이브러리, 컴파일된 오브젝트 모듈, 공유 오브젝트 파일, 독립 실행파일등의 바이너리 파일들의 정보를 보여주는 프로그램이다. objdump는 ELF 파일을 어셈블리어로 보여주는 역어셈블러
로 사용될 수 있다.

-Wikipedia-

 

기본적인 틀은 다음과 같습니다.

 

objdump -d "파일명" | grep -B(숫자) "가젯명"

 

 

-d 는 파일을 디스어셈블 작업할 때 사용하는 명령어고, 

grep 뒤에 붙어있는 -B(숫자)"패턴이 매치된 각 라인기준으로 (숫자)만큼의 줄을 출력"의 기능을 가지고 있습니다.

 

대충 둘을 같이 쓰면

 

파일을 디스어셈블해서 그 안에 내가 찾아달라고 했던 가젯이 있으면 걔를 기준으로 (숫자)줄 만큼 출력해줘

 

 

그래서 위 예시 같은 경우에는 practice5라는 파일에서 ret가젯을 찾아서 걔를 기준으로 4줄 출력해줘!

가 됩니다. 나쁘지 않쥬?

 

 

참고로 덧붙이자면 objdump는 굉장히 기능이 많은 명령어입니다. 아래 글에 설명이 굉장히 잘되어있으니 참고하셔도 좋을듯 합니다.

 

m.blog.naver.com/PostView.nhn?blogId=s2kiess&logNo=220066239893&proxyReferer=https:%2F%2Fwww.google.com%2F

 

objdump 명령어

굳이 설명할 것도 없다. 오브젝트 파일을 덤프하는 툴이다.objdump는 무조건 하나 이상의 플래그 옵션을 주...

blog.naver.com

 

 

포너블 화이팅

불쌍한 내영혼 화이팅