1. 程式人生 > 實用技巧 >初探SQL注入需要知道的5個問題

初探SQL注入需要知道的5個問題

SQL注入產生原理

  1. 可控變數(注入點,就是傳參)
  2. 帶入資料庫查詢
  3. 變數未存在過濾或過濾不嚴謹

例子:

獲取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注入發現及利用方式

由於SQL注入屬於WEB應用層,發現的話可以採用web掃描器或手工檢測,利用的話也是分為工具及手工(相互配合使用,工具不一定萬能),常用工具Sqlmap。

SQL注入的攻擊方式的影響因素

  • 資料庫型別

不同資料庫型別導致不同攻擊方式
access
mysql
mssql
Oracle
postSQL等

  • 提交方式

引數傳遞的提交方式不同型別導致不同攻擊方式
get
post
HTTP
全域性提交
cookie等

  • 引數型別

引數的資料型別導致不同攻擊方式
數字
字元
搜尋

  • 繞過注入

waf防護
程式碼防護
函式防護
其他防護

  • SQL查詢型別

select
insert
update
delete等

  • 盲注或複雜注入

各類複雜的注入問題
延時注入
二次注入
邏輯注入等

SQL注入環境搭建常見問題

初學者建議搭建sqli-labs靶場學習

如果出現搭建錯誤:mysql_connet()函式版本不相容,解決方法:

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可以自動測試兩個引數