読者です 読者をやめる 読者になる 読者になる

WhiteHat Challenge 03 Writeup

この大会は2017/4/27 11:00(JST)~2017/4/27 19:00(JST)に開催されました。
今回は仕事の合間に個人で参戦。結果は70点で101チーム中42位でした。
自分で解けた問題をWriteupとして書いておきます。

Crypto001 (Cryptography 25)

単語ごとに反転して、11シフトする。

import string

al_U = string.uppercase

e = 'HJXAJY GPHTPR HPL P CPBDG APGTCTV SCP CPXRXIXADE DWL LTGWIGTKD TWI CPBDG RXAQJETG SCP STWHXAQPIHT TWI TAJG UD TWI HGDGTEBT. GPHTPR STHJ TWI HBTAQDGE SCP HEXWHSGPW UD TWI SDXGTE DI TIPTGR HXW CLD TBTGEJH APRXIXADE SCP NGPIXAXB GTLDE. VPAU HX TWI GPTN IPWI GPHPTR HPL CGDQ. CPBDG GDGTEBT HJXAJY GPHTPR HX STSGPVTG HP TCD UD TWI IHDB AJUGTLDE SCP AJUHHTRRJH HGTSPTA CX TWI NGDIHXW UD TWI SAGDL. HXW TUXA SCP HXW ICTADXK WIPTS TKPW CTTQ NATSXL STIPGQTATR CX TGJIPGTIXA SCP BAXU.'

words = e.split(' ')

m = ''
for i in range(len(words)):
    if words[i][-1:] == '.':
        word = words[i][::-1][1:] + '.'
    else:
        word = words[i][::-1]
    #print word
    for j in range(len(word)):
        if word[j] in al_U:
            index = al_U.index(word[j]) + 11
            if index > 25:
                index = index - 26
            m += al_U[index]
        else:
            m += word[j]

    if i != len(words) - 1:
        m += ' '

print m

実行結果は次の通り。

JULIUS CAESAR WAS A ROMAN GENERAL AND POLITICIAN WHO OVERTHREW THE ROMAN REPUBLIC AND ESTABLISHED THE RULE OF THE EMPERORS. CAESAR USED THE PROBLEMS AND HARDSHIPS OF THE PERIOD TO CREATE HIS OWN SUPREME POLITICAL AND MILITARY POWER. FLAG IS THE YEAR THAT CEASAR WAS BORN. ROMAN EMPEROR JULIUS CAESAR IS REGARDED AS ONE OF THE MOST POWERFUL AND SUCCESSFUL LEADERS IN THE HISTORY OF THE WORLD. HIS LIFE AND HIS VIOLENT DEATH HAVE BEEN WIDELY CELEBRATED IN LITERATURE AND FILM.

フラグはCeaserが生まれた年なので、紀元前100年。

$ echo -n 100 | sha1sum
310b86e0b62b828562fc91c7be5380a992b2786a  -
WhiteHat{310b86e0b62b828562fc91c7be5380a992b2786a}

Crypto002 (Cryptography 10)

n, p, q, e, cが与えられているので、そのままRSA暗号の復号を行う。

n = 132584825018166892036247821308754740533575984294912859418971244776769293548107490233355297115861255963076622070127865142205107181207673702587393494860613316425336008819081169031194442020498569601888048767385032364436395644961861833287918315793817245497784496450110641025476274978672298849300106831336352152221
p = 12476682960795779723419989287306239606331347310604553825605263028855086418051086300006278888049896375754096827163121306696417314531666670662341673511789487
q = 10626608485185909739187126602183513204215955466032868268570782358820047751795982373252873333276843831383542360202874683262678664975380865415068554992090483
e = 65537
c = 126028558760741438230925566962334702896791270808414391828894437291120207835997354509410869568173448979784329516392078311028442458946906210498176026685581176779209904039179175088984829699783861789249260322822491502790157863487861171337660785254139478229397872969136220001367017765809130698515063339265165085655

a = (p - 1) * (q - 1)

x = 0
while True:
    if (a * x + 1) % e == 0:
        d = (a * x + 1) / e
        break
    x = x + 1

m = pow(c, d, n)

flag = ('%x' % m).decode('hex')
print flag

復号結果は simple_rsa_decryption

$ echo -n simple_rsa_decryption | sha1sum
100be37579e0f27c314efcb68a773b31537b5118  -
WhiteHat{100be37579e0f27c314efcb68a773b31537b5118}

Web001 (Web Security 20)

ソースに次のように書いてある。

<!--test/test-->

testアカウントでログインすると、You are not admin.と表示される。クッキーのuserの値がtestになっているので、adminに書き換え、ページを更新するとフラグが表示される。

Flag: don't_believe_cookies_at_all
$ echo -n "don't_believe_cookies_at_all" | sha1sum
92b2bc2f657574ab3481ebcb6705c36079b3e6d7  -
WhiteHat{92b2bc2f657574ab3481ebcb6705c36079b3e6d7}

For002 (Forensics 15)

POST /accounts/login/ の箇所が数か所ある。No.505に対して302 Foundで返ってきている。No.505で投入しているパスワードは"@Bkav123#$challange3"

$ echo -n "@Bkav123#\$challange3" | sha1sum
0d712cbea97819fa1e1c0a605283b1b912bcf350  -
WhiteHat{0d712cbea97819fa1e1c0a605283b1b912bcf350}