SQL注入繞過技術


SQL注入繞過技術

 

侵刪

來自公眾號:計算機與網絡安全 

原文鏈接:https://mp.weixin.qq.com/s?__biz=MjM5OTk4MDE2MA==&mid=2655139912&idx=2&sn=059aad0a9034584a6156cb6328b6b374&chksm=bc85a5a78bf22cb12281b6a58ed1baf3aa82ab5d74345ec19cc61403d6a62b214c1ba1a57f11&mpshare=1&scene=23&srcid=0806i0uyNToFUXm1JzP2GDMi&sharer_sharetime=1596701837322&sharer_shareid=ff83fe2fe7db7fcd8a1fcbc183d841c4#rd

 

 

微信公眾號:計算機與網絡安全

ID:Computer-network

 

1、大小寫繞過注入

 

大小寫繞過注入的測試地址:http://ccctf.cn/sql/1.php?id=1。

 

訪問id=1',發現頁面報出MySQL錯誤,當訪問id=1 and 1=1時,頁面返回“no hack”,顯然是被攔截了,說明有關鍵詞被過濾。使用關鍵字大小寫的方式嘗試繞過,如And 1=1(任意字母大小寫都可以,如aNd 1=1,AND 1=1等),可以看到訪問id=1 And 1=1時頁面返回與id=1相同的結果,訪問id=1 And 1=2時頁面返回與id=1不同的結果,得出存在SQL注入漏洞的結論,如圖1和圖2所示。

圖1  訪問id=1 And 1=1的結果

 

圖2  訪問id=1 And 1=2的結果

 

使用order by查詢字段數量,發現還是被攔截了,如圖3所示,還是利用修改關鍵字大小寫來繞過它,嘗試只改order這個單詞,結果發現當order改成Order后,頁面顯示正常,說明by並沒有被攔截,如圖4所示,最終通過嘗試,發現數據庫表中存在3個字段。

圖3  order by被攔截

 

圖4  Order by沒被攔截

 

接着,使用Union方法完成此次注入,如果仍然遇到關鍵字被攔截,則嘗試使用修改大小寫的方式繞過攔截。

 

2、雙寫繞過注入

 

雙寫繞過注入的測試地址:http://ccctf.cn/sql/2.php?id=1。

 

訪問id=1',發現頁面報出MySQL錯誤,接着訪問id=1 and 1=1,頁面依然報出MySQL的錯誤,但是從錯誤信息中可以看出,輸入的and 1=1變成了1=1,如圖5所示。

圖5  關鍵字and被過濾

 

因此可以得知,關鍵字and被過濾了。這時嘗試使用雙寫的方式繞過,如anandd 1=1,當and被過濾后,anandd變成了and,所以這時傳入數據庫的語句是and 1=1,結果如圖6所示,成功執行並返回正常頁面。

圖6  關鍵字anandd被過濾后正確執行

 

接着,輸入aandnd 1=2,返回錯誤信息,判斷頁面參數存在SQL注入漏洞。當訪問id=1 order by 3時,MySQL的錯誤信息為“der by 3”,如圖7所示,所以這里並沒有過濾order整個單詞,而是僅過濾or,因此只需要雙寫or即可,結果如圖8所示。

圖7  過濾了關鍵字or

 

圖8  雙寫關鍵字or

 

后面的注入過程與Union注入的一致。

 

3、編碼繞過注入

 

編碼繞過注入的測試地址:http://ccctf.cn/sql/3.php?id=1。

 

訪問id=1',發現頁面報出MySQL錯誤,接着訪問id=1 and 1=1和id=1 and 1=2時,發現關鍵字and被攔截。嘗試使用URL全編碼的方式繞過攔截。由於服務器會自動對URL進行一次URL解碼,所以需要把關鍵詞編碼兩次,這里需要注意的地方是,URL編碼需選擇全編碼,而不是普通的URL編碼。如圖9所示,關鍵字and進行兩次URL全編碼的結果是%25%36%31%25%36%65%25%36%34,訪問id=1%25%36%31% 25%36%65%25%36%34 1=1時,頁面返回與id=1相同的結果,如圖10所示,訪問id=1 %25%36%31%25%36%65%25%36%34 1=2時,頁面返回與id=1不同的結果,如圖11所示,所以該網址存在SQL注入漏洞。

圖9  兩次URL編碼關鍵字and

 

圖10  訪問id=1 and 1=1時的結果

 

圖11  訪問id=1 and 1=2時的結果

 

后面的注入過程與Union注入的一致,只需判斷過濾的關鍵詞,並經過兩次URL全編碼即可。

 

4、內聯注釋繞過注入

 

內聯注釋繞過注入的測試地址:http://ccctf.cn/sql/4.php?id=1。

 

訪問id=1',發現頁面報出MySQL錯誤,接着訪問id=1 and 1=1和id=1 and 1=2時,發現頁面提示“no hack”,即關鍵字被攔截。嘗試使用內聯注釋繞過。訪問id=1/*!and*/1=1時,頁面返回與id=1相同的結果;訪問id=1/*!and*/1=2時,頁面返回與id=1不同的結果,如圖12和圖13所示。

圖12  訪問id=1 /*!and*/1=1時的結果

 

圖13  訪問id=1 /*!and*/1=2時的結果

 

后面的注入過程與Union注入的一致。

 

5、SQL注入修復建議

 

常用的SQL注入漏洞的修復方法有兩種。

 

(1)過濾危險字符

 

多數CMS都采用過濾危險字符的方式,例如,采用正則表達式匹配union、sleep、load_file等關鍵字,如果匹配到,則退出程序。例如80sec的防注入代碼,如下所示。

使用過濾的方式,在一定程度上可以防止SQL注入漏洞,但仍然存在被繞過的可能。

 

(2)使用預編譯語句

 

其實使用PDO預編譯語句,需要注意的是,不要將變量直接拼接到PDO語句中,而是使用占位符進行數據庫的增加、刪除、修改、查詢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM