CTF
[hxpCTF 2020] kernel-rop (with write-up) (2)
지난 글(https://ssongkit.tistory.com/820)에 이어 남은 보호 기법인 KPTI, KASLR, FG-KASLR을 우회하는 방법을 배워보자. 1-1. Bypass KPTI: KPTI trampolineKTPI를 우회하는 방법 3가지를 공부해보자. 첫 번째는 KPTI trampoline이라고 부르는 기술이다. 커널에 빌트인으로 존재하는 기능이기 때문에 주로 쓰인다고 한다. 심볼 이름은 "swapgs_restore_regs_and_return_to_usermode"이다. 다음과 같이 주소를 검색한 뒤 vmlinux로 확인해보면 다음과 같다. / # cat /proc/kallsyms | grep swapgs_restore_regs_and_return_to_usermodeffffffff8..
[hxpCTF 2020] kernel-rop (with write-up) (1)
1. Introduction여러 보호 기법이 적용된 문제를 어떻게 풀 수 있는지 궁금했다. 그래서 찾아보다가 이 문제가 유명한 것 같아서 공부해보기로 했다.파일은 아래 링크에서 다운받을 수 있다. 여기서 중요한 파일은 vmlinuz, run.sh, initramfs.cpio.gz 이다.https://ctftime.org/task/14383 run.sh는 다음과 같으며, 보호 기법으로 smep, smap, kaslr, kpti가 설정되어 있는 것을 확인할 수 있다.qemu-system-x86_64 \ -m 128M \ -cpu kvm64,+smep,+smap \ -kernel vmlinuz \ -initrd initramfs.cpio.gz \ -hdb flag.txt \ -..

BYUCTF 2024 (Pwn)
[solved] [pwn/All]더보기int vuln(){ int result; // eax char buf[32]; // [rsp+0h] [rbp-20h] BYREF while ( 1 ) { result = strcmp(buf, "quit"); if ( !result ) break; read(0, buf, 0x100uLL); printf(buf); } return result;} bof, fsb가 발생한다.from pwn import *context.arch = 'amd64'# p = process('all')p = remote('all.chal.cyberjousting.com', 1348)p.send(b'%p.')stack = int(p.recvuntil(b'..

TBTL CTF 2024 (Pwn)
[solved] [pwn/Enough with the averages]더보기// gcc -o chall chall.c -Wextra#include #include void read_flag() { FILE* in; char flag[64]; in = fopen("flag.txt", "rt"); fscanf(in, "%s", flag); fclose(in);}void vuln() { int score[20]; int total = 0; for (int i=0; i read_flag 함수와 vuln 함수가 스택 프레임을 공유한다. vuln에선 값을 더해서 평균 값을 내고 출력해준다. scanf의 인자가 "%d"인데 문자를 넣게되면 값이 바뀌지 않고 보존된다.이를 이용해서 플래그 값을 추출해..

San Diego CTF 2024 (Pwn)
[solved] [pwn/point-plunderer]더보기int __cdecl main(int argc, const char **argv, const char **envp){ int v4; // [rsp+8h] [rbp-18h] BYREF unsigned int v5; // [rsp+Ch] [rbp-14h] BYREF unsigned int v6; // [rsp+10h] [rbp-10h] unsigned int v7; // [rsp+14h] [rbp-Ch] unsigned __int64 v8; // [rsp+18h] [rbp-8h] v8 = __readfsqword(0x28u); setvbuf(stdin, 0LL, 2, 0LL); setvbuf(_bss_start, 0LL, 2, 0LL)..