iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
Security

一天一題picoCTF:從Easy開始的新手生活系列 第 19

Day 19 - SQL injection

  • 分享至 

  • xImage
  •  

SQL Injection 是 Web 題裡最經典、也常出現的漏洞之一:攻擊者把惡意 SQL 送進應用,使後端資料庫回傳敏感資料或執行未授權查詢。

前情提要:我自己在學SQL Injection前有先在w3school大概看過SQL語法,有興趣的也可以先去看看會比較了解接下來在說甚麼ㄛ → https://www.w3schools.com/sql/default.asp

什麼是 SQL Injection?

  • 當使用者輸入直接拼接到 SQL 字串中,未妥善過濾/參數化,攻擊者可插入 SQL 指令。
  • 常見類型:Error-based、Union-based、Boolean-based Blind、Time-based Blind

常見類型

Error-based

檢測時看什麼:頁面有 SQL/DB 的錯誤訊息、stack trace、或明顯的例外回傳。

快速 payload

  • 在可疑參數後試 '"(看有無錯誤)

注意事項:若出現資料庫錯誤,速度快且資訊豐富,但不同 DBMS 要用不同技巧。

Union-based

檢測時看什麼:頁面顯示列表/表格或查詢結果,嘗試用 UNION 可以把你控制的欄位合併回顯

快速 payload

  • 先找欄位數:' UNION SELECT NULL--' UNION SELECT NULL,NULL--
  • 找到後放資料:🌰' UNION SELECT NULL, CONCAT(database(),0x3a,version()), NULL--

注意事項:必須對齊欄位數與型別;若有過濾或轉義需嘗試不同表示法。

Boolean-based Blind

檢測時看什麼:頁面沒有直接回顯,但送不同條件會導致頁面內容或長度有差異(true/false 行為差別)。

快速 payload

  • 基本判斷:' AND 1=1--(應與正常頁面相同),' AND 1=2--(應不同)
  • 推測字元:' AND SUBSTRING((SELECT database()),1,1)='a'--(若回應同真則第一字是 a)

注意事項:很慢,需要大量請求,自動化工具或腳本能節省時間。

Time-based Blind

檢測時看什麼:頁面無回顯也無顯著差異,但可透過伺服器回應時間判斷條件真偽(延遲作為訊號)。

快速 payload

  • MySQL 範例:' AND IF(SUBSTRING((SELECT database()),1,1)='a', SLEEP(5), 0)--

注意事項:最慢的盲注方式,容易被速率限制或監控發現;測試時調整延遲秒數避免誤判。

快速檢測技巧

在碰到新頁面或參數時,先用幾個最常見的簡單 payload 做快速檢測:

  1. 單引號測錯
    • 測法:在參數值後加一個單引號 '(例如:id=1')或雙引號 "
    • 目的:如果伺服器回傳 SQL 錯誤(syntax error、stack trace),就有很大機率存在注入。
  2. 簡單登入繞過(常見範例)
    • 範例 payload:
      或在登入的 username/password 搭配:' OR 1=1 --

      username: ' OR '1'='1' --
      password: anything
      
    • 說明:OR 1=1 會讓條件永遠為真,-將後面的原 SQL 註解掉,若應用沒有做參數化或權限檢查,可能直接繞過登入。

    • 注意:不同資料庫的註解符號略有差異(MySQL 常用 -#,MSSQL 也支援 -),測試時視情況調整。

接下來來看今天的題目!

picoCTF - SQLiLite

打開網頁之後是一個登入畫面,我們先隨便打點東西看看

https://ithelp.ithome.com.tw/upload/images/20250914/20169105CKUIWp25a9.png

可以發現它會把我們的輸入直接填入SQL query 中,所以我們可以用上面教的方法,在username填入' OR '1'='1' -- 繞過登入!

https://ithelp.ithome.com.tw/upload/images/20250914/20169105wz2Y02vhRF.png

打開開發者工具就能找到flag了👀

https://ithelp.ithome.com.tw/upload/images/20250914/20169105mrS5O1Z7GP.png

題單

  • Irish-Name-Repo 1
  • Irish-Name-Repo 2
  • Irish-Name-Repo 3
  • SQL Direct
  • Web Gauntlet
  • Web Gauntlet 2
  • Web Gauntlet 3

以上就是今天的內容啦!

想看更多,記得明天再來喔~


上一篇
Day 18 - burp suite
系列文
一天一題picoCTF:從Easy開始的新手生活19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言