전체 글
-
fastbin_dup - how2heapHeap exploitation/how2heap 2020. 2. 17. 20:22
Abstract double-free bug를 이용해 fastbin에 동일한 청클를 두번 등록해 할당받을 수 있는 기법이다. Exploit Flow 1. 동일한 크기의 fast chunk를 3개 할당 2. (1), (2) 순서로 free 3. (1)을 한번 더 free → double-free 4. 동일한 크기의 fast chunk를 3개 할당 → 첫번째, 세번째 할당받은 주소가 같다. Code #include #include int main() { fprintf(stderr, "This file demonstrates a simple double-free attack with fastbins.\n"); // 3개의 힙을 할당 fprintf(stderr, "Allocating 3 buffers.\n");..
-
rwsr - pwnable.xyzWrite-ups/pwnable.xyz 2020. 2. 15. 19:13
Prob Info Code int __cdecl main(int argc, const char **argv, const char **envp) { const char *v3; // rdi int v4; // eax char *s; // ST10_8 setup(); v3 = "Read Write Sleep Repeat."; puts("Read Write Sleep Repeat."); do { while ( 1 ) { while ( 1 ) { print_menu(v3); v4 = read_ulong(); if ( v4 != 1 ) break; printf("Addr: ", argv); v3 = (const char *)read_ulong(); puts(v3); } if ( v4 != 2 ) break; pr..
-
FSOP - File Stream Oriented ProgrammingHeap exploitation 2020. 2. 15. 04:28
FSOP란 glibc의 FILE 구조체가 가지고있는 vtable을 변경하는 등 파일 스트림을 이용해 프로그램의 흐름을 변경하는 기법이다. Structures struct _IO_FILE 이 구조체는 glibc에서 사용하는 FILE 구조체이다. 파일을 선언하고 fopen으로 파일을 열게 되면 힙에 이 구조체가 생성된다. struct _IO_FILE { int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ #define _IO_file_flags _flags /* The following pointers correspond to the C++ streambuf protocol. */ /* Note: Tk uses the _IO_read_ptr and..
-
fclose - pwnable.xyzWrite-ups/pwnable.xyz 2020. 2. 15. 04:14
Prob Info Code int __cdecl main(int argc, const char **argv, const char **envp) { setup(); printf("> ", argv); read(0, &input, 0x404uLL); fclose(&input); return 0; } 간단하게 input이라는 전역변수에 0x400바이트 입력받고 fclose로 input을 닫는다. .bss:0000000000601260 public input .bss:0000000000601260 ; FILE input .bss:0000000000601260 input FILE ; DATA XREF: main+1F↑o .bss:0000000000601260 ; main+30↑o .bss:0000000000601..
-
message - pwnable.xyzWrite-ups/pwnable.xyz 2020. 2. 15. 04:08
Prob Info Code int __cdecl main(int argc, const char **argv, const char **envp) { char *v3; // rsi unsigned int v4; // eax char v6; // [rsp+10h] [rbp-30h] unsigned __int64 v7; // [rsp+38h] [rbp-8h] v7 = __readfsqword(0x28u); setup(); puts("Message taker."); printf("Message: ", argv); v3 = &v6; _isoc99_scanf("%s", &v6); getchar(); while ( 1 ) { while ( 1 ) { print_menu(); printf("> ", v3); v4 = g..
-
UAF - pwnable.xyzWrite-ups/pwnable.xyz 2020. 2. 13. 22:22
Prob Info int __cdecl main(int argc, const char **argv, const char **envp) { Game *v3; // rsi const char *v4; // rdi __int64 savedregs; // [rsp+10h] [rbp+0h] setup(); initialize_game(); printf("Name: ", argv); v3 = cur; v4 = 0LL; read(0, cur, 0x7FuLL); while ( 1 ) { print_menu(v4, v3); read_int32(); switch ( (unsigned int)&savedregs ) { case 0u: return 0; case 1u: ((void (*)(void))cur->f_calc)()..
-
iape - pwnable.xyzWrite-ups/pwnable.xyz 2020. 2. 13. 21:10
Prob Info 이 문제는 코딩하기가 귀찮은 문제였다. setup 함수에 alarm(0xB4u) 이렇게 알람을 길게 주는 문제는 익스 시간이 길다고 생각하면 된다. int __cdecl main(int argc, const char **argv, const char **envp) { char *v3; // rsi const char *v4; // rdi int v5; // eax char s; // [rsp+10h] [rbp-400h] setup(); v3 = 0LL; v4 = &s; memset(&s, 0, 0x400uLL); while ( 1 ) { while ( 1 ) { print_menu(v4, v3); v5 = read_int32(); if ( v5 != 1 ) break; printf("d..
-
J-U-M-P - pwnable.xyzWrite-ups/pwnable.xyz 2020. 2. 13. 19:56
Prob Info int __cdecl main(int argc, const char **argv, const char **envp) { unsigned __int8 v3; // [rsp+2Fh] [rbp-11h] __int64 v4; // [rsp+30h] [rbp-10h] void *v5; // [rsp+38h] [rbp-8h] setup(); v4 = gen_canary(); puts("Jump jump\nThe Mac Dad will make you jump jump\nDaddy Mac will make you jump jump\nThe Daddy makes you J-U-M-P\n"); v5 = &loc_BA0; while ( 1 ) { print_menu(); printf("> ", argv)..