one_gadget

  • objdump나, one_gadget으로 구한 offset은 library mapping 시작 주소에 +하면된다.
  • constraints 를 확인한다.

https://github.com/david942j/one_gadget

https://david942j.blogspot.kr/2017/02/project-one-gadget-in-glibc.html    어떤 식으로 동작하는지 나와있다.

```bash

gem install one_gadget

```

one_gadget으로 나온 결과는 잘 되는지 꼭 테스트해봐야 한다. 에러가 발생하는 경우도 있기 때문.

```bash

jump *base+offset

```

바이너리가 컴파일된 시스템의 libc 버전과, 바이너리를 실행하는 현재 시스템의 libc 버전이 다른 경우

one gadget으로 찾은 gadget을 실행하면 relocation error가 발생하며 쉘이 제대로 실행되지 않을 수 있다.

```

process 24835 is executing new program: /bin/dash

E▒H▒}▒: relocation error: ̉E▒H▒}▒: symbol ▒!, version GLIBC_2.2.5 not defined in file libc.so.6 with link time reference

[Inferior 1 (process 24835) exited with code 0177]

```


libc-database

이게 틀리게 가르쳐 줄 때도 있기 때문에 http://libcdb.com/ 와 같이 사용해야 한다.
```bash
$ ./find __libc_start_main_ret a83
ubuntu-trusty-i386-libc6 (id libc6_2.19-0ubuntu6.13_i386)

$ ./find __malloc_hook 740    # 함수가 아니라 symbol도 된다.

ubuntu-trusty-amd64-libc6 (id libc6_2.19-0ubuntu6.13_amd64)


$ ./dump libc6_2.19-0ubuntu6.13_i386

$ ./add ~/local/libc.so.6    # dump 하려면 .symbols가 있어야 해서, local file은 add해주어야 한다.
```
  • htons는 안되는 듯.
  • fclose는 두 개 있으나, 잘 동작하는 듯.


'Security > System Exploit' 카테고리의 다른 글

Poison null byte  (0) 2017.08.15
overlapping chunk  (0) 2017.08.15
pwntools  (0) 2017.08.13
Shellcode  (0) 2017.07.26
UAF, Use After Free  (0) 2017.07.23