목록War Game/hitcon training (15)
tmxklab
1. 문제 1) mitigation확인 2) 문제 확인 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { __int64 v3; // rax int v4; // [rsp+4h] [rbp-Ch] unsigned __int64 v5; // [rsp+8h] [rbp-8h] v5 = __readfsqword(0x28u); setvbuf(stdout, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 2, 0LL); std::operator
1. 문제 1) mitigation확인 2) 문제 확인 3) 코드흐름 파악 3-1) main() int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { int v3; // eax char buf; // [rsp+0h] [rbp-10h] unsigned __int64 v5; // [rsp+8h] [rbp-8h] v5 = __readfsqword(0x28u); setvbuf(stdout, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 2, 0LL); while ( 1 ) { while ( 1 ) { menu(); read(0, &buf, 8uLL); v3 = atoi(&buf); if ( v3 != 3 ) br..
1. 문제 1) mitigation확인 2) 문제 확인 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { char buf; // [rsp+0h] [rbp-10h] unsigned __int64 v4; // [rsp+8h] [rbp-8h] v4 = __readfsqword(0x28u); setvbuf(_bss_start, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 2, 0LL); while ( 1 ) { menu(); read(0, &buf, 4uLL); switch ( atoi(&buf) ) { case 1: create_heap(); break; case 2: edit_hea..
이번에는 Free된 Chunk를 검증하지 않아 Double Free Bug가 발생하게 되어 fastbin dup를 이용한 문제풀이를 하겠다. 1. 문제 1) mitigation확인 2) 문제 확인 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { char buf; // [rsp+10h] [rbp-20h] unsigned __int64 v4; // [rsp+28h] [rbp-8h] v4 = __readfsqword(0x28u); init(argc, argv, envp); while ( 1 ) { menu(); read(0, &buf, 8uLL); switch ( (unsigned __int64)(..
UAF(Use After Free)이후로 이번 문제를 풀면서 새로운 Heap Exploit기법 두 가지(House Of Force, Unsafe Unlink)를 배웠는데 따로 자세하게 정리하도록 하겠다. 1. 문제 1) mitigation확인 2) 문제 확인 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { void (**v3)(void); // [rsp+8h] [rbp-18h] char buf; // [rsp+10h] [rbp-10h] unsigned __int64 v5; // [rsp+18h] [rbp-8h] v5 = __readfsqword(0x28u); setvbuf(stdout, 0LL..
이번 문제는 힙을 공부한 이후로 처음으로 힙 관련 문제가 나왔다. UAF(Use After Free) 처음 힙 관련 문제를 푸는 것인만큼 상세하게 분석하고 어느 부분에서 취약점이 발생하는지 자세하게 다루도록 하겠다. 1. 문제 1) mitigation확인 2) 문제 확인 3) 코드흐름 파악 3-1) main함수 int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { int v3; // eax char buf; // [esp+8h] [ebp-10h] unsigned int v5; // [esp+Ch] [ebp-Ch] v5 = __readgsdword(0x14u); setvbuf(stdout, 0, 2, 0); setvbuf..
1. 문제 1) mitigation확인 2) 문제 확인 입력한 값을 다시 에코한다. 3) 코드흐름 파악 3-1) main함수 int __cdecl main(int argc, const char **argv, const char **envp) { setvbuf(stdout, 0, 2, 0); return play(); } 3-2) play함수 int play() { puts("====================="); puts(" Magic echo Server"); puts("====================="); return do_fmt(); } 3-3) do_fmt함수 int do_fmt() { int result; // eax while ( 1 ) { read(0, buf, 0xC8u); r..
1. 문제 1) mitigation확인 2) 문제 확인 3) 코드흐름 파악 3-1) main함수 int __cdecl main(int argc, const char **argv, const char **envp) { char buf; // [esp+Ch] [ebp-10Ch] unsigned int v5; // [esp+10Ch] [ebp-Ch] v5 = __readgsdword(0x14u); setvbuf(_bss_start, 0, 2, 0); puts("Please crax me !"); printf("Give me magic :"); read(0, &buf, 0x100u); printf(&buf); if ( magic == 0xDA ) { system("cat /home/craxme/flag"); }..
1. 문제 1) mitigation확인 2) 문제 확인 이름을 입력받고 패스워드를 입력받았는데 프로그램이 종료된다. 아마도 알맞은 패스워드를 입력해야 할 것 같다. 3) 코드흐름 파악 3-1) main함수 int __cdecl main(int argc, const char **argv, const char **envp) { unsigned int v3; // eax int fd; // ST14_4 char nptr; // [esp+8h] [ebp-80h] char buf; // [esp+18h] [ebp-70h] unsigned int v8; // [esp+7Ch] [ebp-Ch] v8 = __readgsdword(0x14u); setvbuf(_bss_start, 0, 2, 0); v3 = time(0)..
1. 문제 1) mitigation확인 2) 문제 확인 3) 코드흐름 파악 3-1) main함수 int __cdecl main(int argc, const char **argv, const char **envp) { char buf; // [esp+0h] [ebp-28h] if ( count != 1337 ) exit(1); ++count; setvbuf(_bss_start, 0, 2, 0); puts("Try your best :"); return read(0, &buf, 0x40u); } count변수는 bss영역에 존재 2. 접근 방법 이전에 LAB4와 비슷하긴 한데 문제는 입력 값을 한 번밖에 받을 수 없으니 주소 값을 leak하여 libc base주소를 알아낼 수는 있으나 system함수와 bi..