정말 편리한 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 |