CTF
-
Problemset 문제 모음CTF/PWNABLE 2021. 1. 21. 00:45
Syscall [HackCTF] Register Writeup [pwnable.tw] orw Writeup Buffer Overflow [HackCTF] Basic_BOF #1 [HackCTF] Basic_BOF #2 [HackCTF] Poet [HackCTF] j0n9hyun's secret Writeup [HackCTF] Beginner_Heap Writeup Format String Bug [HackCTF] Basic_FSB [HackCTF] Gift [HackCTF] You are silver [0x41414141 CTF] The Pwn Inn Writeup RET Overwrite [HackCTF] 내 버퍼가 흘러넘친다!!! [HackCTF] x64 Buffer Overflow [HackCTF]..
-
Basic_BOF #2CTF/HackCTF 2021. 1. 21. 00:39
Disassembly 디스어셈블리 undefined4 main(void) { undefined auStack148 [4]; char *s; code *pcStack20; int32_t var_ch; undefined *puStack12; int32_t var_4h; puStack12 = &stack0x00000004; pcStack20 = sup; fgets(auStack148, 0x85, _reloc.stdin); (*pcStack20)(); return 0; } main() 함수를 살펴보면 auStack148에 0x85만큼 입력받고 pcStack20에 적힌 주소로 점프한다. void shell(void) { system("/bin/dash"); return; } 따라서 pcStack20의 값을 she..
-
Basic_BOF #1CTF/HackCTF 2021. 1. 21. 00:31
Disassembly 디스어셈블리 undefined4 main(void) { undefined auStack60 [4]; char *s; int32_t iStack20; uint32_t var_ch; undefined *puStack12; int32_t var_4h; puStack12 = &stack0x00000004; iStack20 = 0x4030201; fgets(auStack60, 0x2d, _reloc.stdin); printf("\n[buf]: %s\n", auStack60); printf("[check] %p\n", iStack20); if ((iStack20 != 0x4030201) && (iStack20 != -0x21524111)) { puts("\nYou are on the right..
-
int_overflowCTF/XCTF 2021. 1. 21. 00:08
Disassembly 디스어셈블리 undefined4 main(void) { char **ppcVar1; char *pcStack48; int32_t *piStack44; undefined4 uStack36; undefined auStack32 [12]; int32_t iStack20; int32_t var_ch; undefined *puStack12; int32_t var_4h; puStack12 = &stack0x00000004; piStack44 = (int32_t *)0x0; pcStack48 = _reloc.stdin; setbuf(); piStack44 = (int32_t *)0x0; pcStack48 = _reloc.stdout; setbuf(); piStack44 = (int32_t *)0..
-
Introduction to pwnable 시스템해킹 개론CTF/PWNABLE 2021. 1. 20. 01:03
Roadmap 로드맵 Tutorial 사전 준비 WSL2 : Linux용 Window 하위 시스템 Basic Linux instructions : wargame을 통해 Linux 명령어 익히기 Assembly Language : 어셈블리어에 대해 이해하기 Shellcode : 시스템해킹의 최종 목적인 쉘과 이를 실행시키는 쉘코드에 대해 이해하기 Stack Frame : 스택 영역의 구조와 작동 방식에 대해 이해하기 pwntools : 시스템해킹에 사용하기 위한 python 라이브러리 pwngdb : 시스템해킹에 사용하기 위한 GNU 디버거 Basic exploitations Memory Mitigation : 메모리 보호기법에 대해 이해하기 RET Overwrite : 버퍼 오버플로우를 이용해 스택의 r..
-
Memory Mitigation 메모리 보호기법CTF/KNOWLEDGE 2021. 1. 19. 02:28
PRELIMINARY 서론 시스템해킹을 공부하다 보면 다양한 공격 방법과 이를 방어하기 위한 보호 기법의 변천사에 대해 알 수 있다. 각각의 공격 방법이 성립하는 조건과 원리에 대해 이해하는 것은 매우 중요하며, 이를 알기 위해서는 보호 기법에 대한 이해 또한 필수적이다. pwnable을 하면서 만나게 되는 다양한 보호 기법들과 이에 대한 우회 방법에 대해 정리해보자. 보호 기법이 방지하는 공격 기법들은 붉은색, 우회 방법은 초록색으로 표기하였다. ASLR(Address Space Layout Randomization) ASLR 보호기법은 공유 라이브러리, 스택 및 힙이 매핑되는 메모리 영역의 주소를 임의로 배치한다. 그 이유는 공격자가 코드를 작성할 때 payload가 어느 위치에 삽입되야 하는지를 미..
-
RTL(Return-to-libc)CTF/PWNABLE 2021. 1. 16. 03:55
Constraint 제약 조건 Libc base address(라이브러리에 존재하는 gadget을 사용하기 위해) Stack buffer overflow(지역 변수에서의 overflow를 이용해 ret를 gadget의 주소로 조작) Function Epilogue(함수가 exit(0)등을 통해 종료될 경우 ret을 호출하지 않으므로) PRELIMINARY 서론 NX bit(No-eXecute bit)는 실행해야 할 명령어가 존재하는 코드 영역과 데이터가 저장되는 영역의 실행 권한을 분리하고자 도입된 기술이다. NX 특성으로 지정된 메모리 영역은 데이터 저장을 위해서만 사용되므로 buffer overflow를 통한 공격을 어렵게 한다. 위와 같이 NX bit가 적용된 바이너리를 vmmap을 통해 분석해 본..
-
level2CTF/XCTF 2021. 1. 16. 03:15
Disassembly 디스어셈블리 주어진 바이너리 파일을 Cutter를 사용해 분석하면, 디컴파일이 깔끔하게 되었기에 코드를 쉽게 파악할 수 있다. undefined4 main(void) { int32_t var_4h; vulnerable_function(); system("echo \'Hello World!\'"); return 0; } void vulnerable_function(void) { int32_t var_88h; system("echo Input:"); read(0, &var_88h, 0x100); // Stack buffer overflow return; } main 함수에서 vulnerable_function을 호출하고, 이 함수에서 Stack buffer overflow가 발생한다. ..