1. 문제 정보
1) 목표
- flag.txt를 반복적으로 디코딩하여 flag를 찾아라
2) 정보
- 주소 :
ctf:redraccoon.kr
- 포트 :
31338
- 유저 이름 :
rcity8
- 비밀번호 : 이전 파일 flag
2. 문제 풀이
1) flag.txt 파일 분석
flag.txt 파일 확인
cat flag.txt
해봤을 때, base64로 인코딩된 문자열들이 많이 있는 것을 알 수 있다.
- 힌트를 통해서 디코딩한 결과를 다시 디코딩하고, 그 결과를 다시 디코딩해서 flag 라는 문자열이 나올 때까지 디코딩해야 하는 것을 알 수 있다.
2) 반복 디코딩
셸 스크립트 작성
#!/bin/bash
# 안내 사항에 파일 생성 시 /tmp 디렉토리에 생성하라고 했으므로 파일을 옮긴다.
cp /home/rcity8/flag.txt /tmp/abc/flag.txt
# 실행을 위해서 권한을 변경해준다.
chmod 777 /tmp/abc/flag.txt
# 반복해서 사용할 값이므로 변수에 저장해준다. 여기서는 디코딩의 대상 파일
file="/tmp/abc/flag.txt"
# while true로 작성하는 경우 무한 루프로 동작한다.
while true; do
# 파일이 제대로 디코딩 되었는 지 확인하기 위해 md5 해시 값을 출력하여 확인
checksum=$(md5sum "$file" | awk '{ print $1 }')
echo "$checksum"
# 해당 파일을 base64 디코딩 해준다.
a=$(base64 -d /tmp/abc/flag.txt)
# 디코딩한 값을 다시 원래 파일에 넣어준다.
echo "$a" > /tmp/abc/flag.txt
# 해당 파일의 결과에 flag: 라는 문자열이 있는 지 확인해본다.
b=$(cat /tmp/abc/flag.txt | grep -C 2 "flag:")
# 있다면 문자열을 주변 2줄을 출력한다.
if [ -n "$b" ]; then
echo $b
break
fi
done
결과 확인