[Tools] One_gadget
One_gadget은 libc 안에 있는 매직 가젯의 offset을 찾아주는 툴이다.
매직 가젯은 libc안에 execve('/bin/sh', ?, ?) 부분이다.
Pwnable할 때 system함수로 쉘이 따지지 않을때, execve함수로 pop_rdi, rsi, rdx gadget 들을 하나하나 내가 찾아가면서 쉘을 따거나 house of force등을 통해 got_overwrite를 할 때 이걸 쓰면 손쉽게 쉘을 딸 수 있다.
(house of force를 통해 got_overwrite를 하면 다른 함수의 got가 chunk의 헤더나 다른 값으로 같이 덮여져서 제대로
함수 실행이 안될 때가 있다.)
걍 이거 하나면 진짜 겁.나 편하다.
[git]
https://github.com/david942j/one_gadget
이건 다운받을 필요가 없는 것 같다.
[설치]
gem install one_gadget
[삭제]
gem uninstall one_gadget
[사용법]
one_gadget [libc 파일]
[추가팁!]
one_gadget을 익스할때 python에서 바로 쓰고 싶으면 아래의 코드를 넣어주면 된다.
import subprocess
def one_gadget(filename):
return map(int, subprocess.check_output(['one_gadget', '--raw', filename]).split(' '))
one_shot = one_gadget('/lib/x86_64-linux-gnu/libc.so.6')
print one_shot #=> [324293, 324386, 1090444]
[주의!]
gem install one_gadget를 입력했을때 Ruby버전은 최소 2.3.0 이상이 필요하다고 떠서 2.3.0을 깔아보니까 실제 one_gadget 실행할때 오류떳다...
그래서 루비 2.3.0을 다시 삭제하고 최신 안정된 버전인 2.7.1을 설치하고 다시 one_gadget을 재설치 해보니까 잘 되었다. 개꿀!
(관련 글 : oz1ng019.tistory.com/42)
결론 : Ruby 최신버전으로 깔고 one_gadget을 설치하자!
최신버전 확인 할 수 있는 루비 공식사이트 : www.ruby-lang.org/ko/downloads/
루비 다운로드
자신이 선호하는 방식으로 최신 루비 배포판을 설치할 수 있습니다. 현재 안정 버전은 2.7.1입니다. 루비 라이센스를 읽어 보세요. 루비를 설치하는 방법 각 주요 플랫폼에서 루비를 설치할 수 있
www.ruby-lang.org