[Pwn-tools] One_gadget

코코·2023년 4월 12일
0

Pwn-tools & tip

목록 보기
2/8

오늘은 Pwnable에 One_gadget에 관한 내용을 작성하고자 한다.


One_gadget은 하나의 가젯으로 Shell을 딸 수 있는 가젯이다.


✔ Installation

One_gadget의 Github 주소는 아래에 적어두겠다.
👉 https://github.com/david942j/one_gadget


설치 방법은 엄청 간단하다!

apt install ruby
gem install one_gadget

미리 설치해서 사용하고 있었지만, 설치하는 cmder 모습을 캡처해봤다.

위와 같이 one_gadget 명령어를 입력했을 때 사용방법 및 옵션이 출력되면 성공한 것이다!


✔ One_gadget 사용

사용방법도 간단한다! one_gadget 명령어 뒤에 라이브러리 파일의 경로만 적어주면 끝난다!
위의 사진에 보이는 3개의 offset(0x4f2a5, 0x4f302, 0x10a2fc)가 one_gadget의 offset이다.
라이브러리의 베이스 주소에 각 offset 값을 더해서 사용하면 된다!

one_gadget1 = libc_base + 0x4f2a5
one_gadget2 = libc_base + 0x4f302
one_gadget3 = libc_base + 0x10a2fc

위와 같이 어떤 취약점으로 라이브러리의 베이스 주소를 구했는지는 모르겠지만, libc_base 주소를 구하고, offset 값들을 더해주면 one_gadget의 주소를 획득할 수 있다!


✔ One_gadget 수동 탐색

어떤 라이브러리의 경우 one_gadget 명령어가 먹히지 않을 때가 있다! 이럴 때 수동으로 one_gadget의 offset을 찾아야한다...


우선 strings -tx 명령어를 통해 라이브러리 파일에서 "/bin/sh" 문자열의 위치를 찾는다.
위와 같이 /bin/sh의 offset으로 1b3d88이라고 나온 것을 확인할 수 있다.

strings -tx /lib/x86_64-linux-gnu/libc.so.6 |grep /bin/sh

참고로 strings 명령어는 바이너리 파일 내에서 원하는 문자열을 찾아주는 명령어이다.


해당 offset을 통해서 one_gadget의 offset을 찾을 수 있다. 이번에는 objdump 명령어를 사용해줄 것이다.
objdump 명령어를 실행한 모습이다. 결과로 Offset 값과 해당 부분의 hex Code & 어셈블리어가 출력되는 것을 확인할 수 있다.

objdump -M intel -d /lib/x86_64-linux-gnu/libc.so.6 |grep -C8 1b3d88

엄청 많은 부분에서 "/bin/sh"를 사용하고 있는데 첫 부분만 살펴보자.
해당 부분은 one_gadget으로도 나왔던 offset이다. 0x4f309에서 rdi(첫 번째 인자)레지스터에 /bin/sh를 넣어주는 것을 확인할 수 있다.
그 후 0x4f310에서 rsp+0x40의 값을 rsi 레지스터로 넘겨주는데, 해당 부분이 NULL이 되어야한다.


다시 one_gadget으로 0x4f310부분을 살펴보자.
해당 부분도 constraints(제약조건)으로 rsp+0xf가 == 0, rxc == NULL이 되어야한다고 적혀있다!


근데... execve에 /bin/sh를 주어, 실행시킬 때 두 번째 인자와 세 번째 인자는 NULL 무조건 되어야하는건가...? 다음에 알아보자...

오늘의 메모 끗 👋




※ 참고
👉 https://www.lazenca.net/pages/viewpage.action?pageId=16810292
👉 https://originalchoi.tistory.com/entry/strings-%EB%AA%85%EB%A0%B9%EC%96%B4
👉 https://github.com/david942j/one_gadget
👉 https://bubble-dev.tistory.com/entry/CC-execl3-execv3-execle3-execve2-execlp3-execvp3

profile
화이팅!

0개의 댓글