UUT CTF

UUT CTF writeup Bad JS

Bad JS

100

Web

There is a bad JS which hides flag inside. Capture it.

Chromeで表示して開発者ツールを起動するとdebuggerで停止してしまうので、JS.jsファイル中の'\x64\x65\x62\x75'='debu'を空文字列''に置換、'\x67\x67\x65\x72'='gger'を空文字列''に置換します。
再度、Chromeで表示してブレークポイントを設定し、先頭にある_0x1b00の内容を参照します。Base64でエンコードされていますので、怪しいものを1つずつデコードしていくと、_0x1b00[48]="RmxhZyBpczogTUQ1KDEyNy4wLjAuMSk="が次の文字列にデコードできます。
Flag is: MD5(127.0.0.1)
MD5ハッシュ値を求めます。
f528764d624db129b32c21fbca0cb8d6
フラグは、
UUTCTF{f528764d624db129b32c21fbca0cb8d6}
です。



UUT CTF writeup Break the RSA

Break the RSA

50

Flag is the decryption of the following:

PublicKey= (114869651319530967114595389434126892905129957446815070167640244711056341561089,113)

CipherText=102692755691755898230412269602025019920938225158332080093559205660414585058354


PublicKeyをfactordbで素因数分解します。素因数分解できますので次のPythonプログラムで復号できます。
def exgcd(m, n):
  if n>0:
    y,x,d = exgcd(n, m%n)
    return x, y-m/n*x, d
  else:
    return 1, 0, m

n = 114869651319530967114595389434126892905129957446815070167640244711056341561089
e = 113
c = 102692755691755898230412269602025019920938225158332080093559205660414585058354

p = 338924256021210389725168429375903627261
q = 338924256021210389725168429375903627349
d = exgcd(e, (p-1)*(q-1))[0] % ((p-1)*(q-1))
s = pow(c, d, n)
h = format(s, 'x')
f = ''
for i in range(0, len(h), 2):
f += chr(int(h[i:i+2], 16))
print(f)
フラグは、
UUTCTF{easy sH0Rt RSA!!!}

UUT CTF writeup Again Find the Flag

Again Find the Flag

100

Linux

Run, enter correct password and capture the flag.

Flag is MD5 of the correct password:

UUTCTF{MD5(Correct Password)}

objdumpコマンドで逆アセンブルします。
$ objdump -s -D -M intel chal_re_med.so >aaa.txt
以下の箇所で入力文字列の長さが19文字であることをチェックしています。
 772: 48 c7 c1 ff ff ff ff mov    rcx,0xffffffffffffffff
 779: f2 ae                repnz scas al,BYTE PTR es:[rdi]
 77b: b8 00 00 00 00        mov    eax,0x0
 780: 48 83 f9 eb          cmp    rcx,0xffffffffffffffeb #19文字
 784: 74 23                je     7a9
以下の箇所で4文字目、9文字目、14文字目が_であることをチェックしています。
 7c1: 80 3c 32 5f          cmp    BYTE PTR [rdx+rsi*1],0x5f #4文字目、9文字目、14文字目_
 7c5: 0f 85 31 02 00 00    jne    9fc
以下の箇所で0文字目、5文字目、10文字目、15文字目が9以下であることをチェックしています。
 7da: 80 f9 09              cmp    cl,0x9
 7dd: 0f 87 23 02 00 00    ja     a06 #0文字目、5文字目、10文字目、15文字目9より大きいNG
以下の箇所で1~3文字目、6~8文字目、11~13文字目、16~18文字目が9以下であることをチェックしています。
 7f4: 80 f9 09              cmp    cl,0x9
 7f7: 76 ea                jbe    7e3 #1~3、6~8、11~13、16~18文字目9以下OK
以下の箇所で、0x55555556×nは、nが0~2のとき桁あふれ(edx)は0、3~5のときedxは1、・・・となります。したがって、(0文字目+1文字目+2文字目+3文字目+5文字目+6文字目+7文字目+8文字目+10文字目+11文字目+12文字目+13文字目)÷3の商と(15文字目+16文字目+17文字目+18文字目)が一致することをチェックしています。
 984: ba 56 55 55 55        mov    edx,0x55555556
 989: 89 c8                mov    eax,ecx #eax=0文字目+1文字目+2文字目+3文字目+5文字目+6文字目+7文字目+8文字目+10文字目+11文字目+12文字目+13文字目
 98b: f7 ea                imul   edx #eax=eax×edx、edxは桁あふれ
 98d: c1 f9 1f              sar    ecx,0x1f #右31ビットシフト、ecx=0
 990: 29 ca                sub    edx,ecx
 992: b8 00 00 00 00        mov    eax,0x0
 997: 41 39 d0              cmp    r8d,edx
 99a: 0f 85 e6 fd ff ff    jne    786 #15文字目+16文字目+17文字目+18文字目とedxが一致しないとNG
以下の箇所で、同様に、(10文字目+11文字目+12文字目+13文字目)÷3の商と(0文字目+1文字目+2文字目+3文字目)が一致することをチェックしています。
 9a0: ba 56 55 55 55        mov    edx,0x55555556
 9a5: 89 f0                mov    eax,esi #eax=10文字目+11文字目+12文字目+13文字目
 9a7: f7 ea                imul   edx #eax=eax×edx、edxは桁あふれ
 9a9: c1 fe 1f              sar    esi,0x1f #右31ビットシフト
 9ac: 29 f2                sub    edx,esi
 9ae: 44 39 da              cmp    edx,r11d
 9b1: 75 05                jne    9b8 #edxと0文字目+1文字目+2文字目+3文字目が一致しないとNG
以下の箇所で、(0文字目+1文字目+2文字目+3文字目)と(5文字目+6文字目+7文字目+8文字目)が一致しないことをチェックしています。
 9b3: 45 39 eb              cmp    r11d,r13d
 9b6: 75 0a                jne    9c2 #0文字目+1文字目+2文字目+3文字目と5文字目+6文字目+7文字目+8文字目が一致しなければOK
以下の箇所で、0~3文字目と10~13文字目の各桁が一致しないことをチェックしています。
 9c2: 48 8d 74 24 30        lea    rsi,[rsp+0x30] #10文字目
 9c7: 48 8d 7c 24 10        lea    rdi,[rsp+0x10] #0文字目
 9cc: e8 49 fd ff ff        call   71a <sameAtIndex>
以下の箇所で、同様に、5~8文字目と15~18文字目の各桁が一致しないことをチェックしています。
 9e0: 48 8d 74 24 40        lea    rsi,[rsp+0x40] #15文字目
 9e5: 48 8d 7c 24 20        lea    rdi,[rsp+0x20] #5文字目
 9ea: e8 2b fd ff ff        call   71a <sameAtIndex>
以上を満たす入力値として"1234_5678_6789_4567"を試してみます。
$ ./chal_re_med.so 1234_5678_6789_4567

You entered it right! Congratulations
合っているようなのでmd5ハッシュ値を求めてsubmitしますがフラグではないようです。
UUTCTF{26973e24d232cc103a9e778554193cb3}
他にもいくらでも条件を満たす入力値があります。
$ ./chal_re_med.so 2341_5678_6789_4567

You entered it right! Congratulations

$ ./chal_re_med.so 3333_6666_9999_5577

You entered it right! Congratulations
結局フラグは分かりません。



UUT CTF writeup Find The Password

Find The Password

25

Windows

Run the application and find the password.

fileコマンドでファイルタイプを確認します。
$ file FindThePassword.exe 
FindThePassword.exe: PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows
.NetアプリケーションなのでILSpyで逆コンパイルします。Form2のリソースのPictureBox1.Imageの画像データにフラグが記載されています。

1

Y0u_h4v3_f0uNd_coRr3Ct_FL4Gのsha1ハッシュ値を求めます。
フラグは、
UUTCTF{6DEE35B953027DEBE077E05BBE7E488F8AB335C4}
です。



UUT CTF writeup Web WarmUp

Web WarmUp

10

Literally, find the flag!

解凍するとhtmlファイルができます。ブラウザで表示して選択するとフラグが見えます。
フラグは、
UUTCTF{P0SCon: Welcome to UUTCTF! Happy hacking ;)}
です。



UUT CTF writeup Layers

Layers

50

Layers are here.

stringsコマンドでファイル中の文字列を調べます。
$ strings Layers.jpg | grep uutctf
" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c067 79.157747, 2015/03/30-23:40:42        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmp:CreatorTool="Adobe Photoshop CC 2015 (Windows)" xmp:CreateDate="2019-04-24T19:13:26+04:30" xmp:MetadataDate="2019-04-24T19:13:26+04:30" xmp:ModifyDate="2019-04-24T19:13:26+04:30" xmpMM:InstanceID="xmp.iid:6e14b5a5-6194-4e4a-b78e-f71bbb92395f" xmpMM:DocumentID="adobe:docid:photoshop:39915134-669f-11e9-8555-e8884e2d43b9" xmpMM:OriginalDocumentID="xmp.did:e3606230-6b16-8a49-975e-c9718a22e944" photoshop:ColorMode="3" photoshop:ICCProfile="sRGB IEC61966-2.1" dc:format="image/jpeg"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="created" stEvt:instanceID="xmp.iid:e3606230-6b16-8a49-975e-c9718a22e944" stEvt:when="2019-04-24T19:13:26+04:30" stEvt:softwareAgent="Adobe Photoshop CC 2015 (Windows)"/> <rdf:li stEvt:action="saved" stEvt:instanceID="xmp.iid:6e14b5a5-6194-4e4a-b78e-f71bbb92395f" stEvt:when="2019-04-24T19:13:26+04:30" stEvt:softwareAgent="Adobe Photoshop CC 2015 (Windows)" stEvt:changed="/"/> </rdf:Seq> </xmpMM:History> <photoshop:TextLayers> <rdf:Bag> <rdf:li photoshop:LayerName="uutctf{can_you_see_me}" photoshop:LayerText="uutctf{can_you_see_me}"/> </rdf:Bag>
フラグは、
uutctf{can_you_see_me}
です。

コマンドで覚えるLinux
一戸 英男
ソシム
2016-10-12


UUT CTF writeup The Puzzle

The Puzzle

75

Windows

Solve the puzzle!

ILSpyで逆コンパイルします。Image_part_001~Image_part_009の9つのリソースを抽出します。抽出した9つの画像ファイルを縦横につなげてQRコードの画像ファイルを作ります。

1

PythonでこのQRコードを読み取らせます。
from PIL import Image, ImageSequence
from pyzbar.pyzbar import decode

im = Image.open('1.png')
data = decode(im)
print(data[0][0].decode('utf-8', 'ignore'))
実行するとBase64のエンコード文字列が得られます。
$ python aaa.py
VVVUQ1RGe21kNShJX2wwVjNfcEw0eTFOZ19QdVp6MWVTKX0=
Base64でデコードします。
$ python aaa.py | base64 -d
UUTCTF{md5(I_l0V3_pL4y1Ng_PuZz1eS)}
フラグは、
UUTCTF{9ad589e4c948c9ecd46bf2c55c3049b5}
です。



UUT CTF writeup Solve the Crypto

Solve the Crypto

25

Solve this Crypto and find the flag.

RsaCtfToolを使います。
$ python RsaCtfTool.py --publickey pub.key --private > priv.key
opensslコマンドで復号します。
$ openssl rsautl -decrypt -in enc.message -inkey priv.key
SGllcl9pc3RfZGVpbmVfRmxhZ2dl
Base64でデコードします。
$ openssl rsautl -decrypt -in enc.message -inkey priv.key | base64 -d
Hier_ist_deine_Flagge
フラグは、
UUTCTF{Hier_ist_deine_Flagge}
です。



記事検索
ギャラリー
  • TetCTF 2023 NewYearBot
  • UUT CTF writeup Find The Password
  • UUT CTF writeup The Puzzle
  • Hack Zone Tunisia 2019 writeup Microscope
  • Hack Zone Tunisia 2019 writeup Welcome
  • SwampCTF 2019 writeup Brokerboard
  • SwampCTF 2019 writeup Leap of Faith
  • SwampCTF 2019 writeup Last Transmission
  • CBM CTF 2019 writeup Long road
カテゴリー