목록War Game/Pwnable.xyz (50)
tmxklab
1. 문제 nc svc.pwnable.xyz 30015 1) mitigation 확인 2) 문제 확인 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { setup(argc, argv, envp); initialize_game(); printf("Name: "); read(0, cur, 0x7FuLL); while ( 1 ) { print_menu(); switch ( (unsigned __int64)(unsigned int)read_int32() ) { case 0uLL: return 0; case 1uLL: (*((void (**)(void))cur + 17))(); break; case 2u..
1. 문제 nc svc.pwnable.xyz 30044 1) mitigation 확인 2) 문제 확인 default program을 실행 시킬 것인지 물어봄 'y'를 입력한 경우 : 이름을 입력하고 프로그램 종료 'n'를 입력한 경우 : program을 보내기 위해 입력을 받을 수 있음 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { size_t program_size; // [rsp+28h] [rbp-1018h] char program[4096]; // [rsp+30h] [rbp-1010h] unsigned __int64 v6; // [rsp+1038h] [rbp-8h] v6 = __read..
1. 문제 nc svc.pwnable.xyz 30014 1) 문제 확인 2) 함수 확인 2-1) main함수 int __cdecl main(int argc, const char **argv, const char **envp) { int v3; // eax char s; // [rsp+10h] [rbp-400h] setup(argc, argv, envp); memset(&s, 0, 1024uLL); while ( 1 ) { while ( 1 ) { print_menu(); v3 = read_int32(); if ( v3 != 1 ) break; printf("data: "); fgets(&s, 128, stdin); } if ( v3 = 14 while True: p.sendafter("> ", "2") ..
1. 문제 nc svc.pwnable.xyz 30013 1) 문제 확인 2) 함수 확인 2-1) main함수 int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { int v3; // eax int v4; // ebx unsigned int v5; // ebx size_t v6; // rax setup(argc, argv, envp); puts("My strcat"); maxlen = 128; printf("Name: "); maxlen -= readline(name, 128LL); desc = (char *)malloc(0x20uLL); printf("Desc: "); readline(desc, 32LL); while ..
1. 문제 nc svc.pwnable.xyz 30012 1) 문제 확인 2) 함수 확인 2-1) main() 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(argc, argv, envp); 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..
1. 문제 nc svc.pwnable.xyz 30011 1) 문제 확인 2) 함수 확인 2-1) 메인 함수 2-2) create_user() 2-3) print_user() 2-4) eidt_usr() 2-5) read_int32() 3) mitigation 2. 접근방법 1) 변수 위치 정리 name데이터는 힙에 저장되고 age데이터는 스택에 저장됨 2) 디버깅 확인 create_user()에서는 s변수에 입력(name)을 받고 age값 스택에 저장됨 edit_usr()에서는 cur변수에 입력(name)을 받음 v0+0x48[0x7ffffffecea8]에 저장됨 이 때, [rbx+0x48] 이렇게 주소 값을 참조하여 저장하므로(rbx : s변수 주소 값) 아까랑 동일하게 0x7ffffffecea8에 저..
1. 문제 nc svc.pwnable.xyz 30010 1) 문제 확인 2) 함수 확인 2-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { setup(&argc); printf("Name: "); read(0, &cmd[48], 0x1Fu); vuln(); return 0; } - cmd[48]에 입력 값을 받고 vuln()을 실행 2-2) vuln() unsigned int vuln() { int v1; // [esp+8h] [ebp-10h] unsigned int v2; // [esp+Ch] [ebp-Ch] v2 = __readgsdword(0x14u); while ( 1 ) { while ( 1 ) { prin..
1. 문제 nc svc.pwnable.xyz 30009 1) 문제 확인 이름을 입력하고 게임을 진행할 수 있다. 2) 함수 확인 win함수와 main함수를 포함한 다수의 함수들 확인 2-1) 메인 함수 int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { const char *v3; // rdi int v4; // eax setup(); v3 = "Shell we play a game?"; puts("Shell we play a game?"); init_game(); while ( 1 ) { while ( 1 ) { print_menu(v3, argv); v3 = "> "; printf("> "); v4 = read_i..
1. 문제 nc svc.pwnable.xyz 30008 1) 문제 확인 2) 함수 확인 2-1) 메인 함수 round_1,2,3()를 실행하여 반환 값이 모두 참인 경우 win함수 실행 +) round_1,2,3()의 로직은 다음 접근 방법에서 분석해보도록 하자 3) 메모리 보호기법 및 파일 정보 확인 2. 접근방법 1) round_1() - '-'문자가 없는 v1과 v2를 입력으로 받는다.(음수를 사용할 수 없음) - 다음 두 개의 조건 문이 참이면 통과한다. 1. v1 1337 && v1 * v2 == 1337 - 이 때, v1과 v2의 데이터 타입은 int형이다. 3) round_3() - v2, v2+4, v3, v3+4, v4를 입력으로 받는다. - 다음 2개의 조건문이 참이면 통과한다. 1. ..
1. 문제 nc svc.pwnable.xyz 30007 1) 문제 확인 - 1) Malloc : size값 만큼 메모리 할당 - 2) Free : 메모리 해제 - 3) Read : Input값 저장 - 4) Write : Input값 출력 2) 함수 확인 2-1) 메인 함수 - v3값에 따라 vtable에 지정된 함수를 호출 - vtable이 뭔지는 이따가 확인해보자 2-2) _() - 요거를 호출해야 한다. 2-3) do_malloc() - input값으로 size를 받고 result에 할당된 메모리 주소를 넣는다. - result값이 존재하면 heap_buffer(bss영역)에 주소 값 저장하고 아니면 1을 저장 2-4) do_read() - heap_buffer가 존재하는 경우 heap_buffer..