Wargame/H4C

System Hacking - mini phone
1. intro 2. code 및 분석 2.1. code stripped 되어있기에 코드는 패스하자... 2.2. 분석 heap을 통해 이름, 나이, 주소 등을 받는다. 3. 취약점 확인 및 공격 준비 3.1. 취약점 heap overflow 3.2. 공격 준비 전역변수로 heap 주소를 관리한다. 쉬운 문제라면 heap 주소를 관리하는 부분을 선택할때 음수값을 넣어 double free가 가능한 경우가 많은데, 이 문제는 착실하게 다 막아놨다. 다만, 목록을 생성해보면 값들을 받은 뒤 가장 마지막에 다음 heap의 주소를 저장하는 것을 알 수 있으며 이 주소의 가장 마지막 값을 1바이트 조작 가능하다. 그러므로 이를 통해 다음 heap 주소의 위치를 조작할 수 있으며, 이것을 이용해 aar, aaw가 ..

System Hacking - Unprintable
1. intro 2. code 및 분석 2.1. code int __cdecl main(int argc, const char **argv, const char **envp) { char s[256]; // [rsp+0h] [rbp-100h] BYREF init(argc, argv, envp); memset(s, 0, sizeof(s)); fflush(stdout); read(0, s, 0x110uLL); sleep(5u); return 0; } 2.2. 분석 read 함수를 통해 0x110의 값을 받고 sleep 이후 종료된다. 3. 취약점 확인 및 공격 준비 3.1. 취약점 buffer overflow 3.2. 공격 준비 overflow가 발생하는 것은 자명하나, 출력 함수가 없어서 leak이 불가능하..

System Hacking - syscall
1. intro 2. code 및 분석 2.1. code Pseudocode signed __int64 start() { __int64 v1; // [rsp-8h] [rbp-8h] BYREF return sys_read(0, (char *)&v1 - 16, 0x130uLL); } assembler code public _start _start proc near push offset _exit mov eax, 0 mov edi, 0 ; fd mov rsi, rsp sub rsi, 10h ; buf mov edx, 130h ; count syscall ; LINUX - sys_read retn 2.2. 분석 syscall로 read를 실행하며, overflow가 발생한다. 3. 취약점 확인 및 공격 준비 3..

System Hacking - Simple_VM
1. intro 2. code 및 분석 2.1. code __int64 sub_40125B() { __int64 result; // rax __int64 s[257]; // [rsp+0h] [rbp-810h] BYREF unsigned __int8 v2; // [rsp+80Bh] [rbp-5h] int v3; // [rsp+80Ch] [rbp-4h] memset(s, 0, 0x100uLL); v3 = 0; qword_4040A0 = 0LL; while ( 1 ) { result = byte_404100[v3]; if ( !(_BYTE)result ) break; v2 = byte_404100[v3]; switch ( v2 & 0xF0 ) { case 32: s[qword_4040A0++] = qword_..

System Hacking - Notepad
1. intro 2. code 및 분석 2.1. code int __cdecl main(int argc, const char **argv, const char **envp) { int v4; // [rsp+4h] [rbp-Ch] BYREF size_t size; // [rsp+8h] [rbp-8h] BYREF init(argc, argv, envp); v4 = 0; size = 0LL; while ( 1 ) { menu(); _isoc99_scanf("%d", &v4); switch ( v4 ) { case 1: writememo(); break; case 2: editmemo(); break; case 3: readmemo(); break; case 4: removememo(); break; case ..

System Hacking - format_pistol
1. intro 2. code 및 분석 2.1. code init int init() { int result; // eax int fd; // [rsp+8h] [rbp-8h] result = open("/dev/null", 1); fd = result; if ( result != -1 ) { result = dup2(result, 1); if ( result != -1 ) { result = dup2(fd, 2); if ( result != -1 ) result = close(fd); } } return result; } format_f unsigned __int64 format_f() { char format[56]; // [rsp+10h] [rbp-40h] BYREF unsigned __int64 v..

System Hacking - apple pie
1. intro 2. code 및 분석 2.1. code unsigned __int64 vuln() { char buf[56]; // [rsp+0h] [rbp-40h] BYREF unsigned __int64 v2; // [rsp+38h] [rbp-8h] v2 = __readfsqword(0x28u); printf("0x%llx\n\n", initialize); puts("I like apple pie! Do you like apple pie??"); read(0, buf, 0x200uLL); printf("Input : %s\n", buf); if ( strncmp(buf, "Yes", 3uLL) ) { puts("JUSY SAY 'Yes'!!!"); exit(0); } puts("That's righ..

System Hacking - bof
1. intro 2. code 및 분석 2.1. code int __cdecl main(int argc, const char **argv, const char **envp) { char buf[16]; // [rsp+0h] [rbp-120h] BYREF char v5[264]; // [rsp+10h] [rbp-110h] BYREF unsigned __int64 v6; // [rsp+118h] [rbp-8h] v6 = __readfsqword(0x28u); init(argc, argv, envp); puts("What's your name?"); read(0, buf, 0x119uLL); printf("%s, Send your comment : ", buf); gets(v5); return 0; } 2.2..

System Hacking - Qualification
1. intro 2. code 및 분석 2.1. code int __cdecl main(int argc, const char **argv, const char **envp) { char s[48]; // [rsp+0h] [rbp-30h] BYREF init(argc, argv, envp); memset(s, 0, 0x28uLL); puts("Do you know pwnable?"); read(0, s, 0x40uLL); return 0; } 2.2. 분석 간단한 buffer overflow 문제이다. 3. 취약점 확인 및 공격 준비 3.1. 취약점 buffer overflow 3.2. 공격 준비 숨겨진 함수로 shell을 실행해주는 win 함수가 있다. 걍 이를 여러번 던지면 됨.