CTF After Dark - Fall 2022 Writeup

この大会は2022/11/17 12:00(JST)~2022/11/24 12:00(JST)に開催されました。
今回は個人で参戦。結果は535点で390チーム中17位でした。
解けた問題をWriteupとして書いておきます。

Laws of Aviation (scripting 10)

script1.txtとscript2.txtのdiffを取る。

$ diff script1.txt script2.txt 
2908c2908
< A lot of ads.
---
> A lot of adsf.
3211c3211
< and then ecstasy!
---
> and then ecstasyl!
3257c3257
< Right. Bees don't smoke.
---
> Right. Bees don't smoake.
3333c3333
< But you can't! We have a terrific case.
---
> Butg you can't! We have a terrific case.
3432c3432
< Barry, how much honey is out there?
---
> Barry, {how much honey is out there?
3517c3517
< Mr. Buzzwell, we just passed three cups,
---
> Mr. Buzzhwell, we just passed three cups,
3646c3646
< It's notjust flowers.
---
> It's nootjust flowers.
3697c3697
< Where are you going?
---
> Where are you goning?
3884c3884
< there's no stopping us.
---
> there's no stopeping us.
4119c4119
< - Get this on the air!
---
> - Get this on ythe air!
4323c4323
< Land on that flower!
---
> Land on that fl}ower!

script2.txtで余計に書いてある文字を並べる。

flag{honey}

Very Basic (crypto 10)

dataファイルの末尾に以下のデータがある。

011          11100 010010




01  0011100
1111   0000   000
100000  10
01001        0000

0010 00000



01100010 00100010   10001001
100100

2進数のモールス信号のデコード、base64テーブルの置換はダメだった。最終的にはBacon's cipherで復号できた。復号ツールはhttps://www.dcode.fr/bacon-cipherを使った。

Bacon ciphertext
011111000100100100111001111000000010000010010010000001000000011000100010001010001001100100

Result
A=0,B=1 (αβ2)	PRETTYBASICAMIRITE
A=0,B=1 (αβ1)	QSEUU?BATICANISIUE
A=1,B=0 (αβ1)	RP?NNH??OZ??UZPZN?
A=1,B=0 (αβ2)	QO?MMH??NX??TXOXM?
flag{prettybasicamirite}

When It All Began (osint 10)

ACM Cyberのウェブサイトのドメイン"acmcyber.com"が作成された日を"flag{YYYY-MM-DD}"の形式でで答える。

$ whois acmcyber.com
   Domain Name: ACMCYBER.COM
   Registry Domain ID: 2438728089_DOMAIN_COM-VRSN
   Registrar WHOIS Server: whois.registrar.amazon.com
   Registrar URL: http://registrar.amazon.com
   Updated Date: 2022-08-26T21:28:21Z
   Creation Date: 2019-09-29T23:58:03Z
   Registry Expiry Date: 2023-09-29T23:58:03Z
   Registrar: Amazon Registrar, Inc.
   Registrar IANA ID: 468
   Registrar Abuse Contact Email: abuse@amazonaws.com
   Registrar Abuse Contact Phone: +1.2067406200
   Domain Status: ok https://icann.org/epp#ok
   Name Server: NS-1366.AWSDNS-42.ORG
   Name Server: NS-1574.AWSDNS-04.CO.UK
   Name Server: NS-310.AWSDNS-38.COM
   Name Server: NS-961.AWSDNS-56.NET
   DNSSEC: unsigned
   URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
        :
        :
flag{2019-09-29}

Back in My Day (osint 15)

uclaacm.comがホストされた最初のIPアドレスを"flag{}"の中に入れて答える。
https://viewdns.info/iphistory/で履歴を調べると、一番古いIPアドレスは 192.64.119.64 となっている。

flag{192.64.119.64}

Beanstalking (osint 15)

Lima Bean はライス大学の4年生。以前は Super Secure Systems のプロジェクトマネージャーとして働いていたが、最近 Brick に就職したという情報から、彼の現在の役職を答える問題。
ただ、開催期間中に情報が消えてしまったようで、どのように解くかをDiscordで問題作成者に伝えれば、フラグを教えてもらえるということで、Linkedinで姓名や勤務先から調べる方法を伝えたら、フラグを教えてもらえた。

flag{fr0m_beans_t0_bricks}

Day and Night (steg 15)

問題文からoutguessで秘匿情報を抽出する。パスワードも問題文に書かれている大文字の文字列と推測。

$ outguess -k BLACKANDWHITE -r los_angeles.jpg secret.png
Reading los_angeles.jpg....
Extracting usable bits:   129121 bits
Steg retrieve: seed: 4994, len: 1795
$ file secret.png
secret.png: PNG image data, 300 x 300, 8-bit/color RGBA, non-interlaced


secret.pngにはQRコードが書かれているので、https://zxing.org/w/decode.jspxでデコードする。

flag{pandas_zebras_and_orcas}

get a grep (file 15)

$ strings bigfile.txt | grep flag{
flag{incompelete
flag{wrong parenthese)
flag{grep_mastermind}
flag{aklsdgjnakjehgl;ewjhg;lwejahg;lasdjg;klasdjg;ljwnglj;q342ngl;jwdang;vlnasdg;
flag{grep_mastermind}

Missing Person (file 15)

$ binwalk stuff.zip 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             Zip archive data, at least v2.0 to extract, compressed size: 160689, uncompressed size: 160664, name: whygod.jpg
160729        0x273D9         Zip archive data, at least v2.0 to extract, compressed size: 131231, uncompressed size: 131862, name: banana.jpg
292000        0x474A0         Zip archive data, at least v2.0 to extract, compressed size: 729180, uncompressed size: 729476, name: stash2.jpg
1021496       0xF9638         End of Zip archive, footer length: 22
1021518       0xF964E         JPEG image data, EXIF standard
1021530       0xF965A         TIFF image data, big-endian, offset of first image directory: 8
1022232       0xF9918         Copyright string: "Copyright (c) 1998 Hewlett-Packard Company"
1032776       0xFC248         Copyright string: "Copyright (c) 1998 Hewlett-Packard Company"

$ foremost stuff.zip 
Processing: stuff.zip
|foundat=whygod.jpg
��!X�Np=��]{Є������3�f��4�O�����]����c�c�./#'��
foundat=stash2.jpg
*|


jpgが抽出され、そこにフラグが書かれていた。

flag{sm00th_op3rator}

Moanin (steg 15)

Audacityで開き、「ステレオからモノラルに分離」する。その後、「トラック」メニューの「ミックス」から「新しいトラックにミックスして作成」をする。あとは作成したトラックで、スペクトログラムを見る。

単語は1語とのことなので、繰り返しを見越し、推測してフラグにする。

flag{groanin}

Hello There (osint 20)

Discordでhttps://docs.google.com/document/d/1ciVm3LLGCt7n9fwj1zUvYwHTEQTBpAbbfvGkajBi2P0/edit#が展開された。この問題に該当するWriteupにフラグが書いてあった。

flag{th1s_isn't_th3_fl4g_y0u're_l00king_f0r}

No Flags?? (file 20)

$ strings megamind.pdf | grep flag{
%%EOFflag{no_compan1onship}
flag{no_compan1onship}

Senobnesieh (steg 20)

videostegoをインストールし、読み込みを実行する。

$ videostego -f senobnesieh.lmao -r
flag{newer_mandela_effect_just_dropped}
flag{newer_mandela_effect_just_dropped}

Tar Pit (scripting 20)

pit.tgzをpit_tmp.tgzにして、繰り返し、解凍する。最後に展開されたfound_the_bottomにフラグが書いてあった。

import tarfile
import os

while True:
    try:
        with tarfile.open('pit_tmp.tgz') as tar:
            for i in tar.getmembers():
                tar.extractall()
        os.remove('pit_tmp.tgz')
        os.rename('pit.tgz', 'pit_tmp.tgz')
    except:
        break
flag{wow_that's_pretty_deep}

Xordinary Encryption (scripting 20)

hexデコードするだけ。

$ cat flag.txt | xxd -r -p
0n3_1n_256_4r3_gr34t_0dds
flag{0n3_1n_256_4r3_gr34t_0dds}

Hop Skip Jump (scripting 25)

スクリプトを読むと、CLOCKバイトごとにフラグが書かれていることがわかるので、抽出する。このときCLOCKバイトが不明だが、"{"の位置から、4で割ってCLOCKを求める。

#!/usr/bin.env python3

with open('maze.bin', 'rb') as f:
    data = f.read()

CLOCK = data.index(b'{') // 4

flag = ''
for i in range(0, len(data), CLOCK):
    flag += chr(data[i])
print(flag)
flag{never_do_string_manipulation_without_python}

Androids Dream of Sheep (scripting 30)

https://ssalandary.github.io/ScriptingChallenges/robots.txtにアクセスすると、以下のように書かれているので、ブルートフォースでアクセスする。

User-agent: *

Disallow: /ScriptingChallenges/hidden/Adelaides.html
Disallow: /ScriptingChallenges/hidden/Adele.html
Disallow: /ScriptingChallenges/hidden/Adeles.html
Disallow: /ScriptingChallenges/hidden/Adeline.html
Disallow: /ScriptingChallenges/hidden/Adelines.html
Disallow: /ScriptingChallenges/hidden/Aden.html
Disallow: /ScriptingChallenges/hidden/Adenauer.html
Disallow: /ScriptingChallenges/hidden/Adenauers.html
Disallow: /ScriptingChallenges/hidden/Adens.html
Disallow: /ScriptingChallenges/hidden/Adhara.html
Disallow: /ScriptingChallenges/hidden/Adharas.html
Disallow: /ScriptingChallenges/hidden/Adidas.html
Disallow: /ScriptingChallenges/hidden/Adidass.html
Disallow: /ScriptingChallenges/hidden/Adirondack.html
        :
        :
import requests
import re

url = 'https://ssalandary.github.io'

with open('directories.txt', 'r') as f:
    dirs = f.read().splitlines()

for dir in dirs:
    r = requests.get(url + dir)
    if 'flag' in str(r.text):
        print(r.text)
        break

実行結果は以下の通り。

<!DOCTYPE html>
<html lang="en">
        <head>
                <link rel="stylesheet" href="style.css">
                <title>position Muskogee</title>
                <meta charset="utf-8">
        </head>


                <body>
                        <p>flag{w4ll3_1s_4n_3xc3ll3nt_m0v13}</p>
                </body>

</html>
flag{w4ll3_1s_4n_3xc3ll3nt_m0v13}

Pokemon Adventures (1/3) (osint 30)

Google mapで、UCLAの近くを調べ、添付されているポケモンゴーのマップと似ている箇所を探す。

UCLA Anderson School of Management
flag{anderson_school_of_management}

Pokemon Adventures (2/3) (osint 30)

Google mapで、UCLAの近くを調べ、添付されているポケモンゴーのマップと似ている箇所を探す。


このあたりのお店の名前を答えていくが、以下のフラグは通らなかった。

flag{blaze_pizza}
flag{bombshelter_bistro}

最終的にはbombshelterを2語に分けたら、フラグが通った。

flag{bomb_shelter}

Pokemon Adventures (3/3) (osint 30)

Google mapで、UCLAの近くを調べ、添付されているポケモンゴーのマップと似ている箇所を探す。

この建物はUCLA Ackerman Union。
以下のフラグは通らなかった。

flag{ucla_ackerman_union}

最終的には別名で通った。

flag{ackerman_student_union}

Tyler is the one (file 30)

$ binwalk alpha.jpg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01
246115        0x3C163         Zip archive data, at least v1.0 to extract, compressed size: 1978455, uncompressed size: 1978455, name: hidden.zip
2224616       0x21F1E8        End of Zip archive, footer length: 22
2224638       0x21F1FE        Zip archive data, at least v2.0 to extract, compressed size: 1655251, uncompressed size: 1661078, name: tyler1.png
3880117       0x3B34B5        End of Zip archive, footer length: 22

$ foremost alpha.jpg 
Processing: alpha.jpg
|foundat=hidden.zipUT	
foundat=tyler1.pngUT	
*|

抽出されたzipファイルを解凍すると、以下の2つのファイルが展開される。

・hidden.zip
・tyler1.png

zipはパスワードがかかっている。pngにパスワードのヒントがないか確認する。

$ zsteg tyler1.png 
b1,r,msb,xy         .. file: OpenPGP Public Key
b1,b,lsb,xy         .. file: OpenPGP Secret Key
b1,rgb,lsb,xy       .. text: "r0fLM@OT1okg00dy3s"
b1,abgr,msb,xy      .. file: PGP Secret Sub-key -
b4,r,lsb,xy         .. file: Novell LANalyzer capture file
b4,g,lsb,xy         .. file: 0420 Alliant virtual executable not stripped
b4,b,lsb,xy         .. file: Targa image data - Map (256-256) 17 x 273 x 16 +257 +256 - 1-bit alpha "\001"

"r0fLM@OT1okg00dy3s" をパスワードとして、zipを解凍する。

$ unzip hidden.zip 
Archive:  hidden.zip
[hidden.zip] secret.png password: 
  inflating: secret.png
$ file secret.png 
secret.png: PNG image data, 1920 x 1080, 8-bit/color RGBA, non-interlaced

secret画像には何も書かれていない。StegSolveで開き、Red plane 0を見たら、フラグが表示された。

flag{th3re$_N0_D3nt}

Where is my Supersuit? (osint 30)

$ binwalk secretsuit.png 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 1080 x 686, 8-bit/color RGB, non-interlaced
41            0x29            Zlib compressed data, best compression
844144        0xCE170         Zip archive data, at least v2.0 to extract, compressed size: 21, uncompressed size: 21, name: nums.txt
844257        0xCE1E1         End of Zip archive, footer length: 22

$ foremost secretsuit.png 
Processing: secretsuit.png
|foundat=nums.txt37.832015,-122.283661PK
*|

zipファイルが抽出できるので、解凍すると、nums.txtが展開される。中には以下のように書いてある。

37.832015,-122.283661

これを緯度、経度としてGoogle mapで検索すると、通りの名前がわかる。

flag{1200_park_ave}

Zalgo (steg 30)

いろいろ試したところ、Zalgo文字をUNICODE文字として、16ビットごとに以下のような変換をすると、2行目のprint文と似たような文字列になることがわかった。

・\xccの場合、code - 0xcc80 + 0x20
・\xcdの場合、code - 0xcd9d + 0x7d

1行のデータだと、差分がわかりにくいので、ピリオド". "で改行して、1行目のZalgo文字部分をmsg0.txt、2行目のprint文をmsg1.txtで保存する。

#!/usr/bin/env python3
import string

with open('shrek.py', 'rb') as f:
    codes = f.read().splitlines()

zalgo = codes[0][9:-1]
msg0 = codes[1]

msg1 = ''
for i in range(0, len(zalgo), 2):
    word = int.from_bytes(zalgo[i:i+2], 'big')
    if zalgo[i] == 0xcc:
        code = word - 0xcc80 + 0x20
    else:
        code = word - 0xcd9d + 0x7d
    msg1 += chr(code)

msg_lf0 = msg0.decode().replace('. ', '. \n')
msg_lf1 = msg1.replace('. ', '. \n')

with open('msg0.txt', 'w') as f:
    f.write(msg_lf0)

with open('msg1.txt', 'w') as f:
    f.write(msg_lf1)

この2つのデータの差分を見てみる。

$ diff msg0.txt msg1.txt
392c392
< SHREK: What? FARQUAAD: Congratulations, ogre. 
---
> SHREK: What? flag{accidentally_in_love} FARQUAAD: Congratulations, ogre.
flag{accidentally_in_love}

Camera Roll (file 40)

$ binwalk camera_roll.jpg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, EXIF standard
12            0xC             TIFF image data, big-endian, offset of first image directory: 8
98462         0x1809E         Zip archive data, at least v2.0 to extract, compressed size: 56239, uncompressed size: 56447, name: amoung.jpg
154741        0x25C75         Zip archive data, at least v2.0 to extract, compressed size: 1450954, uncompressed size: 1451595, name: 4.zip
1605909       0x188115        End of Zip archive, footer length: 22
1605931       0x18812B        Zip archive data, at least v2.0 to extract, compressed size: 1478893, uncompressed size: 1490084, name: maz.png
3084861       0x2F123D        Zip archive data, at least v2.0 to extract, compressed size: 4173923, uncompressed size: 4180475, name: oscar.jpg
7258823       0x6EC2C7        Zip archive data, at least v2.0 to extract, compressed size: 247955, uncompressed size: 247935, name: 5.zip
7507080       0x728C88        End of Zip archive, footer length: 22
7507102       0x728C9E        Zip archive data, at least v2.0 to extract, compressed size: 970918, uncompressed size: 971255, name: fashion.jpg
8478061       0x815D6D        Zip archive data, at least v2.0 to extract, compressed size: 160689, uncompressed size: 160664, name: pain.jpg
8638788       0x83D144        Zip archive data, at least v2.0 to extract, compressed size: 87581, uncompressed size: 88276, name: bald.jpg
8726407       0x852787        Zip archive data, at least v2.0 to extract, compressed size: 131231, uncompressed size: 131862, name: banana.jpg
8858043       0x8729BB        End of Zip archive, footer length: 22

$ foremost camera_roll.jpg 
Processing: camera_roll.jpg
|foundat=amoung.jpg��g<���1���-���~�=b'i�h�v�Z{��-j��%6m��B��M[�REm�տ���?�����<��8��u���z]�.��XC�!��
foundat=4.zip
foundat=maz.pngT�X_�-�^��:(  R��tQ�"Uz�޻tD�7��^C���0B�-@����������$<�L����Z����-���|�Q/�g(Ɂ'�ci��D��������9��*�P�������S�#�닌z_>ɪO�^����r�[NpypT���Cz��=���]�c��Ͻ[�.��_��QE3�$Q+�׌�{�î�����Vܠ�SH���@��W��˯C�AgS>���y�س0��2���W˜N��Կf|�9.�w���]Fұ�E՟���ng]x����̿��˹�S�|<>
foundat=oscar.jpg��uT�]�/�B�R(��m�)\�{q�R�Cq�����w�ࡸ[����q?�}����{�x�;+���}m��=۲�3�co�=m>
foundat=5.zip
foundat=fashion.jpg��uT\�6
foundat=pain.jpg
foundat=bald.jpg��ep\=�.���1fffffff��13�̎�1d�����1�c�1C�7��Ω���:?N��Y��iI���Z�kjj�s�s*�c�
��!X�Np=��]{Є������3�f��4�O�����]����c�c�./#'��
*|

zipファイルを3つ抽出できる。それぞれ解凍すると、以下のファイルが展開される。

・00000192.zip
 ・4.zip
 ・amoung.jpg
・00003136.zip
 ・5.zip
 ・maz.png
 ・oscar.jpg
・00014662.zip
 ・bald.jpg
 ・banana.jpg
 ・fashion.jpg
 ・pain.jpg
$ binwalk 4.zip

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             Zip archive data, at least v2.0 to extract, compressed size: 903836, uncompressed size: 904810, name: strategy.jpg
903878        0xDCAC6         Zip archive data, at least v2.0 to extract, compressed size: 54608, uncompressed size: 57586, name: mom.jpg
958706        0xEA0F2         End of Zip archive, footer length: 22
958728        0xEA108         PNG image, 933 x 933, 8-bit/color RGB, non-interlaced
958769        0xEA131         Zlib compressed data, best compression

4.zipの末尾にpngファイルが付いているので、抽出する。

$ foremost 4.zip
Processing: 4.zip
�;w((^at=strategy.jpg��uT�O�7�����
������%8�]���kq����s���{���uw�I>���c{��d�����: @���;
��K-�"��t�KHK�t�4,�H,��,)
�Jw���s?���������{v��̙9���>�uΜ���^Hd�e
*|

$ binwalk 00001872.png 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 933 x 933, 8-bit/color RGB, non-interlaced
41            0x29            Zlib compressed data, best compression

4.zipを解凍すると、以下のファイルが展開される。

・mom.jpg
・strategy.jpg
$ binwalk mom.jpg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01

$ binwalk strategy.jpg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, EXIF standard
12            0xC             TIFF image data, big-endian, offset of first image directory: 8
175334        0x2ACE6         PNG image, 741 x 758, 8-bit/color RGB, non-interlaced
175388        0x2AD1C         Zlib compressed data, default compression

$ foremost strategy.jpg 
Processing: strategy.jpg
|*|

strategy.jpg から pngを抽出するが、特に何も無さそう。

$ binwalk 00000342.png 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 741 x 758, 8-bit/color RGB, non-interlaced
54            0x36            Zlib compressed data, default compression

$ binwalk amoung.jpg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01

5.zipを展開すると、以下のファイルが展開される。

・mistake.jpg
・scum.jpg
$ binwalk mistake.jpg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01
69020         0x10D9C         JPEG image data, EXIF standard
69032         0x10DA8         TIFF image data, big-endian, offset of first image directory: 8

mistake.jpg の末尾にjpgファイルが付いているので、抽出する。

$ foremost mistake.jpg 
Processing: mistake.jpg
|*|

$ binwalk 00000134.jpg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, EXIF standard
12            0xC             TIFF image data, big-endian, offset of first image directory: 8

抽出したファイルも何も無さそう。

$ binwalk scum.jpg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01

$ binwalk maz.png 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 2048 x 1752, 8-bit/color RGBA, non-interlaced
41            0x29            Zlib compressed data, best compression

$ binwalk oscar.jpg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, EXIF standard
12            0xC             TIFF image data, little-endian offset of first image directory: 8

oscar.jpg には末尾にディレクトリ構成が付いているが、一旦保留。

$ binwalk bald.jpg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, EXIF standard
12            0xC             TIFF image data, big-endian, offset of first image directory: 8
68369         0x10B11         Zip archive data, at least v2.0 to extract, compressed size: 19751, uncompressed size: 19746, name: maxozki.jpg
88254         0x158BE         End of Zip archive, footer length: 22

bald.jpg の末尾にzipファイルが付いているので、抽出する。
抽出したzipファイルを解凍すると、以下のファイルが展開される。

・maxozki.jpg
$ binwalk maxozki.jpg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------

$ file maxozki.jpg 
maxozki.jpg: RIFF (little-endian) data, Web/P image, VP8 encoding, 564x551, Scaling: [none]x[none], YUV color, decoders should clamp

$ binwalk banana.jpg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01
30            0x1E            TIFF image data, big-endian, offset of first image directory: 8
394           0x18A           JPEG image data, JFIF standard 1.01

$ binwalk fashion.jpg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01
72996         0x11D24         Zip archive data, at least v2.0 to extract, compressed size: 837795, uncompressed size: 864584, name: nik.jpg
910828        0xDE5EC         Zip archive data, at least v2.0 to extract, compressed size: 60186, uncompressed size: 61043, name: cigar.jpg
971233        0xED1E1         End of Zip archive, footer length: 22

fashion.jpg の末尾にzipファイルが付いているので、抽出する。

$ foremost fashion.jpg 
Processing: fashion.jpg
|foundat=nik.jpgT�uT>$@��-Ŋ��EڠE�A��;T�SܵP(,������T�+-����{�����{v>;<3;��YS]mmG_��RK��������7��AFf��#
     )��מ�cA��Ea`��Feh����R��[9!�@y6�%�����4��[~���D�%�Bh�:��o���x���V(�Yy��7��a2��@|
�p��������Vxx@1e��M�M���m�H6�߾IC\�z�=S�b���f��Ay��/a���h�f��w��O/���oy��`���j�H����?���:eF��dV�d
                                                                                                M��N��M�ut��Svg���g߻�UL�oQ�W�%�c1.�4E��`�hө�	ȇ#t�P
foundat=cigar.jpg��wT��7z/�t��Bh��J/B'�Ћ҄P�
                                          �!��^D� �tBGP�(%�R)���
t�u��w���g���>s�93��νO���sϙ�����
*|

抽出したzipファイルを解凍すると、以下のファイルが展開される。

・cigar.jpg
・nik.jpg
$ binwalk cigar.jpg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01

$ binwalk nik.jpg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
618090        0x96E6A         JPEG image data, EXIF standard
618102        0x96E76         TIFF image data, big-endian, offset of first image directory: 8
704488        0xABFE8         JPEG image data, EXIF standard
704500        0xABFF4         TIFF image data, big-endian, offset of first image directory: 8

nik.jpg の末尾にデータが付いているので、抽出する。

$ foremost nik.jpg 
Processing: nik.jpg
|*|

jpg画像が2つ抽出されるが、片方にフラグが書いてあった。

flag{stop_drop_4nd_rol1}

Diff (steg 40)

Audacityでモノラルに分離し、片方のトラックを選択して、「エフェクト」-「上下を反転」をする。両方のトラックを選択して、「トラック」から「ミックス」「新しいトラックにミックスして作成」する。
作成したトラックでスペクトログラムを見ると、モールス信号らしきものが見えるので、デコードする。

-... . . .--. -... --- --- .--.
flag{beep_boop}