1. 程式人生 > >sql盲註

sql盲註

msg .net 後臺 lec ces tail 目的 execute 框架

  在使用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盲註