造成原因:
可能同時存在的弱點:
了解SQL Injection Query (注入查詢)
SELECT Count (*) FROM Users WHERE UserName=’Blah’ or 1=1 –‘ AND Password=’Springfield’
Code Analysis
『blah’ or 1=1 -- 』
然後 SQL 查詢將看起來像:SELECT Count (*) FROM Users WHERE UserName=’Blah’ or 1=1 –‘ AND Password=’ ’
SELECT Count (*) FROM Users WHERE UserName=’Blah’ or 1=1
String strQry = “SELECT Count (*) FROM Users WHERE UserName=’ “ + txtUser.Text + “ ‘ AND Password=’ “ + txtPassword.Text + “ ‘ “;
Error Base SQL Injection
錯誤的sql注入強制資料庫執行某些操作,在這些操作中,結果將是一個錯誤,這種利用可能因資料庫管理系統而異
考慮如下所示的SQL查詢:
SELECT * FROM products WHERE id_product=$id_product
SELECT Name, Phone, Address FROM Users WHERE Id=1 UNION ALL SELECT oreditcardNuuber, 1,1 FROM CreditcardTable
包含加入一個偽造查詢連接到原始查詢,偽造查詢的結果將與原始查詢的結果聯接, 從而允許獲取其他表的欄位的值。
/*例如:*/
SELECT Name, Phone, Address FROM Users WHERE Id=$id
/*ID值設定:*/
$id=1 UNION ALL SELECT creditcardNumber,1,1 FROM CreditCardTable
/*最終査詢如下:*/
SELECT Name, Phone, Address FROM Users WHERE Id=1 UNION ALL SELECT creditCardNumber, 1,1 FROM CreditCardTable
※上面的査詢將原始査詢的結果與所有信用卡用戶連接起來SELECT * FROM用戶WHERE名稱= NOR1 ='1';
一種過於復雜的術語,用於描述數據庫系統在判斷語句是否為真時的行為。因為經常比較用戶ID和密碼,並且“真實”度量允許訪問,如果你通過提供已經存在的東西來欺騙數據庫(1確實等於1),那麼你可以偷偷摸摸。
SELECT * FROM user WHERE name = 'X' AND userid IS NULL; --';
Blind SQL Injection
當攻擊者知道數據庫容易被注入時,會發生這種情況,但錯誤消息和屏幕返回不會返回給攻擊者。因為有很多猜測和反複試驗,這次攻擊需要很長時間才能完成。
攻擊者→SQL Injection 攻擊→互聯網→防火牆→IDS Filters→安全管理者→Web應用程式→資料庫→實際資料→OS 介面→網路
1.CEHv9
2.SQL 注入原理: https://medium.com/@jaydenlin/淺談駭客攻擊-網站安全-一次看懂-sql-injection-的攻擊原理-b1994fd2392a