워게임/HackTheBox

[HackTheBox] USB Ripper - 포렌식 / Python

SecurityMan 2023. 3. 23. 11:00

 

EASY 난이도의 포렌식 문제

 

sysadmin 으로서 누군가가 USB 를 이용해

 

중요 정보를 가지고 나간걸 찾아내라고 한다.

 

반응형

 

문제힌트도 함께 주어진다.

 

once you find it, "crack" it

 

잘 기억해 둔다.

 

문제 파일로는 두개의 파일이 주어진다.

 

 

첫번째 파일은 syslog 파일이다.

 

일부만 가져왔는데

 

파일 크기가 무려 90만줄이다..

 

USB를 연결할 때마다

 

해당 USB의 Product, Manufacturer, SerialNumber 를 로그로 남기는듯 하다.

 

 

두번째로 주어지는 파일은 auth.json 파일이다.

 

이 파일에는 json 형태로 

 

인가된 USB의 Product, Manufacturer, SerialNumber 값을 저장하고 있다.

 

syslog 에서 식별된 값이 auth.json 에도 들어있어야 인가된 USB 라고 판단하는듯 하다.

 

이 파일은 30만줄이 넘는다.

 

이것도 참 문제다 인가된 USB가 30만개가 넘다니..

 

([a-zA-Z][a-zA-Z][a-zA-Z]).........................................usb.[1-9]-1:

 

크게 의미없는 작업이긴 하지만

 

syslog 파일 용량이 너무 커서 조금 정제해줬다.

 

 

이렇게 정규식 표현을 이용하면

 

앞에 날짜와 시간같은 정보들을 모두 날리고 

 

로그파일이 Product, Manufacturer, SerialNumber 로 시작할 수 있게금 바뀐다.

 

import json

index = 1

with open('auth.json') as json_file:
    json_data = json.load(json_file)
    f = open('syslog','r')
    
    res = f.readline()

    while True:
        index += 1
        print(index)
        res = f.readline()
    
        if "Product:" in res:
            tmp = res.split(' ')
            ans = tmp[3][:-1]

            if ans not in json_data['prod']:
                print(ans, 'not found')
                break
            
        elif "Manufacturer:" in res:
            tmp = res.split(' ')
            ans = tmp[3][:-1]

            if ans not in json_data['manufact']:
                print(ans, 'not found')
                break
            
        elif "SerialNumber:" in res:
            tmp = res.split(' ')
            ans = tmp[3][:-1]

            if ans not in json_data['serial']:
                print(ans, 'not found')
                break

 

문제푸는 코드는 Python 을 이용해 작성했다.

 

syslog 파일을 readline() 으로 한줄씩 읽어서

 

Product:, Manufacturer:, SerialNumber: 라는 단어가 해당 줄에 있을경우

 

잘라와서 그 값을 ans 라는 변수 저장한다.

 

그리고 그 값이 json 파일에 있는지 검색하고,

 

없으면 not found 를 출력한다.

 

 

30만줄쯤 가다보면 not found 가 하나 출력된다.

 

알수없는 값이 포함되어 있는데

 

맨 처음 힌트인 "crack" 을 기억하자.

 

 

출력된 값이 32글자라서 MD5 알고리즘일거라고 생각했다.

 

온라인 MD5 Decrypt 사이트에서 해당 해시값을 크랙할 수 있다.

 

크랙해서 나온 값이 플래그이다.

반응형