CTF/포렌식

[Tenable CTF] Look at all the pixels, where do they all come from - 포렌식 / PIL

SecurityMan 2023. 4. 10. 11:00

 

PIL 라이브러리를 이용해 풀 수 있는 포렌식 문제

 

문제 제목이 참 장황하다.

 

문제 제목에서 pixel 이라는 단어를 통해 간접적으로 힌트를 주고 있다.

 

반응형

 

 

문제에서 제공되는 pip.png 파일은 이렇게 생겼다.

 

369 * 369 사이즈의 노이즈 처럼 생긴 사진이다.

 

아까 언급한것 처럼

 

이번 문제는 Python PIL 라이브러리를 이용해서 풀었다.

PIL은 Python Imaging Library의 약자로

파이썬으로 이미지 처리를 할 수 있도록 해주는 라이브러리이다.


pip install image

pip install pillow

두 명령어를 이용해서 다운로드 받아주면 된다.

 

from PIL import Image

img = Image.open('pip.png').convert('RGB')

xlen = 369
ylen = 369

data = ''

for y in range(ylen):
	for x in range(xlen):
		r,g,b = img.getpixel((x,y))
		data += hex(r) + ' ' + hex(g) + ' ' + hex(b) + ' '

print(data)

 

문제에서 pixel 이라고 힌트를 줬으니

 

각 픽셀의 r g b 값을 모두 뽑아 어떤 데이터가 있는지 대충 살펴봤다.

 

위와 같이 코드를 짜도 실행시켜보니

 

 

맨 앞부분이 89 50 4E 47 이라고 나왔다.

 

 

89 50 4E 47로 시작하는것은 PNG 파일의 특징이다.

 

이런걸 파일 시그니처 라고 한다.

 

PNG 파일의 로우데이터를 

 

픽셀의 RGB 값으로 바꿔서 숨겨놓은 것이다.

 

 

해당 코드를 실행한 결과를 data 라는 파일명으로 저장하고

 

 

CyberChef(https://gchq.github.io/CyberChef/) 에 해당 파일을 집어넣은 뒤

 

From Hex 레시피를 추가하고

 

저장 버튼을 눌러 png 파일로 저장하면

 

 

귀여운 비모 사진과 함께 플래그가 나온다.

반응형