Sqlmap
sqlmap支持的數據庫包括:
MySql、Oracle、PostgreSQL、Microsoft SQL Server、
Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB
sqlmap可探測類型:
基於布爾類型的盲注:根據返回頁面判斷條件真假的注入
基於時間的盲注:即根據頁面返回的內容判斷任何信息,要利用條件語句查詢時間延遲語句是否執行(即頁面返回的時間)來判斷
基於報錯的注入:頁面返回錯誤信息,或者把注入的語句的結果直接返回到頁面中
聯合查詢注入:在可以返回union的情況下的注入
堆聯合查詢注入:可以同時執行對條語句時的注入
sqlmap的功能
數據庫指紋識別
數據庫枚舉
數據提取
訪問目標文件系統,並在獲取完全的操作權限時實行任意命令注入
基本使用:
GET方式
sqlmap -u http://hostname/?id=1
當參數大於等於兩個時,需要將url加上雙引號
POST方式
sqlmap -u http://hostname/ --data="id=1&name=2"
或者抓包之后將請求頭放入req.txt中,然后sqlmap -r req.txt -p id
其他選項
-v:顯示信息級別,缺省為1
0、只顯示python嚴重的錯誤以及嚴重的信息
1、同時顯示基本信息和警告信息
2、顯示debug信息
3、同時顯示注入的payload
4、同時顯示http請求
5、同時顯示http的響應頭
6、同時顯示http的響應頁面
目標選擇:
-u url、-url=url:目標的url
-m:-m urls.txt,將目標地址保存在文件中,一行為一個url地址進行批量檢測
-r:-r post.txt,從文件中加載http請求,sqlmap可以從文本中獲取http請求,
可以跳過設置一些其他參數比如(cookie,post數據等)
請求是https時需要配合-force-ssl來使用,或者在host頭后面加上:443
-g:從google中加載結果目標url,只獲取前100個結果,需要掛代理
請求:指定如何連接到目標的url
-method=METHOD:強制使用給定的HTTP方法
--data = DATA:--data="id=1&name=2",通過POST發送數據參數
--cookie=COOKIE:設置http請求的cookie,level2時,會嘗試cookie注入,eg:"PHPSESSID=aaaa"
-A agent:修改http請求中的user-agent,也可以使用--random-agent參數,
隨機的從user-agent.txt中獲取。(level 3時會嘗試對user-agent注入)
-H :額外的http頭,eg:"X-Forwarded-For:127.0.0.1"
--referer:偽造http請求中的referer,level=3時,sqlmap嘗試referer注入
--host:HTTP請求的host
--ignore-code:忽略http請求error code eg:--ignore-404
--ignore-proxy:忽略系統的代理設置
--ignore-redirect:忽略重定向的嘗試
--ignore-timeout:忽略連接超時
--proxy=PROXY:通過代理服務器來連接目標url
--proxy-file=PROXY FILE:加載一個代理列表
--csrf-url=CSRFURL:url地址訪問提取anti-csrf令牌
--csrf-token=SCRF TOKEN:參數保存反CSRF令牌
--hpp :使用http參數污染的方法
--force-ssl:強制使用ssl/https
優化
-o:打開所有優化開關
--predict-output:預測普通查詢輸出
--keep-alive:使用持久http(s)連接
--null-connection:獲取頁面長度
--threads=THREADS:線程
注入
-p:可測試的參數
--skip=SKIP:跳過給定的參數
--skip-static:跳過不為動態的參數
--dbms=DBMS:設置后台數據庫
--os=OS:設置后端的DBMS操作系統
--tamper=TAMPER:設置腳本
檢測
--level=LEVEL:設置執行測試的等級。1-5
--risk=RISK:設置執行測試的風險。0-3
技巧
--technique:設置探測技術,默認情況下是所有方式(布爾型、報錯型、聯合查詢....)
--time-sec=TIMESEC:DBMS響應的延遲時間,默認為5s
--union-char=UHCAR:暴力猜測列的字符數
--union-form=UFORM:sql注入union查詢使用的格式
指紋
-f,--fingerprint:執行廣泛的DBMS版本指紋檢查
枚舉
-a:獲取所有信息
-b:獲取DBMS的banner信息
--current-user:獲取當前DBMS的用戶
--current-db:獲取當前DBMS的數據庫
--hostname:獲取主機名
--is-dba:檢測當前用戶是不是數據庫管理員
--users:枚舉DBMS用戶
--passwords:枚舉數據庫管理系統用戶密碼哈希
--privileges:枚舉數據庫管理系統用戶的權限
--roles:枚舉數據庫管理系統用戶的角色
--dbs:爆破數據庫
-D:指定數據庫
--tables:爆表
-T:指定表
--columns:爆字段
-C:指定某一列或者某些列
--schema:枚舉數據庫結構
--dump:轉儲數據庫表項(爆數據)
--dump-all:轉儲所有表項
--sql-shell:獲得交互式shell
訪問系統文件
需要是DBA權限
--file-read=FILES:從后端的數據庫管理系統文件系統讀取文件,eg:--file-read "/etc/passwd"
--file-write=WRITE:編輯后端數據庫管理系統的文件系統上的本地文件
--file-dest=DFILE:后端數據庫管理系統寫入文件的絕對路徑
sqlmap.py -u "http://www.xx.com/aa.aspx?id=123" --file-write=本地文件路徑 --file-dest 網站路徑(寫入路徑)+"/寫入的文件名"
sqlmap.py -u "http://www.xx.com/aa.aspx?id=123" --file-write=F:/a.aspx --file-dest D:/虛擬目錄/Front/cx.aspx
注:網站路徑必須為網站的真實物理路徑(即絕對路徑。也就是從盤符開始的路徑),否則無法寫入數據。
操作系統訪問
--os-shell:獲得shell
--os-cmd=OSCMD:執行操作系統的命令
其他選項
--batch:自動進行選擇操作
--charset=HCARSET:強制字符編碼
--identify-waf:進行waf、ips、ids保護測試
sqlmap腳本
space2comment.py
用/**/代替空格
apostrophemask.py
用utf8代替引號
equaltolike.py
like代替等號
space2dash.py
繞過過濾‘=’ 替換空格字符(”),(’–‘)后跟一個破折號注釋,一個隨機字符串和一個新行(’n’)
greatest.py
繞過過濾’>’ ,用GREATEST替換大於號。
space2hash.py
空格替換為#號,隨機字符串以及換行符
apostrophenullencode.py
繞過過濾雙引號,替換字符和雙引號。
halfversionedmorekeywords.py
當數據庫為mysql時繞過防火牆,每個關鍵字之前添加mysql版本評論
space2morehash.py
空格替換為 #號 以及更多隨機字符串 換行符
appendnullbyte.py
在有效負荷結束位置加載零字節字符編碼
ifnull2ifisnull.py
繞過對IFNULL過濾,替換類似’IFNULL(A,B)’為’IF(ISNULL(A), B, A)’
space2mssqlblank.py(mssql)
空格替換為其它空符號
base64encode.py
用base64編碼替換
space2mssqlhash.py
替換空格為#號,並添加一個字符
modsecurityversioned.py
過濾空格,包含完整的查詢版本注釋
space2mysqlblank.py
空格替換其它空白符號(mysql)
between.py
用between替換大於號(>)
space2mysqldash.py
替換空格字符(”)(’ – ‘)后跟一個破折號注釋一個新行(’ n’)
multiplespaces.py
圍繞SQL關鍵字添加多個空格
space2plus.py
用+替換空格
bluecoat.py
代替空格字符后與一個有效的隨機空白字符的SQL語句,然后替換=為like
nonrecursivereplacement.py
雙重查詢語句,取代SQL關鍵字
space2randomblank.py
代替空格字符(“”)從一個隨機的空白字符可選字符的有效集
chardoubleencode.py
雙url編碼(不處理以編碼的)
unionalltounion.py
替換UNION ALLSELECT UNION SELECT
unmagicquotes.py
寬字符繞過 GPCaddslashes
randomcomments.py
用/**/分割sql關鍵字
charunicodeencode.py
字符串 unicode 編碼
securesphere.py
追加特制的字符串
versionedmorekeywords.py
注釋繞過
space2comment.py
替換空格字符串(‘‘) 使用注釋‘/**/’
halfversionedmorekeywords.py
關鍵字前加注釋
percentage.py
asp允許在每個字符前面添加一個%號
sp_password.py
從DBMS日志的自動模糊處理的有效載荷中追加sp_password
charencode.py
對給定的payload全部字符使用url編碼
randomcase.py
隨機大小寫
modsecurityzeroversioned.py
使用mysql內聯注釋方式(/*!00000*/)進行注入
很多選項沒有一一嘗試,如有錯誤,請師傅們指出。
參考鏈接:
