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

+ Recent posts