매직 가젯, 원샷 가젯 (64bit O / 32bit eax라면 O/ rax X)
※ magic gadget (onshot gadget) 이란
execve() 함수 안에 "/bin/sh"를 호출해주는 부분이 존재하는데, magic gadget 은 바로 이 부분을 지칭한다. 이 부분을 찾기 위해서는 라이브러리에서 찾아보면된다.
우리는 libc 기본 주소만 알고 있다면 offset을 통해 해당 부분을 호출하여 쉘을 얻을 수 있다. 그렇기에 "magic gadget" 이라고 한다. 하지만 magic gadget은 로컬과 xinetd로 돌아가는 서비스에서만 가능하다.
oneshot gadget 찾아주는 툴 : https://github.com/david942j/one_gadget
사용법 : http://tribal1012.tistory.com/143
참고로 위의 oneshot gadget을 찾아주는 툴은 64bit에서만 쓸 수 있다. 32bit에서 쓰려고해서 써보니...
리턴된 주소에서 execve에 들어갈 인자를 edi에 넣어주는 등 64bit기반으로 동작한다 ㅡㅡ; 게다가 애초에 매직 가젯은 32bit에서 안써진다고 한다.
후... 안써져서 괜히 삽질만 열심히 했네 ^^
64bit는 rip를 기준으로 주소를 불러올 수 있기 때문에 바로 부를수 있으나 32bit는 그게 안된다나 뭐라나...
해커스쿨에 이에 관한 질문과 답변한 내용이 있더라... (http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_system&no=1828)
는 아니다 32bit도 된다. 되는 것이 있다.
이렇게 eax나 esp를 기준으로 해서 작동하는 것들은 다 oneshot 가젯인데, 32bit에서 작동되는 oneshot가젯이고
rax나 rsp 등을 기준으로 작동하는 execve("/bin/sh")는 64bit에서 작동하는 oneshot가젯이다.
'Pwnable!!' 카테고리의 다른 글
setvbuf란? (0) | 2018.07.10 |
---|---|
bash drop privileges (0) | 2018.07.06 |
call instruction (0) | 2018.05.27 |
ROP gadget 찾기 (gdb-peda, rp++) (0) | 2018.05.26 |
linux에서 lib64의 base address 확인 및 팁 (0) | 2018.05.24 |