목록War Game (174)
tmxklab

1. 문제 1) mitigation확인 2) 문제 확인 입력 값을 2번 받고 종료됨 3) 코드흐름 파악 3-1) main함수 int __cdecl main(int argc, const char **argv, const char **envp) { char s; // [esp+1Ch] [ebp-14h] setvbuf(stdout, 0, 2, 0); printf("Name:"); read(0, &name, 0x32u); printf("Try your best:"); return (int)gets(&s); } read함수에서 입력 값을 저장하는 name변수는 bss영역에 존재함 gets함수에서 입력 값을 받는 s변수를 통해 bof가능 → ret조작 가능 2. 접근 방법 그냥 name변수에 쉘 코드 작성하여 실행..

1. 문제 1) mitigation 확인(orw.bin) 2) 문제 확인(orw.bin) 2-1) main함수 int __cdecl main(int argc, const char **argv, const char **envp) { orw_seccomp(); printf("Give my your shellcode:"); read(0, &shellcode, 200u); ((void (*)(void))shellcode)(); return 0; } orw_seccomp()를 호출하고 shellcode변수에 입력 값을 받아 shellcode를 실행시킴 → shellcode변수에 쉘 코드 저장시켜서 실행시키는 듯 2-2) orw_seccomp함수 unsigned int orw_seccomp() { __int16 v..

1. 문제 1) mitigation 확인 2) 문제 확인 2-1) main함수 int __cdecl main(int argc, const char **argv, const char **envp) { setvbuf(_bss_start, 0, 2, 0); get_flag(); return 0; } 2-2) get_flag함수 unsigned int get_flag() { int buf; // [esp+8h] [ebp-80h] int v2; // [esp+Ch] [ebp-7Ch] unsigned int i; // [esp+10h] [ebp-78h] int fd; // [esp+14h] [ebp-74h] char v5; // [esp+19h] [ebp-6Fh] char v6; // [esp+1Ah] [ebp-6..

이후에 힙 관련 취약점을 이용한 문제들이 많으므로 힙 공부를 끝낸 뒤에 풀어볼 예정이다. 1. 문제 nc ctf.j0n9hyun.xyz 3022 1) mitigation 2) 문제 확인 3) 코드흐름 파악 3-1) main() s변수에 입력 값을 받고 바로 포맷 지정자 없이 printf함수로 출력 -> FSB 취약점 발생 v5변수에 get_tier함수 리턴 값을 저장하고 출력 3-2) play_game() 메인 함수 코드에서 사용되지 않은 함수로 해당 함수를 호출하여 파라미터 a1의 값이 4이면 플래그 값 출력 2. 접근 방법 먼저, 메인 함수 코드 흐름상에 play_game함수를 호출하는 로직이 존재하지 않으므로 play_game함수를 호출하도록 해야 한다. 또한, play_game함수의 파라미터로 4..

1. 문제 nc ctf.j0n9hyun.xyz 3019 1) mitigation 2) 문제 확인 제한된 길이의 값만큼 출력 가능 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { setvbuf(stdout, 0, 2, 0); return vuln(); } 3-2) vuln() int vuln() { char nptr; // [esp+1Ch] [ebp-2Ch] int v2; // [esp+3Ch] [ebp-Ch] printf("How many bytes do you want me to read? "); get_n(&nptr, 4); v2 = atoi(&nptr); if ( v2 > 32 ) ret..

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 ctf.j0n9hyun.xyz 3038 1) mitigation 2) 문제 확인 [pzshell.c] #include #include #include #include #include #include #include #include void sandbox(void) { scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_ALLOW); if (ctx == NULL) { write(1, "seccomp error\n", 15); exit(-1); } seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(fork), 0); seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(vfork), 0); seccomp_..

저번에 쉘 코드 작성 실습을 진행했으므로 이번에는 쉘 코드 관련 문제를 풀어보기로 하였다. 1. 문제 nc ctf.j0n9hyun.xyz 3036 1) mitigation 2) 문제 확인 [ezshell.c] #include #include #include #include void Init(void) { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); setvbuf(stderr, 0, 2, 0); } int main(void) { Init(); char result[100] = "\x0F\x05\x48\x31\xED\x48\x31\xE4\x48\x31\xC0\x48\x31\xDB\x48\x31\xC9\x48\x31\xD2\x48\x31\xF6\x48\x31\xF..

1. 문제 nc ctf.j0n9hyun.xyz 3018 1) 문제 확인 - 어떠한 주소 값이 2개 출력되고 입력을 2번 받고 종료 2) main함수 int __cdecl main(int argc, const char **argv, const char **envp) { char s; // [esp+0h] [ebp-84h] alarm(0x3Cu); setvbuf(stdout, 0, 2, 0); setvbuf(stdin, 0, 2, 0); setvbuf(stderr, 0, 2, 0); printf("Hey guyssssssssss here you are: %p %p\n", &binsh, &system); fgets(&s, 128, stdin); printf(&s); gets(&s); return 0; } - ..

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") ..