關於sqlmap的兩個小坑

0x00 概述html

近日在利用sqlmap注入測試時遇到一個奇怪的現象,高版本sqlmap沒法檢測出注入,可是低版本的能夠測出注入,而且能跑出數據不是誤報,通過對比測試和查看sqlmap源碼,發現兩個小坑。python

0x01 情景重現git

注入點形式:json
……」whereparams」:[{「name」:」keyWord」,」value」:」test」}]}
可注入參數:value
sqlmap命令:
python sqlmap.py -r sqlpk.txt –flush-session -vv
sqlmap v1.2.11沒法注入github

clipboard.png

sqlmap v1.2成功注入sql

clipboard.png

同理v1.2.10沒法注入,v1.1.12能夠注入json

通過分析,兩坑以下:
(1)v1.2.11(/v1.2.10/v1.2.9/master)的boundaries.xml沒有了針對模糊查詢(%)的測試,而v1.2(/v1.1.12/1.1.4/1.2.2)則有。
(2)v1.2.11(/v1.2.10/1.2.9/master)必須手動設置json的某個參數爲*才能對這個參數進行注入(即便選了y-inject inside),不然payload直接跟在json後致使沒法注入,而v1.2(/v1.1.12)則能夠默認回車(y)便可對json的某個參數注入。session

0x02 詳細測試app

坑點(1):
先了解sqlmap的payload組成:ide

clipboard.png

//圖片來源https://www.freebuf.com/colum...工具

看看v1.2的測試payload:

clipboard.png

使用了payload:%‘ and 5731=5731 and ‘%’=’
這是挺常見的搜索框注入
看看V1.2的boundaries.xml:

clipboard.png

而v1.2.11的boundaries.xml沒有對模糊查詢的注入測試!
https://github.com/sqlmapproj...
因而添加模糊查詢的注入測試到v1.2.11的該文件中,並手動添加*到注入參數(如value),便可成功注入!
附上添加後的版本:
https://github.com/theLSA/sql...

clipboard.png

pr獲得答覆是由於誤報太多因此移除了相關payload,可是將會有限的恢復。
https://github.com/sqlmapproj...

坑點(2):
對比v1.2和v1.2.11的payload:

clipboard.png

能夠看出v1.2.11直接將payload接在json末尾了。
在注入參數value手動添加*
%22whereparams%22%3A%5B%7B%22name%22%3A%22keyWord%22%2C%22value%22%3A%22*%22%7D%5D%7D
便可成功注入!

0x03 結語

  1. 我的建議添加模糊查詢的測試payload,誤報仍是好過漏報,何況是很常見的模糊查詢注入。
  2. 遇到json參數儘可能加手動*(針對某些版本的sqlmap)。
  3. 利用sqlmap測試的時候建議加上-vv。
  4. 不能過於依賴工具,儘可能工具+手工測試比較保險。
相關文章
相關標籤/搜索