목록War Game (174)
tmxklab
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. 문제 nc ctf.j0n9hyun.xyz 3021 1) mitigation 2) 문제 확인 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { vulnerable_function(); write(1, "Hello, World!\n", 0xEu); return 0; } 3-2) vulnerable_function() ssize_t vulnerable_function() { char buf; // [esp+0h] [ebp-88h] return read(0, &buf, 0x100u); } read함수에서 bof발생 -> ret건드릴 수 있음 2. 접근 방법 공격 프로세스) bof를 수행하여 wri..
1. 문제 nc ctf.j0n9hyun.xyz 3020 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(stdin, 0, 2, 0); while ( 1 ) { while ( 1 ) { menu(); read(0, &buf, 4u); v3 = atoi(&buf); if ( v3 ..
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..
1. 문제 1) mitigation확인 statically linked 파일 2) 문제 확인 한 번의 입력 값을 받고 종료, rop관련 문제인듯 하다.(걍 문제이름이 simple rop이길레..) 3) 코드흐름 파악 3-1) main함수 int __cdecl main(int argc, const char **argv, const char **envp) { int v4; // [esp+1Ch] [ebp-14h] puts("ROP is easy is'nt it ?"); printf("Your input :"); fflush(stdout); return read(0, &v4, 100); } 입력을 받는 v4변수는 [ebp-0x1c]에 위치하며 read함수에서 100bytes까지 입력을 받을 수 있으므로 bof..
1. 문제 1) mitigation확인 2) 문제 확인 음,,,, segmenatation fault가 뜬 것을 보니 잘못된 주소를 참조한 것 같다. 3) 코드흐름 파악 3-1) main함수 int __cdecl main(int argc, const char **argv, const char **envp) { char **v3; // ST04_4 int v4; // ST08_4 char src; // [esp+12h] [ebp-10Eh] char buf; // [esp+112h] [ebp-Eh] _DWORD *v8; // [esp+11Ch] [ebp-4h] puts("###############################"); puts("Do you know return to library ?"); p..