Description
Category: Misc/JPEG
Source: SECCON CTF 2017 Quals.
Points: 60
Author: Jisoon Park(js00n.park)
Description:
Read this JPEG is broken. It will be fixed if you change somewhere by 1 bit.
source : SECCON CTF 2017 Quals.
Write-up
멀쩡한 jpeg 파일에서 1 bit를 수정했다고 한다. 수정으로 인한 curruption이 발생했을지 확인하기 위해 적당한 jpeg 파일 검사기를 찾아본다.
jpeg 파일을 검수해주는 프로그램은 여러가지가 있는데, 그 중에 가장 먼저 눈에 띈 jpeginfo를 받아서 빌드하였다.
jpeginfo를 이용해서 주어진 jpeg 파일을 테스트 해보면 에러메세지가 출력되는 것을 볼 수 있다.
파일의 처음부터 1 bit씩 바꾼 임시 파일을 만들어서 에러메세지가 발생하지 않는 파일을 찾는 프로그램을 작성하였다.
import subprocess
import os
data = open("tktk", "rb").read()
for i in xrange(0, len(data) * 8):
block = i / 8
index = i % 8
new = chr(ord(data[block]) ^ (1 << index))
fn = "tktk" + str(i)
f = open(fn, "wb")
f.write(data[0:block])
f.write(new)
f.write(data[block + 1:])
f.close()
cmd = "./jpeginfo -c " + fn + "; exit 0"
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
if (output[-8:-1] == "[ERROR]"):
os.system("rm " + fn)
else:
print str(i) + " is ok!"
if (i % 1000 == 0):
print str(i)
실행시켜 보면, 검사에 걸리지 않는 파일이 10여개 정도 찾아지는데, 그 중에 아무거나 열어보면 플래그 이미지를 확인할 수 있었다.
Flag : SECCON{jp3g_study}
'writeups > Coding|misc.' 카테고리의 다른 글
plz variable (0) | 2019.11.25 |
---|---|
input (0) | 2019.11.25 |
algo-auth (0) | 2019.11.25 |
PWN (0) | 2019.11.23 |
Run me! (0) | 2019.11.23 |