본문 바로가기

[ ★ ]Study/PWNABLE14

함수 에필로그 leave ret; 가끔 공부하다보면 leave ret 보는데 이번에 정리겸 블로그에 적는 것도 괜찮을 듯 하다. leave와 ret 32bit = ebp, esp, eip64bit = rbp, rsp, rip ======================= leave mov esp, ebppop ebp ebp 레지스터에 저장된 값을 esp 레지스터에 저장esp 레지스터가 가리키는 스택 영역 값을 ebp 레지스터에 저장 ====================== ret pop eipjmp eip esp 레지스터가 가리키는 스택영역 값을 eip 레지스터에 저장후 점프 ================== (fake ebp 도 공부해보자) 2018. 11. 16.
[Tip] /bin/sh 주소 찾기 pwtools 를 이용해서 /bin/sh 찾기 from pwn import * ex) /bin/sh 함수 주소 가져오기라이브러리 지정 및 변수 명 선언 libc= ELF('./라이브러리')leak_binsh = base_addr + list(local_libc.search('/bin/sh'))[0] / libc.search("/bin/sh").next() ------------------------ 기본 gdb 에서 find &system, +99999999,"/bin/sh" -------- ldd로 어떤 라이브러리 쓰는지 체크 후 strings -tx /lib/libc.so.6 | grep "/bin/sh" 출처: http://shayete.tistory.com/entry/Lv1-Gate [샤의 공간].. 2018. 11. 6.
[Tip] pwntool 함수 offset/plt/got 주소 찾기(pwntools) pwtools 를 이용해서 offset 찾기 from pwn import * ex) system 함수 주소 가져오기라이브러리 지정 및 변수 명 선언 libc= ELF('./라이브러리')leak_system = base_addr + libc.symbols['system'] pwtools 를 이용해서 plt/got 찾기 binary = ELF("./파일")puts_plt = binary.plt['puts']puts_got = binary.got['puts'] 2018. 11. 6.
Double Free Bug(DFB) UAF 처럼 DFB도 말 그대로 2번 Free해서 나타나는 취약점입니다. 간단한 예시 0x20만큼 메모리를 세 번 할당했습니다. 하지만 주소에서 볼 수 있듯이 0x30만큼 차이가 납니다. 요청한 사이즈보다 크게 할당되는 이유는 메모리가 할당될 때에 해당 메모리에 대한 사이즈 외에 추가적인 정보가 있기 때문입니다. 우선 chunk라는 용어가 나오는데 알아보도록 하죠. malloc()으로 동적메모리를 구성하는 것은 heap에 chunk라는 자료구조를 하나 선언하는 것과 같습니다. chunk라는 데이터는 유저가 얼마만큼의 메모리를 선언했는가의 size, 이전의 chunk가 어떻게 쓰이고 있는가, 실제 쓰여지는 메모리영역, 그리고 chunk리스트를 유지하기 위한 double linked list포인터들(fd, .. 2017. 9. 18.
Use After Free 취약점 Use After Free 취약점 UAF 취약점 말 그대로 사용한 후 해제했을 때 취약점이 발생하는 것을 뜻합니다. 더 정확히는 heap 영역에서 할당된 ( malloc … ) 공간을 free하고 reuse 할 때 일어날 수 있는 취약점입니다. 123456789101112131415161718192021222324252627#include #include int main(void){ int *heap1; int *heap2; int *heap3; heap1 = (int *)malloc(sizeof(int) * 50); heap2 = (int *)malloc(sizeof(int) * 50); printf("heap1 address : %p\n", heap1); printf("heap2 address : %.. 2017. 9. 16.
system call table 정리 32-bit x86 system call tabel은 아래 사이트에서 찾아볼 수 있습니다. http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html %rax Name Entry point Implementation 0 read sys_read fs/read_write.c 1 write sys_write fs/read_write.c 2 open sys_open fs/open.c 3 close sys_close fs/open.c 4 stat sys_newstat fs/stat.c 5 fstat sys_newfstat fs/stat.c 6 lstat sys_newlstat fs/stat.c 7 poll sys_poll fs/select.c 8 lsee.. 2017. 9. 16.