OZ1NG의 뽀나블(Pwnable)

[Tools] One_gadget 본문

Tips

[Tools] One_gadget

OZ1NG 2019. 7. 28. 22:28

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

 

Comments