這是一種很常見的攻擊方式
通常你看網頁是列表或是一些比如商品詳細頁面之類的
如果存在 SQLi 應該很高機率是 Union Based
其手法應用到 SELECT
中的 UNION
UNION
用來將兩個 SELECT
的結果合併起來
那在這項攻擊手法中通常會需要 "猜" 出該張表中欄位的數量
因為 union
的兩邊所 SELECT
欄位數量必須相同
在 UNION 的同時
我們還需要一個小技巧
一般來說
如果猜對欄位後
前面的 SELECT 條件如果成立
會將我們後面可控的 SELECT
結果放在最下面
因此我們需要將前面的 SELECT
條件永遠不成立
使得我們可自訂的部分永遠存在最上面
不然的話
很多程式會選擇 SQL return 回來的第一條結果當作輸出
我們就看不到自己要的資料了
在 MySQL 與 MariaDB 中
有一個重要的 database 叫做 information_schema
在這之中分別有三張表會成為 union based 攻擊中的重要工具
SCHEMATA
TABLES
COLUMNS
從上面的縮圖中可以看到這三張表之間是層層相關的
SCHEMA_NAME
取得所需的 db 名稱TABLE_SCHEMA
鎖定 db 來找 TABLE_NAME
,列出屬於該 db 的表名COLUMNS
鎖定 TABLE_SCHEMA
與 TABLE_NAME
來找出 COLUMN_NAME
幫各位列個簡表
標上 查詢 的就是在該表中我們所要獲得的欄位名
到了這裡
基本的 SQLi 相信各位應該不陌生了 XD
有一個很好的 SQLi 練習站大家可以去那邊練練
他是一題一題的通關式 CTF
隨著越後面需要有更靈活的注入方式
=> 連結