전체 글
-
x64 Simple_size_BOFCTF/HackCTF 2021. 1. 21. 02:00
Disassembly 디스어셈블리 undefined8 main(void) { char *s; setvbuf(_reloc.stdout, 0, 2, 0); puts("삐빅- 자살방지 문제입니다."); printf("buf: %p\n", &s); gets(&s); return 0; } s의 주소를 출력하고, s에 입력을 받는 코드이다. Stack address leak p.recvuntil("buf: ") buf = int(p.recvline()[0:18], 16) 지역 변수 s의 주소는 스택 주소를 계산하는 데 사용할 수 있다. RET Overwrite 스택 버퍼 오버플로우를 이용해 쉘코드를 스택에 삽입할 수 있고, s의 offset을 바탕으로 계산한 쉘코드의 주소로 return address를 덮으면 문제..
-
x64 Buffer OverflowCTF/HackCTF 2021. 1. 21. 01:44
Disassembly 디스어셈블리 undefined8 main(undefined8 argc, char **argv) { char **var_120h; int64_t var_114h; int64_t var_4h; var_114h._0_4_ = (undefined4)argc; func_0x00400508(0x400741, (int64_t)&var_114h + 4); var_4h._0_4_ = func_0x004004e0((int64_t)&var_114h + 4); func_0x004004e8("Hello %s\n", (int64_t)&var_114h + 4); return 0; } cutter가 디컴파일을 제대로 못하길래 pwngdb를 이용했다. 따라서 main() 에서 호출되는 세 함수는 차례로 scanf..
-
내 버퍼가 흘러넘친다!!!CTF/HackCTF 2021. 1. 21. 01:15
Disassembly 디스어셈블리 undefined4 main(void) { char *s; setvbuf(_reloc.stdout, 0, 2, 0); printf("Name : "); read(0, name, 0x32); printf("input : "); gets(&s); return 0; } 코드 영역의 name 위치에 0x32만큼 입력받고, gets를 통해 스택 버퍼 오버플로우가 발생하는 코드이다. RET Overwrite 스택 버퍼 오버플로우가 발생하므로 RET Overwrite을 시도해보자. return address를 덮을 gadget이 필요한데, 주소 name을 알고 있으므로 name에 쉘코드를 넣고 덮어쓰면 문제를 풀 수 있다. Code 더보기 from pwn import * binary..
-
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..