UoJ
"WHITE SPACE" Write-up 본문
이번 과제이다.
과제와 같이 온 파일을 다운 받는다.
먼저 zip 파일 압축을 풀어준다.
압축 파일을 풀어주니 보이는 jpg 파일이다.
확장자가 jpg인 파일인데, 지원되지 않는 형식의 파일이라며 이미지가 보이지 않는다.
제일 먼저, HxD로 파일을 열어보았다.
지금까지 hawkis ctf를 풀면서 해보았던 "flag" "hawkis" 등 여러 키워드를 넣어보았다.
hawkis 키워드는 찾았지만 명확하게 flag라고 보일만한 글자는 없었다.
파일 시그니처
-> 파일 형식마다 가지고 있는 고유의 특징, 즉 포맷에 대한 정보이다.
파일의 형식마다 정해져 있는 특정한 byte들이다.
여기서 또 떠오른게 있다. 바로 파일 시그니처이다.
파일 시그니처와 관련하여 예전에 과제하면서 정리한 블로그가 있다.
jpg만 정리하였지만, 파일 시그니처와 스테가노그래피와 관련하여 정리하였다.
(비밀번호는 설정되어있지 않다.)
문제에서 주어진 여러 개의 Flag 찾고, 사용된 기법 찾기
이번 과제는 이미지 파일과 텍스트 파일에 주어진 flag를 찾는 것이다. 먼저, 텍스트 파일을 열어본다. 열어보려고 하니 파일 두개 다 암호가 걸려있다. 암호를 풀어보려 구글링을 열심히 해보았
kujy.tistory.com
먼저 jpg의 헤더와 푸터 시그니처를 검색해보았다.
이렇게 찾아보았는데, 헤더 시그니처는 없고, 푸터 시그니처만 있으니 jpg 파일이 아니어서 파일 형식이 지원되지 않는다고 했던 것 같다.
혹시 몰라 다른 이미지 파일인 png도 찾아보았다.
png 헤더 시그니처 | png 푸터 시그니처 |
89 50 4E 47 0D 0A 1A 0A | 49 45 4E 44 AE 42 60 82 |
jpg와 png 모두 헤더 시그니처는 없지만 푸터 시그니처만 있다.
여기서 이상한 점이 있다.
이 파일은 jpg 파일이라고 되어있지만, 파일의 맨 앞 부분에 16진수로 "50 4B 03 04"라고 되어있다.
이 16진수는 zip 파일의 헤더 시그니처이다.
zip 헤더 시그니처 | zip 푸터 시그니처 |
50 4B 03 04 | 50 4B 05 06 |
혹시 몰라서 zip 파일의 푸터 시그니처도 찾아보았다.
찾아보니 헤더와 푸터 시그니처 모두 존재함을 확인하였다.
jpg 파일임에도 지원되지 않는 형식인 이유가 zip 파일의 data를 가지고 있었기 때문이다.
그래서 헤더 시그니처와 푸터 시그니처의 데이터 값을 복사하여 abc라는 새로운 zip 파일을 만들었다.
이렇게 새로운 파일이 하나 만들어졌다.
이 파일을 들어가본다.
압축파일을 풀어준 뒤,
파일에 들어가줬더니, txt 파일과 jpg 파일이 보인다.
먼저 txt 파일에 들어가보았다.
어떤 멘트가 써져있는데, 대충 해석해보니,
"이 문제를 풀고싶으면, whtie.jpg에 있는 비밀번호를 먼저 찾아라" 라고 한다.
근데 여기서 이상한 점은, 습관처럼 빈 곳을 클릭했더니, 공백이 보여졌다.
이건 또 뭐지...? 싶던 찰나, white space라는 것을 얼핏 본 적이 있다.
과제 이름도 마침 whtie space라 문득 떠올랐다.
바로 구글링에 들어가보았다.
white space 즉, 흰색 공백은 공백 부분에 데이터를 은닉하는 스테가노그래피 기법으로, 데이터를 눈에 보이지 않게 숨기는 기법을 말한다.
HxD에 파일을 열어보니 공백부분이 사진과 같이 보이는것을 알 수 있다.
구글링 해보았더니, whitespace steganography라고 검색하면 디코딩 사이트가 뜨는데, 공백을 한번 해석해보았다.
이렇게 해보았는데, dCode whitespace라고만 뜰 뿐, 딱히 해석이 되는 것 같지는 않았다.
아까 압축파일을 푼 후에 보이는 파일 중 txt 파일과 또 다른 jpg 파일이 하나 있는 것을 확인하였다.
케로로?? 이다...
파일을 한번 HxD에 열어보았다.
이번에는 처음부터 보이는 16진수가 jpg 헤더 시그니처라는 것을 바로 확인할 수 있었다.
이에, 푸터 시그니처도 한번 확인을 해보았다.
푸터 값이 총 3개가 있어버리기에, jpg 파일은 아닐 거라는 생각이 들었다.
그래서 다른 이미지 파일인 png를 찾아보았다.
헤더 시그니처 결과
푸터 시그니처 결과
온전한 헤더와 푸터 시그니처를 찾아볼 수 있었다.
이제 이 데이터 값들을 복사하여 새로운 파일을 만들어본다.
파일 이름은 kkk로 해주었다.
하얀 공간이 있는 이미지 파일이다.
이렇게 만든 파일이다.
지금까지 jpg 파일 안에서 zip파일과 zip파일 안에서 png 파일을 찾을 수 있었다.
여기서 혹시 몰라 hawkis와 flag를 검색해보았다.
찾을 수 없었다.
또 png 파일 안에 다른건 있지 않을까, zip파일과 jpg 파일의 시그니처도 찾아보았다.
하지만 보이지 않았다.
아마 png 파일이 마지막인 것 같다.
HxD를 계속 찾아보아도 별다른 점이 없어보여서, 다른 툴을 썼다.
저번 ctf를 풀 때 썼던 툴인데, 스테가솔브라는 툴이다.
ctrl+o 단축키를 이용하여 kkk.png 파일을 열어준다.
여기 분석 탭에서 데이터 추출을 클릭한다.
그럼 이 화면이 보인다.
여기서 저번에 작성해두었던 티스토리를 참고하여 이 툴을 사용해봤다.
Dreamhack Wargame Basic_Frensics_1 Write-Up
kujy.tistory.com
RGB를 각각 선택해준 후 프리뷰를 클릭하니 나온 문자열이다.
password is "white"
아까 메모장에 써져있던, 문장에 대한 답인가보다.
"If you want to solve the problem, find the password in white.jpg first"
여기서 구글링을 몇 번 하다보니, 공백으로 되어있는 whitespace를 복호화해주는 툴이 있는 것 같았다.
[The SNOW Home Page]라는 사이트에서 snow.exe 툴을 다운 받아준다.
http://www.darkside.com.au/snow/
The SNOW Home Page
The SNOW Home Page Whitespace steganography The program SNOW is used to conceal messages in ASCII text by appending whitespace to the end of lines. Because spaces and tabs are generally not visible in text viewers, the message is effectively hidden from ca
darkside.com.au
여기서 자신의 운영체제에 맞게 다운로드를 받아준다.
나는 snwdos32.zip으로 다운 받았다.
압축파일이므로 압축을 풀어주고, snow.exe 실행파일을 실행해주었다.
실행 시에는 폴더에서 우클릭을 한 후, 터미널을 열어줘야 한다.
snow.exe 파일을 실행할 때는 명령어가 있다.
-> snow.exe -C [filename]
이런식으로 명령어를 입력해준다.
명령어를 찾아보았는데, -C라는 옵션은 왜 넣어줘야 하는지 아직까지 이유를 찾지 못했다.
그냥 넣으라니까 넣긴 했는데... 나중에 여유가 나면 제대로 찾아봐야겠다.
파일은 시그니처를 따와서 만든 파일에서 나온 hawkis.txt 파일로 실행을 해줄 것이다.
공백 문자를 해독하기 위함이다.
파일을 실행해 준 결과, 파일을 찾을 수 없다고 뜨며, 명령어 또한 잘못 입력하였다.
.\를 입력해주어야 한다.
snowdos 파일에 다시 hawkis.txt 파일을 넣어준 후, .\ 명령어를 제대로 입력해보겠다.
파일을 넣어주고, 터미널을 연다.
무엇인가가 떴다.
하지만 처음 보는 fol- boa Eu tarXrat이며, 그 뒤 문구는 Mah nd3, 경고 : 압축되지 않은 나머지 3비트 값
nd3는 아마 노드를 뜻하는 것 같다.
fol- ba Eu tarXrat이 무엇인지 몰라 구글링을 해보았다.
아무런 결과도 얻지 못했다.
결국엔 압축되지 않은 나머지 3비트 값의 경고만 남았다.
아마 추측하기로는 jpg안에 zip과 png 파일을 말하는 것 같다.(?)
powershell에서는 매번 .\를 입력해줘야 해서 cmd창에서 경로를 설정해주고 실행해보기로 했다.
일반 cmd 실행
경로 설정
똑같은 경고문이 뜬다.
아무래도 -C 옵션이 하나만 있을 것 같지 않아서 snow.exe 명령어를 -help 명령어를 통해 알아보았다.
-C
-Q
-S
-p passwd
-l line-len
-f file | -m massage
여기서 -p passwd는 말 그대로 파일의 암호를 입력하는 것 같다.
-l line-len는 파일의 라인 길이?를 나타내고,
-f file | -m message는 파일의 메세지, 내용을 나타내는 것 같다.
여기서 우리는 파일의 암호를 알고 있다. "white"
이것을 이용하여 hawkis.txt 파일의 암호를 알아내야한다.
snow.exe -C filename의 기본 명령어에
-C 옵션 뒤에 패스워드 옵션을 추가해주고, passwd 부분에 white를 입력해준다.
후에 filename인 hawkis.txt를 붙여주었더니, 플래그가 나왔다.!!
flag : hawkis{this_is_white_space}
사실 여기까지 올 때, 많은 삽질을 하였다...
whitespace 복호화 사이트를 정말 많이 찾아보았다.
https://watchout31337.tistory.com/225
스테가노그래피 복호화 사이트
https://stylesuxx.github.io/steganography/ https://29a.ch/photo-forensics/#forensic-magnifier
watchout31337.tistory.com
https://stylesuxx.github.io/steganography/
Steganography Online
Encode message To encode a message into an image, choose the image you want to use, enter your text and hit the Encode button. Save the last image, it will contain your hidden message. Remember, the more text you want to hide, the larger the image has to b
stylesuxx.github.io
(snow.exe 툴을 쓰는 법을 참고한 사이트이다.)
https://swfs-swuforensics.tistory.com/m/736
[ctf-d] Find Key(Hash)
1팀 김나연 다운 받은 apocalypse.txt 이다. HxD로 해당 파일을 열어보았다. HxD로 열었을 때 보이는 공백 부분은 whitespace steganography라고 한다. ※Whitespace Steganography: 탭과 공백을 추가하여 텍스트 파일
swfs-swuforensics.tistory.com
사이트를 이렇게 알아보았지만, 결국엔 passwordis"white"만 뜰 뿐, 플래그는 나오지 않았다.
그래서 툴(snow.exe)을 써야겠다고 생각을 했던 것이다.
또한 png 파일을 분석하면서 알아보았는데, 구글링을 하면서 "청크"라는 것을 새로 알게 되었다.
밑 사진을 보면 IHDR이라는게 있는데, 이는 Image Header라는 의미로, 이미지에 대한 기본 정보가 존재한다는 뜻이다.
IHDR 청크
- 00 00 00 0D : 청크 데이터 길이(4Byte)
- 49 48 44 52 : 청크 종류(4Byte)
- 00 00 0B C0 : 가로 크기(4Byte)
- 00 00 0F C0 : 세로 크기(4Byte)
- 08 : bit depth(1Byte)
- 06 : color type(1Byte)
- 00 : 압축 여부(1Byte)
- 00 : filter(1Byte)
- 00 : interlace(1Byte)
- A0 1B 1A 42 : CRC. 순환 중복 검사로, 데이터의 오류를 확인(4Byte)
그래서 초반에 png 파일을 어떻게 해야 하나 싶어서 이 부분을 수정해야 하나 싶었다.
물론 수정을 하니 사진이 다시 지원되지 않는 형식으로 뜨며 보이지 않았다.
사실 png 파일을 분석하는게 아닌데 혹~~시 몰라서 해보았다.
whitespace를 복호화하는 과정에 있어 삽질 시간이 너무 길었다.
나머지 분석하고 싶었던것들은 여유가 나면 정리해볼 생각이다.
'HawkIS' 카테고리의 다른 글
Suricata를 이용한 xerosploit Dos 공격 탐지 (0) | 2023.12.07 |
---|---|
[HawkIS] main.exe write-up (0) | 2023.11.09 |
[필수 과제 - ①] - "Selenium" (0) | 2023.07.05 |
[필수 과제 - ⑤] - "Babysheets" (0) | 2023.07.05 |
[필수 과제 - ②] - "하위" (0) | 2023.07.05 |