ひよこになりたい

Programming Server Network Security and so on

crypto200-1 Write up

まともに解いたのこれくらいだった。。

cryptの基礎が詰まってて結構面白かったのでWrite upしておきます。

crypto 200-1

H4x0R got this weird code while coming back from school. can you get a 32char code flag that can make him happy ?

[bash]

//一行

1f8b08089c452c530003737465703900edd85b6ec3300c44d1ffae86dc

ffe61ac7e1437403e42b1a171745d02a946c890713383537f3c7cb3c7e

8e37ec7c99d7fb39cbe3afaa5bac89f1735e5c3597bf263e571ef52ab5

49d6d759bb5eed2de6d7c56bf76d3f6de47d76ac8e9567c9bdefb0d7db

e16c3d67ded997bbb71eae3d8d7db8d796d6fed7fda317f808fb5ceaf8

48f9b48ee1a3e833ebf868f9901f6d9f59c747cb87fca8faacfbc1079f

bbf8ccfa469f1ce323999f4b1d9f6b7d8f4f1e161ff2732b1ff2a3eda3

911f7cb47d78bed6f6213fef7c667da3cfa58e0ff9c1071f7cf0f986cf

ace3830f3e1f7fffb9d4f1c147dd67d6f7f8f43ee0d37d34f29387c547

d6a7c6f828faf48ee1e335191f611ff283cf673e35c647d1a7770c1f2d

9fb33ff8a8fa909f3bf8cc3a3e5a3ee447d9a7c6f8a8f9f8da157c14ff

7f80cf1f3e1af9895ee0a3e973cec147d5270f8b8fa40fcf07da3ed10b

7ca6cfacefcc8f8d3a3e2af9e1f3ed9d8f467ef2b0f8e8e6071f599fe8

053e9a3ee4e7063e39c647d287fce0830f3effd327f6808fa6cfd2317c

b47c7a1ff0d1f3213fda3ee447db87fc68fbb4fbe123e8e36b57f0499f

59df989fd6317ce4f2137bc067f1d1c8cfd99f65ddebe0a976fcfef905

9996b432616b0000

[/bash]

16進数っぽいので、とりあえずASCIIコードに変換・・・

してみるも、全く読めず。元データの長さが944だったので、16で割り切れるな?と思い、16文字のハッシュ探しても見つからなかった。8文字はあったけど、うーん。

ひと通り試してだめだったので、ASCIIコードに変換した時に見つけたstep9という文字から、もしかしたら何かのファイルなのかなということで、バイナリエディタで直接貼り付けて、ファイル化してfileコマンドを実行してみた。

[bash]

$ file raw.bin

raw.bin: gzip compressed data, was "step9", from Unix, last modified: Fri Mar 21 22:58:52 2014

[/bash]

お、gzipぽい。早速gzipを解凍。

[bash]

// raw2(一行)

010011000101010101100100010000100・・・(中略)・・・1000011011001110011110100111101

[/bash]

2進数でてきた。

読みづらいので16進数に変換してみる。

[python]$ python

>>> raw2 = open("raw2.txt", "r")

>>> raw2tohex = open("raw2tohex.txt", "w")

>>> i = raw2.readline()

>>> raw2.close()

>>> h = hex(int(i, 2))

>>> raw2tohex.write(str(h))

>>> raw2tohex.close()

[/python]

開くと

[bash]

0x4C55644255316C42524651714A・・・(中略)・・・56436F6D4C544D7843673D3DL

[/bash]

0xとLを取ってASCIIコードに変換すると

[bash]

LUdBU1lBRFQqJi0yNS1H・・・(中略)・・・MzYtR0FTWUFEVComLTMxCg==

[/bash]

お、base64。デコードしてみる。

[bash]

-GASYADT*&-25-GASYADT*&-33-GASYADT*&-37-GASYADT*&-25-・・・(中略)・・・GASYADT*&-25-GASYADT*&-36-GASYADT*&-

[/bash]

GASYADTってなんぞ?とりあえずGASYADTを取り除いて数値だけ取り出す。

[bash]

//一行

253337253335253336253337253336253337253336253333253

333253631253332253636253332253636253336253333253336

253635253336253336253336253337253337253332253332253

635253336253338253336253636253336253338253336253331

253336253337253336253338253332253635253337253330253

336253332253337253631253332253636253333253337253333

253331253333253333253333253330253333253335253333253

335253333253334253332253636253330253631

[/bash]

だいぶ短くなってきた。

25が多いな?確か25は%だったから、URLエンコードかな?

というわけで、二文字おきに%でつないでURLデコード。

[python]

#coding: utf-8

def splitStr2(str, num):

l = []

for i in range(num):

l.append(str[i::num])

l = ["".join(i) for i in zip(*l)]

rem = len(str) % num  # zip で捨てられた余り

if rem:

l.append(str[-rem:])

return l

s = "2533372533352533362533372533362533372533362533332533332

536312533322536362533322536362533362533332533362536352533362

533362533362533372533372533322533322536352533362533382533362

536362533362533382533362533312533362533372533362533382533322

536352533372533302533362533322533372536312533322536362533332

533372533332533312533332533332533332533302533332533352533332

53335253333253334253332253636253330253631"

s2 = splitStr2(s, 2)

ans = ""

for v in s2:

ans += "%" + v

print(ans)

[/python]

出てきたものをURLデコード。

[bash]

%37%35%36%37%36%37%36%33%33%61%32%66%32%66%36%33%36%65%36%36%36%37%37%32%32%65%36%38%36%66%36%38%36%31%36%37%36%38%32%65%37%30%36%32%37%61%32%66%33%37%33%31%33%33%33%30%33%35%33%35%33%34%32%66%30%61

[/bash]

もういっちょ!

[bash]

756767633a2f2f636e6667722e686f686167682e70627a2f373133303535342f0a

[/bash]

ASCIIコードに直してみる。

[bash]

uggc://cnfgr.hohagh.pbz/7130554/

[/bash]

むむむっ これは換字式暗号。rot13をとりあえず試してみる。

[bash]

http://paste.ubuntu.com/7130554/

[/bash]

URLゲット!

アクセスすると

[bash]

5d3144233c46404dba4afc766601b997

[/bash]

32文字のMD5をゲットしました。これがフラグでした。

長かったけど楽しかった。

backdoorCTFは割と簡単な問題が多かったっぽい感じがするので、復習しておかないとな。。