Hack/Pwnable
-
[Heap exploit] fastbin unlinkHack/Pwnable 2016. 10. 19. 05:25
12345678910111213141516171819202122232425262728293031323334353637383940414243#include #include void leave() { puts("exiting..."); }void jackpot() { puts("jackpot!"); } void (*p)() = leave; int main(){ printf("&p = %p\n", &p); char *p1 = malloc(0x20); char *p2 = malloc(0x40); printf("p1 = %p\n", p1); printf("p2 = %p\n", p2); puts("\n[+] free p2"); free(p2); puts("\n[+] modify &p-0x8"); char *p_ta..
-
[Heap exploit] unsafe_unlinkHack/Pwnable 2016. 10. 18. 15:52
123456789101112131415161718192021222324252627282930313233343536373839#include #include void jackpot() { puts("jackpot!"); } char *p; int main(){ printf("&p = %p\n", &p); p = malloc(0x40); char *p1 = malloc(0x80); printf("p = %p\n", p); printf("p1 = %p\n", p1); printf("p1->prev_size = %p\n", *(void **)(p1-0x10)); printf("p1->size = %p\n", *(void **)(p1-0x8)); puts("\n[+] abuse p overflow"); *(voi..
-
Heap Exploit - House of ForceHack/Pwnable 2016. 10. 11. 19:31
House of Force는, 우리가 원하는 사이즈를 malloc시킬수 있어야하며, top chunk를 덮을수있어야한다. 또 추가적으로 malloc이 한번 더 호출되어야 House of Force 공격을 할 수 있다. 대충 살펴보자면, 아래와같다. 1. top chunk는 다음 malloc을 할당 할 수 있는 크기를 지정해놓는데, 이를 0xffffffff로바꾸면 이만큼 할당을 할 수 있다.2. 다음 malloc size를 컨트롤 할 수 있다면 계산해서 우리가 원하는곳에 할당시켜 다음 malloc이 호출되면 그곳에 할당해준다.3. 그리고 새로 malloc된, 우리가 원하는곳에 malloc된곳에 user data를 쓸수있다면 컨트롤이 가능하다. House Of Force 기법은 다음과 같은 코드가 있기에 정..
-
-
Use-After-Free GOT OverwriteHack/Pwnable 2016. 10. 2. 04:08
12345678910111213141516171819202122232425262728293031323334353637383940414243444546#include #include #include struct Box { int size; char *buf;}; struct Box * create_box(int size){ struct Box * box; box = malloc(sizeof(struct Box)); box-> size = size; box-> buf = malloc(size); return box;} void free_box (struct Box * box){ free (box->buf); free (box);} int main (int argc, char * argv []){ struct..
-
Heap with GDB!Hack/Pwnable 2016. 9. 15. 16:34
요즘 대회때 heap에 대한 문제가 넘나 많아서 힙에대한 지식좀 제대로 쌓아야겠다 공부한 내용이라 잘못된거 있으면 지적좀 해주세요 달게받겠습니다! 123456789101112#include int main(int argc,char *argv[]){ char* buf = (char*)malloc(256); char* buf1 = (char*)malloc(512); strcpy(buf,argv[1]); strcpy(buf1,argv[2]); printf("%s\n",buf); free(buf); free(buf1);}Colored by Color Scriptercs buf, buf1에 각각 256바이트와 512바이트를 할당하고 buf = argv[1], buf1 = argv[2]를 각각 받고 free를 해주..
-
first_fit use after freeHack/Pwnable 2016. 9. 13. 02:40
12345678910111213141516171819202122232425262728293031323334353637#include #include #include int main(){ printf("This file doesn't demonstrate an attack, but shows the nature of glibc's allocator.\n"); printf("glibc uses a first-fit algorithm to select a free chunk.\n"); printf("If a chunk is free and large enough, malloc will select this chunk.\n"); printf("This can be exploited in a use-after-f..
-
fast_dup double free attackHack/Pwnable 2016. 9. 13. 02:13
#include #include int main(){ printf("This file demonstrates a simple double-free attack with fastbins.\n"); printf("Allocating 3 buffers.\n"); int *a = malloc(8); int *b = malloc(8); int *c = malloc(8); printf("1st malloc(8): %p\n", a); printf("2nd malloc(8): %p\n", b); printf("3rd malloc(8): %p\n", c); printf("Freeing the first one...\n"); free(a); printf("If we free %p again, things will cras..