목록분류 전체보기 (285)
tmxklab
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..
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..
참고 : GNU C Library의 Memory Allocator인 ptmalloc2(glibc 2.23)를 대상으로 설명 이번에는 Free된 Chunk들을 다시 재활용하기 위해서 Free Chunk들을 어떻게 관리하는지 자세하게 다뤄보겠다. 0. Boundary Tag 이전 시간에 Memory Allocator소개 부분 또는 Free Chunk구조에서 잠깐 Boundary Tag가 나온 것을 보았을 것이다. 그리고 여러 개의 청크들이 생성되었을 경우 메모리에 연속적으로 위치하는 것을 보았을 것이다. 이번에는 Boundary Tag를 통해 어떻게 인접한 앞/뒤 Chunk의 주소가 계산 가능한지 알아보도록 하겠다.(fastbin은 예외) 위와 같이 p1, p2, p3에 각각 malloc을 하고 p2를 fr..
참고 : GNU C Library의 Memory Allocator인 ptmalloc2(glibc 2.23)를 대상으로 설명 지금부터는 실제로 메모리 할당 및 해제되는 공간인 청크에 관한 이야기를 시작하도록 하겠다. 중간중간에 bins에 대한 내용이 언급되는데 여기서는 그냥 free된 청크를 관리하는 정도로만 알고 넘어가자 1. Chunk 1.1 Chunk란? malloc()에 의해 메모리 할당 요청이 들어온 경우 실제로 할당받는 영역 실제로 저장되는 data와 메타 데이터가 저장된 header까지 포함 청크의 크기 : 2*sizeof(size_t) 의 배수로 할당 청크의 최소 크기 : 4*sizeof(void*) 32bit system : 8bytes 배수로 할당 64bit system : 16bytes..
이제 본격적으로 메모리 할당 및 해제하는 동작 과정과 할당되었을 때 또는 해제되었을 떄 어떠한 구조를 가지는지 등등 상세히 알아보도록 하겠다. 처음에 전체적인 동작 과정을 먼저 설명하고 싶으나 동작 과정을 이해하기 위해 Arena, bins, Chunk 등등.. 모르는 용어가 많이 나와서 각각에 대한 개념을 먼저 설명한 뒤에 전체적인 동작 과정을 설명하기로 하겠다. 0. Overview 이전에 다양한 종류의 Dynamic Memory Allocator를 잠깐 간략하게 설명하고 넘어갔을 것이다. 이처럼 힙이 작동하는 방식은 플랫폼(Windows, Linux, MacOS.. 등등)과 구현에 따라 다르며 다양한 힙 구현이 존재한다. 따라서, 모든 Memory Allocator를 설명을 할 수는 없으므로 이전에..
워 게임 문제를 풀면서 메모리 힙 관련한 취약점(use-after-free, double-free, heap overflow 등등..)을 이용한 공격에 대한 문제들이 나오면서 힙에 대한 이해의 필요성을 느끼게 되었다. 힙 기반 취약점에 대한 공격 기법은 힙 영역을 할당해주는 Dynamic Memory Allocator의 내부 구현이 어떻게 작동하는지에 대한 이해가 필요하므로 이번에 힙에 대한 전반적인 이해와 관련한 취약점이 무엇인지 공부하고 정리하기로 한다. (스택 기반 취약점보다 힙 기반 취약점을 이해하는데 상당한 시간과 노력이 필요...) 이번에 소개되는 내용은 동적 메모리를 관리하는 Dynamic Allocator에 관해 이론적인 위주로 다룰 것이다. 0. Heap 영역 들어가기전에.. 먼저, 복습..
이후에 힙 관련 취약점을 이용한 문제들이 많으므로 힙 공부를 끝낸 뒤에 풀어볼 예정이다. 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..