Trend Micro CTF 2017 Writeup

善戦しましたよ。シェル芸はCTFでも有用。
kanataほぼ7年前に追加

CTF Writeup TMCTF2017

結果&感想

Trend Micro CTF 2017 に、某チームで参加しました。
今年は善戦しましたよ!(国内10位以内)。二問解けました。
解けたけど、途中までチームの方が解いてくれたやつのオイシイ所だけ持っていった感じだったりします。

という訳で、解ってる部分のwriteupです。

Trend Micro CTF 2017 オンライン予選 ランキングページ
https://ctf.trendmicro.com/ranking.html

Forensic 100

pcapのファイルが渡されます。
早速Wiresharkで読んでみるとこんな感じ。

20170625_tmctf_forensic100.jpg

DNS通信の羅列です。なんかメチャクチャなホスト名のAレコードを引っ張ってこようとしているように見えます。

Malwareの通信を模している

どうやら、以下のマルウェアを模した通信のようです(チームの方が調査して教えてくれました)

遠隔操作ウイルスの制御にDNSプロトコルを使用する事案への注意喚起
https://www.lac.co.jp/lacwatch/alert/20160201_000310.html

遠隔操作ウイルスの制御にDNSプロトコルを使用する事案への注意喚起 | LAC WATCH | 株式会社ラック

「遠隔操作ウイルスの制御にDNSプロトコルを使用する事案への注意喚起」のページです。ラックは、セキュリティ対策とシステム開発より培った技術と経験より、ITを活用する企業に対して技術情報の共有や、情報セキュリティやIT活用に対する提言などの有用な情報発信をします。

余談ですが、一般的な企業の外部との通信環境として、DNSのログまで取らなかったり、DNS通信のためにファイアウォールのポートを開けてたりするので、通信の偽装方法としてはかなり賢いやり方かと思います。

そして、そのチームの方が、そのメチャクチャなホスト名を抜き出してくれます。

ASfsbGivEQsT2aQPHzaB
5GBJZEAWX7WJASGCg5Br
9TvJjPCj9kRW9fk5XU2b
rvAptS4tZnjLwCNsXn5N
9jUqipSo5xgNR6EM3Zpw
8kdhrsqDd3Gb5wSSPqKN
8wkw5kPRgi5ihJnGYxid
p7vfcECXgiGtisBnZiD9
C2kv3MzxMXGZiSgQpfmt
y3vYWgxkk9ygyqJcRDnD
PB2gk8K9SJFcKrPimJja
9REhmzgECtjmEMYVz5QY
tsHgSBzRBT8FbQx3mvpX
jEkoi86dM8n9eQuZ38wj
8Jvg2HSvjr8qyEtur3E5
vPfFiANqqbY4J4jbCyNr
UrJLW8fGVvr9mdAyAqpJ
sk8h9X8t1LtyXV2cMoxa
j2ELd8EoY3aGDatsba5m
VkNwpptkVumdo8sxXoYS
ta6fKKAC3MXfLVvkHYSs
Gs9fnyXPMgitffJ49xt4
oCxCHtyoWgytH6sudYPk
SypJUuCWfsS1R771e95R
eRvie3RgQjEwpVL4HsnC
EJeEEzPWVtJQpTcheGGB
sMzqMuR3y8eui2wU93H5
ZeDVauv4qQYPWdpub8Ys
J9X3mQCZ7B4XsdyTUSyT
goeboTbqpATAnuCDRzYn
pd6sQ5PggQBdoUYjABcP
HgUp34UmzHSGaRScoHzF
T8W51c8iY3X6uNCxRwnZ
LCx2C4PBwZN24wKWFAoL
vSTGaeVcxBQ3UHo9xpY5
HoHJaL1pPaxAhFhei73H
5k5doyAoKhvTdvNehEhJ
ocCoxRZKbBQP8f7cZgTm
CuD1ekRNQ6o7ZysnuDwf
vvmotn9Wap7DeGZGnS94
g7wUSB4B7VUcSEcT9G18
yYuKh8fjBAw9fJrrgZmZ
97FnKJWgXf9Ju9648DDB
gh534XrjqMLiBXFq2dnf
qmG845ndTuXSR1bMRpqp
jFeJN52D9KKKaYqTgoCq
o9Y1nt9pwahd3v1srMpj
VTPt46SH2RKU21ZfiqEN
of8hkgxxLTLtkWPRPJeB
9WSVGzALTZ3L8QVsq1uX
HwUKYkmjbX71Phrzfnhz
V5ffFCtjiuF1D4gtMY1c
f9ieUzKWF7voscgM2zcV
oiDdYCfpKJGrkzpDZB1c
QTPDZYyLbzZ9hE2B1RAw
V7e4NGuG8TPQmaXvet3r
Ze3Q7zZhmcdXhwbd8Et7
JZHcvidkLCb1JDrNe1dX
6fjddFonVfoMWNcAHLH5
BypDgNtAwK2JkABnkMAs
BQi16XaNToXzTC4Ug8UN
gyUfRjXrwzTYckVfE7Vo
e5kdwYLX4FQ12eQm3BbW
76tkfsZUUAm3gHHk3roT
CiQ8kNejjitLaRVhfeuG
yfMkotR8TVmYPGqEmcS1
qRMWJmigBwg7ZbG4hSDC
dSq83eKsFyig8A4EDsPF
XnGKAgUe1UYHvzahFBhn
eyhgmfdbheRAEAkMqVn5
PBmEhv7bC4aNUZ465Hus
2JpJF5L4tkfbJsAVmCrt
REhCuLhUqXqVmFBqknho
x2BfRQqAZMB6f4udU3Xo
U4qED1V5kEqA1qVGytjW
B2pQGbjuacAjf2C8n7QS
UTJhFsrmQp12sUE7WJ6w
tTg4bnjNDzyHbJSiVWhr
2EuES8qZbVFP5478HpVh
8dpCvz6DJJybAEfcsg76
pGLBatEMvjiHTC5LhdAf
PbQiePVedCjEQL21Pn6i
GLTPZfWqHVz3ZtkR4iDF
Zyn3L5ZGWjCJ3JgzCTRm
YeuXfW2XcNMipgv4c97i
8TAbL3m5rhV5ShtjBAqw
dfszh1erSpVDMuijNpo2
sC6czF2fq6mGMKe8hwWo
BwVt7sRaAYtp94AEw5AJ
HUdvfRzsQ7XBMQBMDHbp
mCkWortnVk1krAVUK8Mf
GQezUgvSmX6pBgXDrGkx
yNmWpQg8DeF5saQApGKM
zshqTmGrrJm7s4TYajBs
RKatfjKBLgto6YHd548A
LADReAEmymFbDg31U6dJ
Pp1XbHujeMe3z2QQqmft
Az2LRpfjz6Rh64cVRK6D
adBBsL9quZoiZB339vLD
Mx4xRRaU7N5NxSnPz4Zj
uYm4V2uUoTmA4jaS7atS
zbEBujiVf2wTz18ymbPF
apXrc53WNL9iYa7nqHUA
gvn1Bx9L5hadd5A97ss2
NhSPmwZGBu7rj2f43uwf
dGamzZpGxEascuGT48p9
wgm49Ck6QovrCj7g3KAZ
XEopDkmeReSRNkEipH2U
4V7Vim425LAJsghg1nqX
DRHx4QNAe9TKBiRYPw2w
PdPi9gWHPpnwHJyX896E
rCvXadRfQrEuushKthcn
vUyUXt8MZWcHLujDkKFq
hama3vxFTDH7N8QD5Kch
Nevv7KPDo95DagyyZHGy
LT7DKEusvJ8SZuodBEeW
wwJ1qfCMasEBBiPXov6h
UexhazHeJRTEVscjZ2bN
iScQs2YuqPnej26QShcr
wwyunJZu2S9yqo7i6Psf
pWXAmZcQ7Nba7QpAfaH4
NuGnhzUb9KcVZmJkfRzg
D3egFR9C79gQYybVMpd6
Kxz5xRzS4WAhLLdqwUFx
NBw3hUV7nMywSR6Cg2aj
nv61ZWVNgAofwXuthzfG
kAyae51WNWjtbtpCSEQL
PY1uTwWZ13bthQaoCeZ5
3nomwgWB4EBaimmu78qn
AquqjeCw73XK4UXGR61T
HLxgSiuGjRRcj6489cuW
fQ7gyU6ckPo6QL8cGPvH
j6CXJ4w8CakQMmwq7JGp
PToD826chKGtH5A2RKCk
Hc7NQA79MvHvXdtByDC4
iPaivSRmLXZa5W8vr4F7
JqbK8ghZcQJuSGWTaQwQ
jjABhkmWvDvs6HHyW3j8
XK6cPijnTVvCgDN63Nrm
suNkMCnbkiWRZfgu8pqc
kVze5LxGnVWPmtmnVv4u
nssrKhd1SBPU17vps76M
iHontgDCbfxtp9BZFt8E
YtZMUghzzxQxTKFGGg9b
L6eRrrFfjYx15E4GtAmZ
5wZA5oxE8atxtdaWc1qf
Q7wMMvzR8QHx5Xw7imGX
h4M58Kiknsw7urRDkitH
2EAxKPLsbp4eAERFFNT3
Vy6XdymAGGkok1KcM5EW
WSpdEjWJpdi36dYsXCTr
bLYqXuMFHViL5GP9HFJh
Mez6hsvcsscaLUUz3KhW
D9owzzczVAk8GzDkkrT1
Sqxs6oG3Q6isAHUAVYUb
iRaqm3AjSazJf5BsA6Xx
xc9LV25nKvTKjK6Q4UEX
WvMnEM5iKTmwWsoHvGB4
EnNNN34f9mfavgdTfG9W
ovwysP4AxHK4iHipuv5m
to1ugHG2vFgVafweSaFh
63qhYqEc9HHmJaFRJ8bS
JBLBEi9LKmsDCufc6u6F
QCshYApRFKKGYWEgMaWA
BHSLEfwA8KrZyF2Whbyu
NiskF6RWVJMpBX2g7oqU
j3W73H4E5ybHUqQx5HeK
pPgDFSxRMtVCee8U5KmU
XDPDFHEY9ayoDGE3P6UM
Mu6u4GPwMxoT8r2hKrZi
gMvngG5ujwKm5FCX1DQN
PAdzTtQPMuVfNSq5YL8n
jRpT1UFDWFV6PQ616hX3
92iTiMQbNN41VgKE1Zp5
4qG3nYK6DJCG1yssE71H
xYudvTV2vRdx4kLQvMLc
7UPfCfjswRxptxyffRcM
NV4fpnSXHKVKVNo7rnmb
ZjyAgQmNiA4tG2yaVLqK
Q6mdzH914mH7inV9keb4
evbazKxFhumbhtKr4YAm
7VqUxTiwGrqcsdg9XwHu
wZG69BmoRkhJhVFRkxe2
qSQGrk6qGMP4MPKYZXzC
JEU14sq3rGEU23avuKUj
CPcEVcMboGvjH6N7TG8z
gQmnhrXaDQVqQ6dBiGwg
3eESUiXFQxZLZFecXiu1
gHG7p75QCedSV5EEwdpy
EL1rJWTji8WvAKDGpkqX
KDxJPQW78DmTtdVDNWgE
VqkBRKp4HiYcSV3WZ71v
pm6LzkEW7UyoQnF3AfcV
uFp4ogxeA9vPzZ3LoVFS
ts9CYgPxJW8i2KpUW1bP
itDsYqqr6tK3wvLW3CWd
zWrDWowzgSoFHZQ6EqiL
pfVbfuvj5FyURHsmDecG
FnnAdBFckx6hJeuagNNb
K4iyT9KfPDUPoGXprsGc
peVY9SRU3nMVjuFB22zi
qZxPwASjebDepePoe3Lb
TDwK8XFTx8JaKr5xXyGk
w7cqBCzvhVWQvkRjyWhF
YmfRc3S2814fatrghk9C
phAcHkLfNhvU9yUmsDmw
WpUXQH9ZnxUPRDVN3oEJ
hvG5ptZF9YJtSQdKATni
f7Ut2tis18xaKdiARRi2
cQiD1GTtd7NFtq9TxNmL
7C2vQNGneNpGJPWb9mZM
G3g4CCHaunsKyXExXL9y
EjBwHq6H9unt9wAiCGVH
32mvVRZbLMF4CpWRiqW8
nVqCx4PpCdopakRUqZfX
2iEJ4UKtU4CEYUMH23sB
2XSeveHgoNtTZvaziunD
XHMHSTJe3VKYRy4JQSs3
W3xe3apFCkwS33mea2gf
giqwhGTifa2QAjgGsdae
1RejMC5dqWjAMfXMmC6m
A3b5DEDZAP5XgJqi6vZM
Sho8CNWQAZ1xD2RKGyCr
8gCx1zsfpuL5ffFmzC7K
rzZ9ZxoWRHrnWmS9E5rs
gtGRn5kMtVe8jnYXZeoV
xYt7uvFeLjXRfmaDXt7S
mD5pz9nNwXTqZ1WhUN74
3CFUCeMD2ZFpT68gme2T
iT17Fhwuh1EQekVwxDrQ
sTD2tRh3PHRatw49h9vi
4FUyNnh3BJwuq9UykbJ7
kq9faJQxuJiwxWRUBD9T
K9G9dBn1AhcDwogPyqU3
rFneZ37FL56NvaPXgVLX
7d2wY7JbrzuY3SHhjECW
yFWGBSpGurNmCUFf4a9b
LvH8xnKXyPpLjNyBcsPT
aXET3299mhHaXKTpBApD
bukmRnpMkwqUJyQAvhxq
iDRkrZTfKYws43sfzfab
xEEWL6uaSZLTjze8avxq
tDemvaPgjfMcfvqvjz66
UAnraPLbymzo9PL5imY2
6LPinAGSJi6q3oSPAvYg
boMWbDWrNbsS56v64KBa
iLS28qQWdL5t3ADvL5eC
R1EDEDzx74zYL3WVNcJe
nBQFprxj7U4hzDm22edM
xLpR5daeYKmKtTcjEanU
Lv6obrrXW5JWbEoKn4qG
patrf76fKwKMZnvwxUhz
3iSLkfZQLgQoJHWvzVCR
E7e7GmJwgLPri45ctU4W
NuN72W8UyWzGTK

ぱっと見、Base64っぽいので、デコードしてみますが、なんかよく解らないバイナリの値になりました。
よく見るとBase64で使われるはずの +/ が見当たりません。なんの文字が使われているかちょっと確認してみましょう。
シェル芸が光ります。

$ cat file5_dns.txt|grep -o .|sort|uniq|xargs|tr -d ' '
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

Base ? encoding

数字・英大文字・英小文字・記号は無し
という事が解ります。

Base64ではなくて、他のエンコーディング形式かもしれません。
予め、以下にまとめてあるので確認してみます。

raintrees.net - CTF Crypto - Base N encoding
https://raintrees.net/projects/a-painter-and-a-black-cat/wiki/CTF_Crypto#Base-N-encoding

以下、抜粋

方式 使用される文字 参考
Base58 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz Bitcoinに利用
Base62 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 JavaScriptの難読化等

この特徴に合致しそうなのが、Base58とBase62であることが解ります。なんというマニアックなエンコード方式w

使われている文字をもう一度確認してみましょう。

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

数字 0 英大文字 I O 英小文字 l が見当たりませんね。実はこれ、Base58の特徴と合致します。

Base58は、Bitcoinに利用されているエンコーディング方式で、数字として間違えやすい0OやIlを意図的に除外しているそうです(知らんけど)

Base58によるdecode

そんな訳でBase58でデコードしてみます。
ググると以下が使えそうなことが解りました。

https://asecuritysite.com/encryption/base58

後は、やるだけ。以下、ソルバ。

import sys

val='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'

from hashlib import sha256

# 58 character alphabet used
alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'


if bytes == str:  # python2
    iseq = lambda s: map(ord, s)
    bseq = lambda s: ''.join(map(chr, s))
    buffer = lambda s: s

def b58encode(v):

    origlen = len(v)
    v = v.lstrip(b'\0')
    newlen = len(v)

    p, acc = 1, 0
    for c in iseq(v[::-1]):
        acc += p * c
        p = p << 8

    result = ''
    while acc > 0:
        acc, mod = divmod(acc, 58)
        result += alphabet[mod]

    return (result + alphabet[0] * (origlen - newlen))[::-1]


def b58decode(v):

    if not isinstance(v, str):
        v = v.decode('ascii')

    origlen = len(v)
    v = v.lstrip(alphabet[0])
    newlen = len(v)

    p, acc = 1, 0
    for c in v[::-1]:
        acc += p * alphabet.index(c)
        p *= 58

    result = []
    while acc > 0:
        acc, mod = divmod(acc, 256)
        result.append(mod)

    return (bseq(result) + b'\0' * (origlen - newlen))[::-1]

print 'Input:\t',val
print 'Base58:\t',b58decode(val)

で、以下がフラグ

出力結果、中略
     ・
     ・
     ・
TMCTF{DNSTunnelExfil}

Analysis-Defensive 200

なんかzipファイルを渡され、中身はdataというバイナリファイルと、q.jpgというテキストファイルが入っています。

q.jpg(中身はrubyのソースコードかな?)

function rc4 {
    please implement it yourself.
}

function md5($txt){
    please implement it yourself.
}

function invoke-Encryption{
    $FileName = "ZGF0YQ=="
    $FileBase64Data = ????????
    [Byte[]] $FileBinByte = [Byte[]][Convert]::FromBase64String($FileBase64Data)
    [Byte[]] $FileNameByte = [Byte[]][Convert]::FromBase64String($FileName)
    $enc = [System.Text.Encoding]::ASCII
    $key = "Y2hjaGVz"
    $key1 = [System.Convert]::FromBase64String($key)
    $key1 = [System.Text.Encoding]::UTF8.GetString($key1)
    $key1 = md5($key1)
    $key1 = $key1.Substring(8,16)
    [Byte[]]$key1 = $enc.GetBytes($key1)
    [Byte[]]$key2 = [Byte[]][Convert]::FromBase64String($key)
    $FileBinByte = $key2 + $FileBinByte
    $FileBinByte = rc4 $FileBinByte $key1
    $tempFile=[System.Text.Encoding]::Default.GetString($FileNameByte);
    if($tempFile.Length -ne 0){
        if($FileBinByte.Length -ne 0){
            if(Test-Path "$tempFile"){rm "$tempFile"}
            $fs=New-Object System.IO.FileStream($tempFile,[System.IO.FileMode]::CreateNew)
            $fs.Write($FileBinByte,0,$FileBinByte.Length)
            $fs.Close()
        }

    }
}
invoke-Encryption

実装してねという事かと思いますが、チームメイトのcatさんがやってくれました。
ほんと天才やでぇ。

で、中身はpcapファイルでした。

20170625_tmctf_analysis-defensive200.jpg

怪しげなcookieの値があるのが解ります。

asdf=d01J5ln6eJxopAgX2SgmLRYGt5X70XRw4HL6sFoDbvWD5yQ%3D;
qwer=fJDeRjsja7z8wcPVLrZzm6jYl3UsvQC9AoduZgL24n1NYs8%3D;
zxcv=%2Fvox%2Bi3on9Iy1U%2B2itypfjagJ06762d9yfkxI%2FLgSq3a2PJXwdnQ8BhDI9ofW9HXXSQMaEXBkYdrun%2BF%2BxIi3a%2B3TvHY

cookieの値で通信内容を偽装するMalware

なんでしょうねコレ・・・。ふと、マルウェアの通信で使ってるんじゃないかと気づき(だって、DNSで偽装通信してるくらいだしね)
ちょっと調べてみました。

ありました。

Cookieヘッダーを用いてC&CサーバとやりとりするマルウエアChChes(2017-01-26)
https://www.jpcert.or.jp/magazine/acreport-ChChes.html

Cookieヘッダーを用いてC&CサーバとやりとりするマルウエアChChes(2017-01-26)

Cookieヘッダーを用いてC&CサーバとやりとりするマルウエアChChes(2017-01-26)

ちなみに、問題文には、 xiangqi とだけ書いてありました。xiangqi は「中国の将棋」の意味らしいです。ChChesと合致しますね。

なんか、このページには、この怪しげなクッキーから通信内容を復号化するソースコードまで書かれています。

ソルバ

後は・・・やるだけ!ではないです。URLエンコーディングされている箇所があるので、そこだけ置換します。

%3D → =
%2F → /
%2B → +
from Crypto.Cipher import ARC4
import hashlib

cookie_data="asdf=d01J5ln6eJxopAgX2SgmLRYGt5X70XRw4HL6sFoDbvWD5yQ=;qwer=fJDeRjsja7z8wcPVLrZzm6jYl3UsvQC9AoduZgL24n1NYs8=;zxcv=/vox+i3on9Iy1U+2itypfjagJ06762d9yfkxI/LgSq3a2PJXwdnQ8BhDI9ofW9HXXSQMaEXBkYdrun+F+xIi3a+3TvHY"
data_list = cookie_data.split(';')
dec = []
for i in range(len(data_list)):
    tmp = data_list[i]
    pos = tmp.find("=")
    key = tmp[0:pos]
    val = tmp[pos:]
    md5 = hashlib.md5()
    md5.update(key)
    rc4key = md5.hexdigest()[8:24]
    rc4 = ARC4.new(rc4key)
    dec.append(rc4.decrypt(val.decode("base64"))[len(key):])
print("[*] decoded: " + "".join(dec))

実行結果

[*] decoded: AWIN7-PC*1234*TMCTF{e3526984696bc9f89ac88d4f72abe24}?361846839?C:\Users\win7\AppData\Local\Temp?1.7.3 (1024x768)*6.1.7601.17514


コメント

クリップボードから画像を追加 (サイズの上限: 100 MB)