System Hacking

one-shot gadget (원샷 가젯)

jir4vvit 2020. 11. 13. 19:32

정말 편리한 one-shot gadget(원샷 가젯)에 대해 알아보자.

 

원샷 가젯은 가젯 하나만으로 쉘을 딸 수 있다. 참고로 가젯이란..  그냥 코드 덩어리라고 생각하면 될 듯 하다. 

 

원샷 가젯이란 라이브러리 내에 존재하는 가젯으로, 리눅스 시스템에서 특정 조건 하에 pc를 바꾸는 것만으로 쉘을 실행시켜주는 코드이다.

 

원샷 가젯은 one_gadget이란 툴로 손쉽게 찾을 수 있다.

아래는 ubuntu 18이상 버전에서 설치할 수 있는 명령이다.

16버전에서 사용하려고 해봤는데 잘 안깔려서 그만뒀다... ㅎㅋ.. 방법을 찾는다면 더 추가해서 포스팅하겠다.

sudo apt-get install ruby
sudo gem install one_gadget 

 

 

 

사용법

경로는 부끄러워서(?) 가렸다.

 

constraints 가 조건인데 ret를 원가젯으로 덮었을 때 저 조건에 만족하면 쉘이 따지고 만족안하면 쉘이 안따진다. 

 

저 조건이 맞아 떨어질 때도, 안맞아 떨어질 때도 있다.

실행할 때마다 레지스터 값이 달라져서 그렇다 ..

 

안되는 것을 되게 할 수도 있다.

저 사진 기준, 아래 3개를 조건이 rsp 기준으로 특정 영역이 NULL이면 쉘이 따인다고 한다.

그러면 특정 영역이 NULL이 아니면 쉘이 당연히 안따지겠지????

 

payload = ''
payload += 'A' * 0x18
payload += p64(원샷가젯)
payload += p64(0) * 100

 

입력길이의 여유가 된다면 이런식으로 강제로 NULL을 넣어서 사용할 수 있다. 그럼 안되던게 된다!

 

 

 

 

 

릭해서 libc_base 구하고 원샷가젯 오프셋을 더하면 원샷가젯 주소가 나올 것이다.

buf+SFP+원샷가젯주소

 

'System Hacking' 카테고리의 다른 글

Use-After-Free (UAF)  (0) 2021.01.06
Master canary (마스터 카나리)  (1) 2020.12.21
Linking(링킹), Dynamic Link  (0) 2020.10.16
내가 헷갈리는 주소의 개념 & 간단한 ASLR 이야기  (0) 2020.10.12
PLT와 GOT  (0) 2020.09.22