sql盲註
在使用sql語句作為數據庫操作方式的系統中,因為程序員處理傳入參數不善而導致sql語句功能改變,從而利用這些改變對數據庫甚至系統造成信息泄漏、系統破壞的問題成為sql註入。
sql盲註是sql註入的一種,它通過傳入特殊參數,配合系統接口的正常、異常狀態返回,達到對系統以及數據庫信息進行猜測的目的。
舉個栗子:
(1)探測到某個接口,內容如下:
http://www.abc.com?a=1&b=2
返回值為
{"state":"1","msg":"Success"}
(2)後臺的在執行功能的時候有如下代碼
String sql = "select * from tb_test where a = ‘"+a+"‘
Statement createStatement = conn.createStatement();
createStatement.executeQuery(sql);
(3)那麽攻擊者就可以通過傳入這樣的參數對系統進行試探:
a=1%27;select%20*%20from%20user
也就是a=1‘;select * from user
(4)這時候後臺sql會變成
select * from tb_test where a = ‘1‘;select * from user
如果系統中存在user表,返回值為{"state":"1","msg":"Success"}
如果系統中不存在user表,返回值為{"state":"0","msg":"Error"}
攻擊者就很容易通過這樣的手段對系統進行猜測和破壞(假如沒有限制執行的是查詢,那麽參數弄成delete或者update,就可以為所欲為了……)。
解決方法:
(1)使用PreparedStatement進行sql預編譯,用參數化查詢的方式處理sql;
(2)限定sql操作範圍,比如使用註解@ReadOnly修飾查詢服務等;
(3)對輸入參數進行嚴格的格式校驗,剔除所有可能的異常值;
(4)使用一些能夠處理此類問題的開源框架;
(5)其他可行方法;
擴展學習
盲註手法:
https://www.cnblogs.com/fengh/p/6183928.html
https://www.cnblogs.com/lcamry/p/5763129.html
盲註常用方法:
http://blog.sina.com.cn/s/blog_15e7bc4bb0102wclz.html
逃過appscan盲註的最簡單方法:
http://blog.csdn.net/arthurzil/article/details/6863213
appscan誤報盲註解決方案:
http://blog.csdn.net/huqingpeng321/article/details/53521616
sql盲註