본문 바로가기

writeup/Wargame

N00bCTF / File System Forensic / You Know LFN?

1. 문제 다운로드

 

 

File Name : FILE

Hash : 3D83A054D614D58E3D9E049132B47BEC0F521BE5 (SHA-1)

 

 

N00bCTF

 

wargame.ws1004.kr

 

2. 문제 풀이

 

hxd를 이용하여 파일의 데이터를 살펴봤다.

 

 

파일의 이름과 확장자를 찾아야 풀 수 있는 문제이다.

문제 이름에서 힌트를 얻어, LFN이 무엇인지 검색했다.

 

 

디렉터리 엔트리 분석 [Directory Entry Analysis]

디렉터리 엔트리는 Windows의 FAT 파일시스템에서 파일의 이름, 확장자, 위치, 크기등을 표현하기 위한 구조체입니다. 하나의 파일 및 디렉터리는 각각의 메타정보를 표현하기 위해 하나의 디렉터�

whitesnake1004.tistory.com

 

 

답을 얻기 위해서, 실질적으로 살펴봐야하는 데이터이다.

 

 

코드를 작성하고 플래그를 얻을 수 있었다.

플래그가 다 출력되고 나서 쓰레기값이 섞여나온다.

확장자까지 출력되고 난 이후의 데이터는 무시해도 된다.

 

import struct

def parseLFN(data, start) :
    #seqNum = data[start]
    name1 = data[start+1:start+11]
    #attr = data[start+11]
    #checksum = data[start+13]
    name2 = data[start+14:start+26]
    name3 = data[start+28:start+32]

    filename = list()
    filename.extend(list(struct.unpack('<HHHHH', name1)))
    filename.extend(list(struct.unpack('<HHHHHH', name2)))
    filename.extend(list(struct.unpack('<HH', name3)))
    for c in filename :
        print(chr(c),end='')



f = open("FILE", "rb")
data = f.read()
f.close()

parseLFN(data,0x80)
parseLFN(data,0x60)

 

플래그 형식에 맞춰서 데이터를 입력하면 인증이 완료된다.

 

3. 비고

 

파일시스템에 대한 공부가 부족했다는 것을 느꼈고 근 시일 내에 정리하여 포스팅해야겠다.