목록War Game/HackCTF (44)
tmxklab
1. 문제 1) mitigation 확인 2) 문제 확인 환경변수 team_name=bi0s를 설정하고 파라미터를 주면 됨 3) 코드흐름 파악 3-1) main __int64 __fastcall main(int a1, char **a2, char **a3) { const char *s1; // [rsp+20h] [rbp-10h] s1 = getenv("team_name"); if ( s1 && !strncmp(s1, "bi0s", 4uLL) ) { if ( a1 == 2 ) { if ( (unsigned int)sub_87C(s1, a2[1]) == 1 ) sub_830(a2[1]); else printf("Better luck next time!"); } else { printf("usage: chal..
1. 문제 1) mitigation 확인 문제 이름대로 32비트 MIPS 바이너리 파일이다. 2) 문제 확인 qemu로 확인할라 했는데 이상하게 mips만 안됨, 실행시키면 세그먼테이션 폴트 발생 3) 코드흐름 파악 undefined4 main(void){ char input_24; int input_length; int flag1; char cStack49; int flag2; uint flag3; int flag4; char input [28]; memset(input,0,0x1a); printf(0xdf0); __isoc99_scanf(0xdfc,input); input_length = strlen(input); if (input_length == 0x19) { flag1 = 0; while (fl..
tcache개념을 공부하고 처음 tcache관련 문제를 풀어보았다. tcache에서 DFB를 포함한 여러 오류 검증 코드가 빠져있어 exploit이 쉬운 것 같다. 해당 문제는 tcache poisoning공격 기법을 사용하여 풀었다. 1. 문제 nc ctf.j0n9hyun.xyz 3041 1) mitigation 확인 이번엔 mitigation이 모두 걸려있다. 2) 문제 확인 메뉴가 총 5개가 보인다. (추가, 수정, 삭제, 확인, 종료) 3) 코드 흐름 확인 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { alarm(0x3Cu); setvbuf(stdout, 0LL, 2, 0LL); setvbuf(stdin..
exit()함수 내부에 존재하는 free함수를 이용한 exploit 1. 문제 nc ctf.j0n9hyun.xyz 3040 1) mitigation 확인 2) 문제 확인 두 번의 입력을 받고 출력해준뒤 프로그램이 종료된다. 3) 코드 흐름 확인 3-1) main() int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { int i; // [rsp+Ch] [rbp-144h] char buf; // [rsp+10h] [rbp-140h] unsigned __int64 v5; // [rsp+148h] [rbp-8h] v5 = __readfsqword(0x28u); Init(argc, argv, envp); for ( i = 0;..
1. 문제 nc ctf.j0n9hyun.xyz 3039 1) mitigation 확인 stripped된 파일 걸려있는 mitigation이 없고 rwx가 가능한 세그먼트가 존재 2) 문제 확인 입력 값을 받고 종료 3) 코드 흐름 확인 3-1) main() __int64 __fastcall main(__int64 a1, char **a2, char **a3) { char s; // [rsp+0h] [rbp-10h] Init(); fgets(&s, 44, stdin); return 0LL; } fgets로 s[rbp-0x10]에 44bytes까지 입력 받을 수 있음 → bof 2. 접근방법 일단, 걸려있는 mitigation도 존재하지 않고 bof가 발생하니 쉘 코드를 넣어서 실행시키는 방법으로 생각해 보..
1. 문제 nc ctf.j0n9hyun.xyz 3037 1) mitigation 확인 2) 문제 확인 입력 값을 받고 다시 출력해준다. 3) 코드 흐름 확인 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { char buf; // [rsp+0h] [rbp-20h] unsigned __int64 v5; // [rsp+18h] [rbp-8h] v5 = __readfsqword(0x28u); Init(argc, argv, envp); puts("hello"); read(0, &buf, 0x19uLL); printf(&buf); return 0; } read로 buf[rbp-0x20]변수에 0x19만큼 입력을 받음 pri..
1. 문제 nc ctf.j0n9hyun.xyz 3035 1) mitigation 확인 stripped된 파일 2) 문제 확인 총 3개의 메뉴가 보인다. 3) 코드 흐름 확인 3-1) main() void __fastcall __noreturn main(__int64 a1, char **a2, char **a3) { int v3; // eax sub_400846(a1, a2, a3); while ( 1 ) { menu(); v3 = (char)input(); switch ( v3 ) { case '2': view(); break; case '3': remove(); break; case '1': make(); break; } } } 3-2) input() __int64 input() { unsigned _..
1. 문제 nc ctf.j0n9hyun.xyz 3034 1) mitigation 확인 2) 문제 확인 입력 값을 받고 종료 3) 코드 흐름 확인 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { char s; // [rsp+0h] [rbp-10h] setvbuf(stdout, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 2, 0LL); fwrite("Impossible RTL ha? Nothing for you!\n", 1uLL, 0x24uLL, stdout); fgets(&s, 256, stdin); return 0; } fgets()를 통해 s[rbp-0x10]변수에 256bytes만큼 입력을 ..
stdout을 이용한 libc주소 leak & fastbin dup 1. 문제 nc ctf.j0n9hyun.xyz 3033 1) mitigation 확인 2) 문제 확인 3) 코드 흐름 확인 3-1) main() int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { int v3; // [rsp+Ch] [rbp-4h] Init(); while ( 1 ) { while ( 1 ) { menu(); v3 = input_number(argc, argv); if ( v3 != 1 ) break; Malloc(); } if ( v3 != 2 ) exit(0); Free(); } } 3-2) Malloc() unsigned __in..
1. 문제 nc ctf.j0n9hyun.xyz 3032 1) mitigation 확인 2) 문제 확인 3) 코드 흐름 확인 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { char buf; // [rsp+0h] [rbp-40h] unsigned __int64 v5; // [rsp+38h] [rbp-8h] v5 = __readfsqword(0x28u); setvbuf(_bss_start, 0LL, 2, 0LL); puts("hello"); read(0, &buf, 0x40uLL); printf(&buf); return 0; } buf에 0x40만큼 입력을 받을 수 있음 printf(&buf)에서 fsb 취약점 발생..