처음에는 정확히 뭘 해야 하는 문제인지 잘 이해가 가지 않아서 헤맸다. Exiftool을 처음 사용했다면 좀 어렵지 않았을까 싶다.
다음과 같은 사진(original.jpg)을 준다.
netcat으로 picoCTF에 접속해야 된다. 사진(original_modified.jpg)을 STDIN으로 입력을 받은 후 redirect 하는 걸 보아 아무래도 사진을 수정해야 할 가능성이 높아 보인다.
일단 파일을 어떻게 수정해야 할지 몰라서 주어진 파일을 가지고 netcat을 해봤다. nc -w(wait) 옵션은 몇 초동안 웹사이트와 연결을 시도할지 설정할 수 있는 옵션이다. 우리의 경우 2초 동안 접속을 시도하다가 2초가 넘어가면 connection을 끊는다.
nc -w 2 mimas.picoctf.net 60116 < original.jpg
nc mimas.picoctf.net 61940
그랬더니 시간이 Unix Time Stamp에 맞지 않는다고 알려준다.
MD5 of your picture:
06783ef2aa4460a3d267002a28ff12c6 test.out
Checking tag 1/7
Looking at IFD0: ModifyDate
Looking for '1970:01:01 00:00:00'
Found: 2023:11:20 15:46:23
Oops! That tag isn't right. Please try again.
문제 힌트를 보면 Exiftool을 사용하는 것이 좋다고 알려준다.
Exiftool은 파일의 metadata를 바꾸는 데 사용되는 open source software이다.
Metadata란 data에 대한 data로 파일의 metadata는 파일의 이름, 크기, 마지막 수정날짜, 최초 생성일 등을 가리킨다. 즉 파일에 대한 모든 정보를 가리킨다.
Exiftool이 없다면 설치하자.
sudo apt install exiftool
Checking tag 1/7
Looking at IFD0: ModifyDate
Looking for '1970:01:01 00:00:00'
Found: 2023:11:20 15:46:23
Oops! That tag isn't right. Please try again.
문제에서 ModifyDate가 맞지 않아서 날짜를 바꿔줬다.
exiftool -ModifyDate='1970:01:01 00:00:00' original.jpg
1 image files updated
그러자 파일이 두 개가 생겼다. original.jpg가 날짜를 바꾼 파일이고 original.jpg_original은 원본 파일이다.
original.jpg original.jpg_original
다시 netcat으로 picoCTF에 접속하면 이번에는 DateTimeOriginal이 맞지 않는다고 한다.
MD5 of your picture:
967339c2493951097d71a62197d764c3 test.out
Checking tag 1/7
Looking at IFD0: ModifyDate
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 2/7
Looking at ExifIFD: DateTimeOriginal
Looking for '1970:01:01 00:00:00'
Found: 2023:11:20 15:46:23
Oops! That tag isn't right. Please try again.
DateTimeOriginal도 날짜를 바꿔준 다음에 netcat으로 접속하자.
exiftool -DateTimeOriginal='1970:01:01 00:00:00' original.jpg
1 image files updated
이번에는 CreateDate가 맞지 않는다고 한다.
MD5 of your picture:
452d094b570a9829784d49af43732824 test.out
Checking tag 1/7
Looking at IFD0: ModifyDate
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 2/7
Looking at ExifIFD: DateTimeOriginal
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 3/7
Looking at ExifIFD: CreateDate
Looking for '1970:01:01 00:00:00'
Found: 2023:11:20 15:46:23
Oops! That tag isn't right. Please try again.
CreateDate도 날짜를 바꿔준 후 netcat으로 접속하자.
exiftool -CreateDate='1970:01:01 00:00:00' original.jpg
1 image files updated
이번에는 SubSecCreateDate가 맞지 않는다고 한다.
MD5 of your picture:
e7537a20fd614f08232eaa16d4f6587a test.out
Checking tag 1/7
Looking at IFD0: ModifyDate
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 2/7
Looking at ExifIFD: DateTimeOriginal
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 3/7
Looking at ExifIFD: CreateDate
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 4/7
Looking at Composite: SubSecCreateDate
Looking for '1970:01:01 00:00:00.001'
Found: 1970:01:01 00:00:00.703
Oops! That tag isn't right. Please try again
자세히 보면 SubSecCreateDate는 시간이 살짝 바뀌어서 이번에는 001을 뒤에 추가해 줘야 된다.
Looking at Composite: SubSecCreateDate
Looking for '1970:01:01 00:00:00.001'
exiftool -SubSecCreateDate='1970:01:01 00:00:00.001' original.jpg
1 image files updated
이번에는 SubSecDateTimeOriginal을 바꿔야 한다. 여기도 역시 뒤에 001이 추가되었다.
MD5 of your picture:
d392ecd311d6b55e23ad4c7295b5806f test.out
Checking tag 1/7
Looking at IFD0: ModifyDate
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 2/7
Looking at ExifIFD: DateTimeOriginal
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 3/7
Looking at ExifIFD: CreateDate
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 4/7
Looking at Composite: SubSecCreateDate
Looking for '1970:01:01 00:00:00.001'
Found: 1970:01:01 00:00:00.001
Great job, you got that one!
Checking tag 5/7
Looking at Composite: SubSecDateTimeOriginal
Looking for '1970:01:01 00:00:00.001'
Found: 1970:01:01 00:00:00.703
Oops! That tag isn't right. Please try again.
exiftool -SubSecDateTimeOriginal='1970:01:01 00:00:00.001' original.jpg
1 image files updated
이번에는 SubSecModifyDate가 맞지 않는다고 한다.
MD5 of your picture:
a87c1acbc96cb4ab0d24095ea8968835 test.out
Checking tag 1/7
Looking at IFD0: ModifyDate
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 2/7
Looking at ExifIFD: DateTimeOriginal
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 3/7
Looking at ExifIFD: CreateDate
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 4/7
Looking at Composite: SubSecCreateDate
Looking for '1970:01:01 00:00:00.001'
Found: 1970:01:01 00:00:00.001
Great job, you got that one!
Checking tag 5/7
Looking at Composite: SubSecDateTimeOriginal
Looking for '1970:01:01 00:00:00.001'
Found: 1970:01:01 00:00:00.001
Great job, you got that one!
Checking tag 6/7
Looking at Composite: SubSecModifyDate
Looking for '1970:01:01 00:00:00.001'
Found: 1970:01:01 00:00:00.703
Oops! That tag isn't right. Please try again.
SubSecModifyDate도 바꿔주면 된다.
exiftool -SubSecModifyDate='1970:01:01 00:00:00.001' original.jpg
1 image files updated
마지막으로 TimeStamp를 바꿔야 한다.
MD5 of your picture:
eb5ae92ce9f801b9d1aa8e4c800e9705 test.out
Checking tag 1/7
Looking at IFD0: ModifyDate
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 2/7
Looking at ExifIFD: DateTimeOriginal
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 3/7
Looking at ExifIFD: CreateDate
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 4/7
Looking at Composite: SubSecCreateDate
Looking for '1970:01:01 00:00:00.001'
Found: 1970:01:01 00:00:00.001
Great job, you got that one!
Checking tag 5/7
Looking at Composite: SubSecDateTimeOriginal
Looking for '1970:01:01 00:00:00.001'
Found: 1970:01:01 00:00:00.001
Great job, you got that one!
Checking tag 6/7
Looking at Composite: SubSecModifyDate
Looking for '1970:01:01 00:00:00.001'
Found: 1970:01:01 00:00:00.001
Great job, you got that one!
Checking tag 7/7
Timezones do not have to match, as long as it's the equivalent time.
Looking at Samsung: TimeStamp
Looking for '1970:01:01 00:00:00.001+00:00'
Found: 2023:11:20 20:46:21.420+00:00
Oops! That tag isn't right. Please try again.
문제는 여기서 TimeStamp를 이전 방식으로 바꿀 수가 없다. 에러 메시지도 이전과는 살짝 다르다.
Exiftool에서 -v(verbose)를 이용하면 각 단계마다 어떤 일을 하고 있는지 자세히 볼 수 있다. -v의 단계는 0(default)~ 매우 자세한 3까지 있다.
exiftool -v3 original.jpg
TimeStamp가 hex bytes로 나오는 걸로 보아서 hex editor를 이용해서 파일의 bytes를 수정해야 될 것 같다.
TimeStamp = 1700513181420
- Tag '0x0a01' (13 bytes):
2b82c4: 31 37 30 30 35 31 33 31 38 31 34 32 30 [1700513181420]
bvi를 이용해도 좋지만 개인적으로는 불편해서 이 사이트를 사용했다.
UTC_DATa 뒤에 오는 시간을 바꿔야 한다. 모두 0을 바꾸고 마지막만 1로 설정하면 된다.
31 37 30 30 35 31 33 31 38 31 34 32 30
참고로 0은 ascii hex로 30이기 때문에 0이 아닌 30으로 byte를 바꿔줘야 한다. 마지막 1도 마찬가지로 31로 바꿔주면 된다.
In [1]: hex(ord('0'))
Out[1]: '0x30'
바꾼 bytes는 노란색으로 보여준다.
수정한 파일을 내보내기로 저장한 후 다시 picoCTF에 netcat을 하면 flag가 나온다.
MD5 of your picture:
412331ca77b633d2529dc0e0ab5ad6eb test.out
Checking tag 1/7
Looking at IFD0: ModifyDate
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 2/7
Looking at ExifIFD: DateTimeOriginal
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 3/7
Looking at ExifIFD: CreateDate
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 4/7
Looking at Composite: SubSecCreateDate
Looking for '1970:01:01 00:00:00.001'
Found: 1970:01:01 00:00:00.001
Great job, you got that one!
Checking tag 5/7
Looking at Composite: SubSecDateTimeOriginal
Looking for '1970:01:01 00:00:00.001'
Found: 1970:01:01 00:00:00.001
Great job, you got that one!
Checking tag 6/7
Looking at Composite: SubSecModifyDate
Looking for '1970:01:01 00:00:00.001'
Found: 1970:01:01 00:00:00.001
Great job, you got that one!
Checking tag 7/7
Timezones do not have to match, as long as it's the equivalent time.
Looking at Samsung: TimeStamp
Looking for '1970:01:01 00:00:00.001+00:00'
Found: 1970:01:01 00:00:00.001+00:00
Great job, you got that one!
You did it!
picoCTF{71m3_7r4v311ng_p1c7ur3_a4f2b526}
Time travelling picture (시간 여행을 하는 사진)이라는 뜻의 flag가 나왔다.
picoCTF{71m3_7r4v311ng_p1c7ur3_a4f2b526}
'picoCTF' 카테고리의 다른 글
Dear Diary (0) | 2024.11.14 |
---|---|
Who are you? (3) | 2024.11.09 |
No Sql Injection (4) | 2024.11.07 |
ASCII Numbers (3) | 2024.11.06 |
weirdSnake (0) | 2024.11.06 |