1. 程式人生 > >SQL註入的測試方法

SQL註入的測試方法

讀寫 因此 prepare OS 判斷 XML 1=1 ram mybatis框架

簡介

Web應用程序的數據存儲與讀取通過數據庫完成,而這些讀寫的操作通過SQL語句實現。實際項目中可能因為開發人員的疏忽或經驗問題,未對用戶可輸入的參數進行嚴格地校驗,導致用戶可能惡意地將SQL命令帶入數據庫執行,實現註入的目的。

SQL註入的條件

  • 參數中含有SQL語句,並可以帶入數據庫正常執行
  • Web應用程序和數據庫的交互中,必須有參數加入請求傳遞至數據庫

SQL註入的方法

1. 搜索型參數

判斷是否存在SQL註入漏洞,需滿足以下四步:

http://127.0.0.1/sql.php?Parameter=James    #正常查詢數據
http://127.0.0.1/sql.php?Parameter=James‘   #頁面異常或查詢數據為空
http://127.0.0.1/sql.php?Parameter=James%‘and‘%‘=‘  #正常查詢數據
http://127.0.0.1/sql.php?Parameter=James%‘and‘a%‘=‘b    #查詢數據為空或提示列表為空

2.數字型參數

判斷是否存在SQL註入漏洞,需滿足一下四步:

http://127.0.0.1/sql.php?Parameter=10001    #正常查詢數據
http://127.0.0.1/sql.php?Parameter=10001‘   #頁面異常或查詢數據為空
http://127.0.0.1/sql.php?Parameter=10001 and 1=1    #正常查詢數據
http://127.0.0.1/sql.php?Parameter=10001 and 1=2    #查詢數據為空或提示列表為空

3.字符型參數

判斷是否存在SQL註入漏洞,需滿足一下四步:

http://127.0.0.1/sql.php?Parameter=James    #正常查詢數據
http://127.0.0.1/sql.php?Parameter=James‘   #頁面異常或查詢數據為空
http://127.0.0.1/sql.php?Parameter=James‘ and ‘1‘=‘1    #正常查詢數據
http://127.0.0.1/sql.php?Parameter=James‘ and ‘1‘=‘2    #查詢數據為空或提示列表為空

後續

此外,一些註入的方法是通過Java+JDBC代碼註入(Statement接口改為PreparedStatement接口預防)、MyBatis框架註入(Mapper XML文件‘$‘‘拼接改為‘#‘‘拼接預防)等實現,因此對於一些對外的Web程序,SQL註入的檢查是必須的,否則通過SQL註入的漏洞,外部用戶可能獲取/修改數據或直接獲得管理員權限,這對生產環境來說都是致命的。

SQL註入的測試方法