teppay’s log

*について書きます

Find the flag earn swag: intigriti Twitter challenge Writeup

はじめに

  • intigritiというバグバウンティプラットフォームがTwitter上でCTF的なものを開催していたので参加してみた

Write-up

f:id:teppay:20190122145949p:plain

添付された画像

$ foremost DweADlgXgAAehHh.jpg
Processing: DweADlgXgAAehHh.jpg
|foundat=nottheflag.pdfUT
*|

$ cd output/zip/
$ unzip 00000000.zip
$ ls
00000000.zip   nottheflag.pdf

たぶん添付された画像がJPGとPDFのPolyglotのようなものだったんだと思う.

pdfの中身は以下の通り

aHR0cHM6Ly9nby5pbnRpZ3JpdGkuY29tLzA3YjBmTDI0bGttdmE= Source for this cool technique: https://twitter.com/David3141593/status/1058124224798380032

base64

$ echo aHR0cHM6Ly9nby5pbnRpZ3JpdGkuY29tLzA3YjBmTDI0bGttdmE= | base64 -D
https://go.intigriti.com/07b0fL24lkmva

アクセスしたらzipファイルdata.zipが落ちてきた ただしパスワードがかかっており開けない

ツイート

2つめのヒント

200 likes! Here's the next hint: reply, click and look up 言われた通りReplyを送ろうとして,上を見てみた f:id:teppay:20190122145550p:plain

画像を表すURLがあったのでなにも考えずクリック するといかにもなアカウントが出てきた.

f:id:teppay:20190122145740p:plain

元の問題ツイートは,他のアカウントがツイートした画像のリンクをつぶやいたものが,Twitterによって自動で展開されていたものだったことがわかる.

このアカウントのカバー画像?にzipのパスワード発見

F1nDBuGz_

zipの中身

zipを解答すると441この連番が振られたjpgファイルが出てきた f:id:teppay:20190122144818p:plain

それぞれのファイルは白一色か黒一色で,しかも441=2121 つまり2121のQRコードではないかと考えた

QR code

丁寧に番号が振られているので,以下のスクリプトで21*21になるようにつなげて,QRコードを読んでみた

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PIL import Image
from pyzbar.pyzbar import decode

def main():
    src_imgs = []
    for i in range(441):
        src_imgs.append(Image.open(f'data/1_{str(i+1).zfill(2)}.jpg'))

    src_w = src_imgs[0].width
    src_h = src_imgs[0].height

    dst_img = Image.new('RGB', (src_w*21, src_h*21))

    for i in range(441):
        idx_x = i % 21
        idx_y = int(i / 21)
        x = idx_x * src_w
        y = idx_y * src_h
        dst_img.paste(src_imgs[i], (x,y))

    dst_img.save('qr.jpg')

    data = decode(dst_img)
    print(data[0][0])


if __name__ == '__main__':
    main()

f:id:teppay:20190122145734j:plain

b'FLAG:YOUWINTIGRITI'