MOYAN
06 / WRITINGPERSONAL INDEX

AIS3 Junior 2026 Day1 Writeup : Web&Linux

AIS3 Junior 2026 第一天 Web 與 Linux 基礎題解,涵蓋 Linux 指令、Command Injection、SQLi、Path Traversal 與 File Upload。

閱讀時間
4分鐘

Writeup

·

2026年8月4日 (3週前)

Basic

Linux-1

首先題目跟 Linux 的指令有關,題目給了該目錄的內容 目標是找 flag

image

先用 cat 分別讀取三個 txt 看看

  1. notes.txt printer queue moved to the new office rack.

  2. todo.txt

    • review backup script
    • verify disk usage
    • rotate old logs
  3. welcome.txt Welcome to the Linux practice box. Try basic commands like pwd, ls, and cat>

基於 welcome.txt 先試 pwd

image

目前在 /app,但似乎沒啥用 結果注意到,flag 就在目錄那邊

image

cat flag 來讀取就得到 flag 了

image

Linux-2

這次題目不會再開局就給那麼多東西

image

先試試看 ls 看目前的目錄

image

跟上一題目差不多,只不過沒有 flag 那使用看 ls ../ 上一層有啥

image

看到這邊的 flag 了 使用 cat ../flag 讀取上一層的另外一個 (flag)

image

Linux-3

根據描述,我猜測跟上次的流程差不多,只不過不能用 cat (最常被拿來讀檔的那個指令)

image

直接使用 ls ../ 看看上一層

image

果然差不多,也看到 flag,只不過沒有辦法使用 cat 我去問 AI 讀取檔案除了 cat,還有什麼 他告訴我有 less 跟 more 先試試看 less ../flag

image

不知道是語法寫錯還怎樣,反正我換成 more ../flag 看看

image

找到 flag 了

WEB

Command Injection-1

這題類似於前面的 Basic,都跟指令有關

image

我先嘗試 lspwd,結果都無效

image

image

改輸入 0;,使用 ; 截斷前面的內容避免被擋

image

使用 0; ls ../ 退回上一層並列出找到 flag.txt

image

最後使用 0; cat ../flag.txt 成功找到 flag

image

Command Injection-2

image

我先嘗試隨意輸入,看輸出為何

image

注意到其結構為 {input}.crop.local 使用與先前相同的拼接技巧即可 0;cat ../flag.txt;

image

Command Injection-3

這題不能輸入,他提示 Default target

image

嘗試尋找哪裡有 target,按 F12 看看 HTML,發現對應的 target 那邊寫在前端,顯示 hidden

image

把 hidden 刪掉,就會變成可以輸入的狀態

image

使用前面的 0; cat ../flag.txt 即可找到 flag

image

SQLi-1

看起來很正常的一個登入介面 這題跟 SQL Injection 有關

image

使用萬用的 ' or '1' = '1' -- - 其中的 ' 因為是一對的,若在前面加上 ',他會被截斷在那邊 原本是 '{username}' 會變成 '{username}' 加上其他東西 {username}/{password} or '1' = '1' 當中的 or 是只要滿足一個即可 而 1=1 恆成立,-- 則會把後面變成注釋,後方的東西就會被無視 後面的 - 是為了確保 -- 後面有空格,避免某些情況解析失敗 在兩個欄位都輸入 ' or '1' = '1' -- - 即可拿到 flag

image

SQLi-2

這次要先輸入帳號密碼才能進入

image

image

進去後長這樣

image

在搜尋那邊使用上題的 ' or '1' = '1' -- - 就能直接查找到,多了個商品叫做 x7F9qL2mN0pR4,其商品介紹那欄就有 flag 了

image

SQLi-3

SQLi-2 的商品頁面,似乎是 union 型的

image

使用 0 ' UNION SELECT name,sql,type FROM sqlite_master -- 其中的 0 可以讓 DB 不會比對到任何資料,也不會報錯,這樣指令輸出就會有 UNION 後面的東西了 這邊是列舉 DB 的結構

image

secret_notes 的價格那欄有 flag 把 name 改成 flag,NULL 用來填充其他欄位,因為還有兩個不需要的欄位,所以需要兩個

使用 0 ' UNION SELECT flag,NULL,NULL FROM secret_notes -- 就能到 flag 了

image

Path Traversal

點進去長這樣

image

我先隨意輸入 Mujica 看看輸出

image

輸入 cat ../../flag.txt 沒反應

image

看來在 Path Traversal 中,後端已經主動讀取了,輸入這個會被視為檔名,試試看直接輸入 ../../flag.txt,發現改成這樣會被視為路徑,就成功了

image

Path Traversal-2

image

這次 ../ 被擋住了

image

URL 有替代字符可以繞過 . -> %2e / -> %2f

../../flag.txt 轉成 %2e%2e%2f%2e%2e%2fflag%2etxt 即可得到 flag

image

File Upload-1

這邊是跟上傳檔案相關的

image

image

先創造一個簡單的 php 透過 system 語法執行 shell <?php system($_GET['qqq']);?>(原本是用 cmd,在跟助教溝通時臨時改的) 我創建了一個檔案名為 114514.php 並將其上傳

image

我們得知了其路徑 /uploads/84b98400/114514.php,將其貼到 URL 後面,會看到這個

image

上面提到 qqq,所以我使用 ?qqq= 加在後面,並可以在 = 後面輸入指令,輸入 ls 進行測試

image

題目開頭有提示目標目錄 /var/www/html 所以我先 ls ../../ 發現 flag.txt 最後正是抓取使用 cat ../../flag.txt 找到 flag

image

備註:這題算上助教,當初花了 30 分鐘卡在加路徑那邊,結果發現是 ' 不知道為何在 Linux 裡面選擇英文輸入法卻會輸入中文的單引號

File Upload-2

跟前面那題長很像,不過前端不能上傳 php 了

image

image

要開啟 burp suite

image

因為他說只能傳圖檔,所以我把上一題用的 114514.php 先改為 114514.jpg

然後把 burp 的封包攔截打開,從那邊開一個額外的 chromium,從那開啟網頁,並上傳修改過的檔案

image

將檔案再改回 php,就能繞過了 因為他把限制做在了前端,所以能直接抓封包

剩下要做的跟之前差不多

不太一樣的是,burp 會把每次送出的請求攔截,所以要在 burp 那邊按 Forward

image

找到 /var/www/html -> 找到 flag.txt

cd ../../;cat flag.txt

得到 flag

FLAG{frontend_validation_bypass}