※ 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

+ Recent posts