SQL註入的測試方法
阿新 • • 發佈:2018-02-27
讀寫 因此 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註入的測試方法