初探SQL注入需要知道的5個問題
阿新 • • 發佈:2020-12-19
- 可控變數(注入點,就是傳參)
- 帶入資料庫查詢
- 變數未存在過濾或過濾不嚴謹
例子:
獲取admin表的pass裡面的資料
select * from users where id=1 union select 1,pass,3,4 from admin //正常執行的SQL查詢命令 http://127.0.0.1:8080/test.php?x=1 union select 1,pass,3,4 from admin //有注入點的SQL注入示例
http://127.0.0.1:8080/test.php?x= //注入點,可控變數
修改URL地址上的引數值,就等於修改對應執行的SQL語句(利用自定義的SQL語句達到查詢指定資料)
SQL注入的危害?
資料庫資料洩露,檔案操作,資料讀取等
資料洩露可導致後臺許可權,後臺許可權導致網站許可權,網站許可權導致伺服器許可權。。。。。。
由於SQL注入屬於WEB應用層,發現的話可以採用web掃描器或手工檢測,利用的話也是分為工具及手工(相互配合使用,工具不一定萬能),常用工具Sqlmap。
- 資料庫型別
不同資料庫型別導致不同攻擊方式
access
mysql
mssql
Oracle
postSQL等
- 提交方式
引數傳遞的提交方式不同型別導致不同攻擊方式
get
post
HTTP
全域性提交
cookie等
- 引數型別
引數的資料型別導致不同攻擊方式
數字
字元
搜尋
- 繞過注入
waf防護
程式碼防護
函式防護
其他防護
- SQL查詢型別
select
insert
update
delete等
- 盲注或複雜注入
各類複雜的注入問題
延時注入
二次注入
邏輯注入等
初學者建議搭建sqli-labs靶場學習
1.降低PHP版本
2.修改程式碼中的mysql連線函式
注意經常遇到的問題:
www.xxx.com/php?page=1&id=5 該注入點如果用以前過時的注入工具對這個地址注入時,很可能只在後面加上判斷語句:
www.xxx.com/php?page=1&id=5 and 1=1
這就造成了,只測試到id引數,而前面的page引數測試不到,所以我們要把id和page引數位置調換一下:
www.xxx.com/php?id=5&page=1 and 1=1
這樣才行,使用sqlmap可以自動測試兩個引數