상세 컨텐츠

본문 제목

[Exploit Tech] One gadget

SYSTEM HACKING/Exploit Tech

by koharin 2019. 11. 2. 11:40

본문

728x90
반응형

1. /lib/x86_64-linux-gnu/libc-2.23.so

 

libc 라이브러리의 do_system() 함수 내에서 __execve() 함수를 이용해 shell을 호출한다.

 

  __execve (_PATH_BSHELL, (char *const *) args, __environ);

 

2. One gadget 찾기

 

1) strings

 

strings 이용해서 라이브러리 파일에서 "/bin/sh" 문자열이 위치한 offset 주소를 구한다.

 

$ strings -t x /lib/x86_64-linux-gnu/libc-2.23.so | grep "/bin/sh"

 

2) objdump

 

$ objdump -M intel -d /lib/x86_64-linux-gnu/libc-2.23.so | grep -C8 18cd57

 

execve() 함수 사용하려면

첫 번째 인자 값으로 RDI 레지스터에 "/bin/sh" offset 주소 저장

두 번째 인자 값으로 RSI 레지스터에 [rsp+0x30] 영역 값 저장 => Null(0) 이어야 함

 

 

3) one_gadget

 

$ gem install one_gadget

 

으로 one_gadget 스크립트를 설치하고, 라이브러리에서 one gadget을 찾는다.

 

$ one_gadget /lib/x86_64-linux-gnu/libc.so.6

 

execve() 함수만 찾아서 objdump 결과보다는 offset 주소 개수 적음

 

3. vuln code

 

 

-RSI 레지스터에 [rsp+0x30] 영역 값이 저장되는데, 이 값으 null 값이어야 하므로 memset 함수로 0으로 초기화하는 과정 필요

- asdf 전역 변수 주소 + index = read got 가 되도록 한다.

index = read got - asdf 전역 변수 주소

 

따라서 index 로 0xffffffffffffffa8 을 준다.

 

번째 read : 0xffffffffffffffa8

번째 read : asdf + index => read_got 아무것도 주지 않고 sleep(0.5)

번째 read : one_gadget 

 

4. exploit

 

 

728x90
반응형

관련글 더보기