목록War Game (174)
tmxklab

1. 문제 확인 문제에는 leg.c와 leg.asm파일이 주어진다. [ leg.c ] #include #include int key1(){ asm("mov r3, pc\n"); } int key2(){ asm( "push{r6}\n" "addr6, pc, $1\n" "bxr6\n" ".code 16\n" "movr3, pc\n" "addr3, $0x4\n" "push{r3}\n" "pop{pc}\n" ".code32\n" "pop{r6}\n" ); } int key3(){ asm("mov r3, lr\n"); } int main(){ int key=0; printf("Daddy has very strong arm! : "); scanf("%d", &key); if( (key1()+key2()+key3()..

1. 문제 확인 [input.c] #include #include #include #include #include int main(int argc, char* argv[], char* envp[]){ printf("Welcome to pwnable.kr\n"); printf("Let's see if you know how to give input to program\n"); printf("Just give me correct inputs then you will get the flag :)\n"); // argv if(argc != 100) return 0; if(strcmp(argv['A'],"\x00")) return 0; if(strcmp(argv['B'],"\x20\x0a\x0d")) return..

1. 문제 확인 [random.c] #include int main(){ unsigned int random; random = rand();// random value! unsigned int key=0; scanf("%d", &key); if( (key ^ random) == 0xdeadbeef ){ printf("Good!\n"); system("/bin/cat flag"); return 0; } printf("Wrong, maybe you should try 2^32 cases.\n"); return 0; } 입력 값 key값과 random값을 xor한 결과 값이 0xdeadbeef랑 같으면 된다. 2. 접근 방법 random값을 가져올 때 seed값을 정하지 않고 걍 rand()리턴 값을 가져옴 ..

1. 문제 확인 [ passcode.c ] #include #include void login(){ int passcode1; int passcode2; printf("enter passcode1 : "); scanf("%d", passcode1); fflush(stdin); // ha! mommy told me that 32bit is vulnerable to bruteforcing :) printf("enter passcode2 : "); scanf("%d", passcode2); printf("checking...\n"); if(passcode1==338150 && passcode2==13371337){ printf("Login OK!\n"); system("/bin/cat flag"); } els..

1. 문제 확인 파일 다운받아서 리버싱하라고 한다. 다운ㄱㄱ 음 근데 디버깅이 실행이 안된다. 확인을 해보자 UPX로 패킹된 것 같다. 다음 링크에서 upx를 설치해주고 언패킹해보자 Release UPX 3.96 · upx/upx Please see the file NEWS for a detailed list of changes. Note: all versions are functionally equivalent, i.e. each version can handle all executable formats, so you only need the file that runs on ... github.com $wget https://github.com/upx/upx/releases/download/v3.96/..

1. 문제 확인 nc pwnable.kr 9000 [ bof.c ] #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme);// smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; } gets에서 bof가 발생한다. 그리고 bof파일은 32bit elf파일이다. 2. 접근 방법 unsigned int __cdecl func(int a1) { char s; //..

1. 문제 확인 col.c파일부터 확인해보자 [ col.c ] #include #include unsigned long hashcode = 0x21DD09EC; unsigned long check_password(const char* p){ int* ip = (int*)p; int i; int res=0; for(i=0; i

1. 문제 접속해보니 flag파일이 있는데 퍼미션 걸려있어서 확인할 수 없다. 하지만, setuid가 걸려있는 fd파일과 fd.c가 보인다. [fd.c] #include #include #include char buf[32]; int main(int argc, char* argv[], char* envp[]){ if(argc

1. 문제 nc svc.pwnable.xyz 30020 1) mitigation 확인 2) 문제 확인 뭔가 2대 2로 pvp를 하는 게임인 것 같다. 서로 스킬을 사용하여 HP를 깎고 살아남으면 게임에서 이기게 된다. 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { setup(); show_banner(); main_handler(); return 0; } main_handler()를 호출한다. 3-2) main_handler() void __cdecl main_handler() { int wait_time_0; // [rsp+Ch] [rbp-4h] int wait_time_0a; // [rs..

1. 문제 nc svc.pwnable.xyz 30047 1) mitigation 확인 2) 문제 확인 총 3개의 메뉴가 있으며 노트를 작성하고 읽고 수정하는 프로그램 3) 코드흐름 파악 3-1) main() int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { __int64 *v3; // rbx int i; // ebp __int64 *v5; // r12 int select; // eax __int64 v7; // [rsp+0h] [rbp-48h] unsigned __int64 v8; // [rsp+28h] [rbp-20h] v8 = __readfsqword(0x28u); setup(); puts("====== Welc..