iT邦幫忙

2026 iThome 鐵人賽

DAY 7
0
Security

CTF 菜鳥修練日誌系列 第 7 篇

Day 07:【Web】SQL Injection 實戰 (二):使用 Union Based 撈出隱藏資料

  • 分享至 

  • xImage
  •  

前言

在 Day 06 中,我們學習了最基礎的萬能密碼 admin' OR '1'='1。但在實際解題或資安實戰中,伺服器通常不會毫無防備地讓我們輸入 OR 或 UNION 等關鍵字。

今天我們要透過 PicoCTF 的 Irish-Name-Repo 2 實戰,紀錄當我們輸入教科書語法被黑名單攔截(顯示 SQLi detected.)時,如何透過「製造報錯」來推測後端資料庫架構,並精準構造繞過 Payload 拿到 Flag!


本日目標

透過 PicoCTF 實戰,掌握以下核心技能:

  1. 識別常見的黑名單過濾機制(如 SQLi detected. 攔截警告)。
  2. 學會解讀資料庫錯誤訊息(Error-Based SQLi 分析)並推測後端 SQL 結構。
  3. 掌握針對特定過濾器(過濾 OR 關鍵字)的語法繞過技巧(Bypass)。

實戰題目:PicoCTF - Irish-Name-Repo 2

  • 題目分類: Web Exploitation
  • 題目敘述: 網頁提供了一個管理員登入頁面(Admin Login),嘗試在不知道密碼的情況下成功登入。

解題實戰過程:從踩坑到成功繞過

踩坑一:遭遇黑名單攔截 (SQLi detected.)

嘗試在 Username 欄位輸入標準萬能密碼 admin' OR '1'='1 或 ORDER BY 1 時,畫面立刻顯示:

SQLi detected.

https://ithelp.ithome.com.tw/upload/images/20260921/20184211M0Df8r3p6Y.png
觀念拆解:
這代表後端程式碼使用了字串檢查(Blacklist Filter),只要偵測到OR、ORDER、UNION等關鍵字就會直接攔截。因此經典的' OR '1'='1在這裡失效了。

踩坑二:故意製造報錯,捕捉關鍵情報 (Error-Based)

為了搞清楚後端的資料庫類型與語法結構,我們嘗試只輸入一個單引號:

Username: admin'

Password: 123

結果網頁並沒有跳出SQLi detected.,而是噴出了極具價值的 PHP / 資料庫警告訊息

Warning: SQLite3::query(): Unable to prepare statement: 1, near "123": syntax error in /var/www/html/login.php on line 38
Fatal error: Uncaught Error: Call to a member function fetchArray()...

https://ithelp.ithome.com.tw/upload/images/20260921/201842118dPK97QE1e.png

從報錯訊息得出的三大關鍵情報:

1.資料庫類型: 後端使用的是 SQLite3(註解符號為 --)。
2.語法錯誤位置: 錯誤發生在near "123"(密碼欄位)。
3.後端 SQL 結構推測:

SELECT * FROM users WHERE name='$username' AND password=$password;

因為我們輸入的admin'帶有單引號,打破了原本的字串閉合結構,導致 SQL 解析到密碼123時產生語法錯誤!

關鍵轉折:構造 admin'-- 精準繞過

既然確定了後端是SQLite3,且黑名單主要封鎖的是OR關鍵字,我們根本不需要使用OR!只要能讓資料庫確認 admin帳號存在,並把後續的密碼檢查註解掉即可。

最終 Payload:

Username: admin'--

Password: 隨便輸入(如123)

SELECT * FROM users WHERE name='admin'--' AND password=123;
解析:

admin':成功閉合帳號欄位。

--:在 SQLite 中代表註解符號,將後方的' AND password=123全部變為註解並忽略!

最終執行的 SQL 變成了純粹的 SELECT * FROM users WHERE name='admin'。

成功取得 Flag

按下 Login 提交後,成功繞過密碼檢查並以管理員身分登入!

Flag: picoCTF{m0R3_SQL_plz_8c334129}
https://ithelp.ithome.com.tw/upload/images/20260921/20184211y8Wk0i0gEL.png


上一篇
Day 06:【Web】SQL Injection 終極入門 (一):1' OR '1'='1 的魔力
下一篇
Day 08:【Web】Command Injection:當網頁輸入框變成 Terminal
系列文
CTF 菜鳥修練日誌 共 10 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言