Wargame/Root me

    [App-system] ELF x86 - Stack buffer overflow - ret2dl_resolve

    1. intro 2. code 및 분석 2.1. code code가 제공되지 않고 remote server로 접속해서 푸는 문제이다. 2.2. 분석 다른 문제가 안풀려서 푸는 문제... ㅠㅠ 우선 checksec부터 해봤다. app-systeme-ch77@challenge03:~$ checksec ch77 [*] '/challenge/app-systeme/ch77/ch77' Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000) 32 bit 파일이다. 소스코드가 제공되지 않기에 바로 gdb로 열어보았더니 app-systeme-ch77@challenge03:~$ gef ch77..

    [App system] ELF x64 - Stack buffer overflow - advanced

    1. intro 2. code 및 분석 2.1. code #include #include /* gcc -o ch34 ch34.c -fno-stack-protector -Wl,-z,relro,-z,now,-z,noexecstack -static */ int main(int argc, char **argv){ char buffer[256]; int len, i; gets(buffer); len = strlen(buffer); printf("Hex result: "); for (i=0; i pwnlib.shellcraft.amd64 — Shellcode for AMD64 — pwntools 2.2.1 documentation Shellcraft module containing generic Intel x86_..

    [App system] ELF x86 - Stack buffer overflow basic 5

    1. intro 2. code 및 분석 2.1. code #include #include #include #include #include #include #define BUFFER 512 struct Init { char username[128]; uid_t uid; pid_t pid; }; void cpstr(char *dst, const char *src) { for(; *src; src++, dst++) { *dst = *src; } *dst = 0; } void chomp(char *buff) { for(; *buff; buff++) { if(*buff == '\n' || *buff == '\r' || *buff == '\t') { *buff = 0; break; } } } struct Init ..

    [App-system] ELF x86 - Stack buffer and integer overflow

    1. intro 2. code 및 분석 2.1. code #include #include #include #include #include #define BUFFER 128 void read_data(char *data, int fd, int size) { while(read(fd, data, 1) == 1 && *data && size) { size--; data++; } } void read_file(int fd) { char path[BUFFER+1] = {0}; int size; if(read(fd, &size, sizeof(int)) != sizeof(int)) { printf("[-] File too short.\n"); exit(0); } if(size >= BUFFER) { printf("[..

    [App-system] ELF x86 - Stack buffer overflow - C++ vtables

    1. intro 2. code 및 분석 2.1. code #include #include #include #include #include class formatter { public : virtual int RTTI( ) =0 ; virtual void displayName( ) =0 ; virtual void format( const char * ptr ) =0 ; }; class UpperFormatter: public formatter { public : virtual int RTTI( ) { return 1; }; virtual void displayName( ) { printf ("UpperFormatter"); } virtual void format( const char * ptr ) { co..

    [Cracking] ELF C++ - 0 protection

    C++은 또 이해하기 어렵구나... 아는 것보다 모르는 게 훨씬 많으니 공부할 맛이 난다. 해당 파일을 실행해보니 마찬가지로 인자를 passwd로 사용한다. ┌──(kali㉿kali)-[~/Downloads] └─$ ./ch25.bin usage : ./ch25.bin password 앞선 문제와 동일하게 문자열을 비교할 테니 strings 명령어로 문자를 뽑아봤지만 특별히 눈에 띄는 문자열은 없었다. ┌──(kali㉿kali)-[~/Downloads] └─$ strings ch25.bin /lib/ld-linux.so.2 CyIk libstdc++.so.6 __gmon_start__ _Jv_RegisterClasses _ITM_deregisterTMCloneTable _ITM_registerTMClon..

    [Cracking] PE x86 - 0 protection

    윈도우 파일은 역시 어렵다... 특히 att 문법으로 공부하던 나에게는 at&t는 더더욱 눈에 안들어온다... 일단 프로그램을 실행시켜보니 인자로 pass를 받는 것을 볼 수 있었다. 무작정 IDA로 열고, 해당 문자열을 검색해보았더니 비교문이 있는 것을 볼 수 있었고, 이를 차례로 확인해서 맞으면 Gratz man :) 문자열을 출력해주는 것을 확인할 수 있었다. 비교하는 문자를 차례로 확인했더니 클리어! 언젠가는 공부하겠지만... 아직까지는 이 쉬운 문제도 어렵게 느껴진다.

    [Cracking] ELF x86 - Basic

    아직까지는 쉬운 문제. 앞선 문제와 유사하고, 두번의 값을 입력 받고 특정 값과 비교한다. 해당 값은 프로그램 초반부에 %ebp - 0xc와 %ebp - 0x10에 저장되어있다가 나중에 비교 값으로 사용된다. ┌──(kali㉿kali)-[~/Downloads] └─$ ./ch2.bin ############################################################ ## Bienvennue dans ce challenge de cracking ## ############################################################ username: a Bad username ┌──(kali㉿kali)-[~/Downloads] └─$ gdb ch2.bin..

    [App-Script] Bash - System 2

    #include #include #include #include int main(){ setreuid(geteuid(), geteuid()); system("ls -lA /challenge/app-script/ch12/.passwd"); return 0; } 이번에는 ls 명령어에 인자가 있다. 이전과 동일하게 ls 명령어 실행 시 임의 폴더의 cat을 실행하는 ls 파일을 만들어두되, 두번째 인자만 값으로 받아들여 읽어보자. 간단히 코딩. #include #include int main(int argc, char* argv[]){ char cmd[100]; sprintf(cmd,"cat %s",argv[2]); printf("%s\n",cmd); system(cmd); return 0; } PATH 환..

    [Cryptanalysis] Encoding - UU

    _=_ _=_ Part 001 of 001 of file root-me_challenge_uudeview _=_ begin 644 root-me_challenge_uudeview B5F5R>2!S:6UP;&4@.RD*4$%34R`](%5,5%)!4TE-4$Q%"@`` ` end 제목에서 보듯 UU encode된 문자열임을 알 수 있다. 아래를 보면 한방에 이해되는 encoding 방식 즉 문자의 ascii 10진수 값을 6 bit씩 끊고 32를 더해 다시 ascii code로 변환하는 것이다. 세상이 좋아져서 인터넷에 uu decoder online만 쳐도 온라인 디코더가 나온다. 아래 사이트를 이용함. https://www.browserling.com/tools/uudecode Uudecode Stri..