일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- OpenAI 개발
- Recoverit
- VSCode C++ 표준 버전 수정
- Python.h: No such file or directory
- Seccomp bypass
- GDB
- 임베디드 시스템 해킹
- z3 signed 이슈
- vmware 반응 속도
- Windows 부팅 오류
- tool
- DYNAMIC Section
- python3.11 pip
- GEF
- pip 에러 해결
- python
- 리커버릿
- pwn
- 지훈현서
- 실시간로깅
- std::cerr
- Python3
- c++
- python3.11 설치
- 공유 라이브러리는 왜 항상 같은 순서로 맵핑 될까?
- docker
- vhdx 파일 복구
- 개발
- wsl2 복구
- pwntools
- Today
- Total
OZ1NG의 뽀나블(Pwnable)
[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/
'Tips' 카테고리의 다른 글
[비공개] gdb에서 파이썬 스크립트 입력하는 방법 (0) | 2019.11.22 |
---|---|
[CTF][Python][C언어] 문제 만들때 입력시간 제한 거는 법 (0) | 2019.07.28 |
[Tools] libc-database (0) | 2019.07.28 |
[Tips] 어셈블리어 코딩, div 명령어 오류 (0) | 2019.05.16 |
[PWN] libc버전을 모르는 경우 libc버전 찾는 법 (0) | 2019.01.09 |