
*****
## Sqlmap介紹
Sqlmap是一個開源的滲透工具,它可以自動化檢測和利用SQL注入缺陷以及接管數據庫服務器的過程。他有一個強大的檢測引擎,許多適合于終極滲透測試的小眾特性和廣泛的開關,從數據庫指紋、從數據庫獲取數據到訪問底層文件系統和通過帶外連接在操作系統上執行命令
官方網址:[http://sqlmap.org/](http://sqlmap.org/)
### Sqlmap特點
- 完全支持MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、HSQLDB和Informix等多種數據庫管理系統。
- 完全支持布爾型盲注、時間型盲注、基于錯誤信息的注入、聯合查詢注入和堆查詢注入。
- 在數據庫證書、IP地址、端口和數據庫名等條件允許的情況下支持不通過SQL注入點而直接連接數據庫。
- 支持枚舉用戶、密碼、哈希、權限、角色、數據庫、數據表和列。
- 支持自動識別密碼哈希格式并通過字典破解密碼哈希。
- 支持完全地下載某個數據庫中的某個表,也可以只下載某個表中的某幾列,甚至只下載某一列中的部分數據,這完全取決于用戶的選擇。
- 支持在數據庫管理系統中搜索指定的數據庫名、表名或列名
### Sqlmap的下載
```
http://sqlmap.org/
```
### sqlmap注入介紹
所謂SQL注入,就是通過把SQL命令插入到web表單提交或輸入域名或頁面請求的查詢字符串, 最終達到欺騙服務器執行惡意的SQL命令。具體來說,它是利用現有應用程序,將SQL命令注入 到后臺數據庫引擎執行的能力,它可以通過在web表單中輸入SQL語句得到一個存在安全漏洞 的網站上的數據庫,而不是按照設計者意圖去執行SQL語句
<br>SQL注入發生未知HTTP數據包中任意位置
### sqlmap輸出級別
參數:-v
Sqlmap的輸出信息按從簡到繁共分為7個級別依次為0、1、2、3、4、5和6。使用參數-v 來 指定某個等級,如使用參數-v 6來指定輸出級別為6。默認輸出級別為1。
- 0:只顯示Python的tracebacks信息、錯誤信息\[ERROR\]和關鍵信息\[CRITICAL\]
- 1:同時顯示普通信息\[INFO\]和警告信息\[WARNING\]
- 2:同時顯示調試信息\[DEBUG\]
- 3:同時顯示注入使用的攻擊荷載
- 4:同時顯示HTTP請求頭
- 5:同時顯示HTTP響應頭
- 6:同時顯示HTTP響應體
## Sqlmap獲取目標
### 1.sqlmap直連數據庫
- 服務型數據庫-MySQL,Oracle
```
python3 sqlmap.py -d "mysql://用戶名:密碼@地址:端口/數據庫名字" -f --banner --dbs --users
```
- 文件型數據庫-SQLite
### 2.sqlmap指定目標URL
sqlmap直接對單一URL探測,參數使用 -u 或者 --url
```
URL格式:http(s)://targetur\[:port\]/
```
### 3.sqlmap讀取不同文件類型進行SQL注入
1.為便于搜索引擎收錄,許多網站專門為搜索引擎生成了xml格式的站點地圖 參數是 -x
2.從多行文本格式文件讀取多個目標,對多個目標進行探測 參數是 -m
3.可以將一個HTTP請求保存在文件中,然后使用參數 -r
4.從配置文件sqlmap.conf中讀取目標探測 參數是 -c
## sqlmap設置請求參數
HTTP請求有很多種方法(method),可以在不同位置(GET、POST、cookie和User-Agent等)攜帶 不同參數。往往只有在特定位置攜帶了特定參數以特定方法發起的請求才是合法有效的請求。 Sqlmap運行時除了需要指定目標,有時還需要指定HTTP請求的一些細節。
### HTTP方法
一般來說,Sqlmap能自動判斷出是使用GET方法還是POST方法,但在某些情況下需要的可能是PUT 等很少見的方法,此時就需要用參數--method來指定方法。
### sqlmap設置post提交參數
參數 --data= ""
默認情況下,用于執行HTTP請求的HTTP方法是GET,但是可以通過提供在POST請求中發送的數據隱式 的將其改為POST。這些數據作為參數,被用于SQL注入檢測
### sqlmap中用來設置cookie的參數
```
--cookie
--cookie-del
--load-cookies
--drop-set-cookie
```
### 使用場景
> web應用程序具有基于cookie驗證的過程,要測試的頁面只有在登錄狀態下才能訪問,登錄狀態用 cookie識別
>想利用cookie值上的SQL注入漏洞,想要檢測是否存在cookie注入
### sqlmap使用cookie過程
- 1.登錄或瀏覽頁面
- 2.找到cookie
- 3.在sqlmap中使用--cookie cookie值
### sqlmap中用來設置user-agent
默認情況下,sqlmap使用以下用戶代理執行HTTP請求:
```
sqlmap/1.0-dev-xxxx(http://sqlmap.org)
```
### sqlmap指定user-agent
```
使用參數 --user-agent = '指定的user-agent'
```
### sqlmap中用來設置代理
sqlmap中設置代理的參數
--proxy
設置HTTP代理服務器位置 格式:--proxy http(s)://ip\[端口\]
--proxy-cred
設置HTTP代理服務器認證信息 格式:--proxy-cred user:pwd
--proxy-file
設置多條代理在文件中
--ignore-proxy
當希望通過忽略系統范圍內的HTTP(S)代理服務器設置來針對本地網絡的目標部
### sqlmap中用來設置延遲
參數 --delay 0.5
sqlmap探測過程中會發送大量探測Payload到目標,如果默認情況過快的發包速度會導致目標預警。 為了避免這樣的情況發生,可以在探測設置sqlmap發包延遲。默認情況下,不設置延遲
### sqlmap中設置超時
參數 --timeout 10.5
在考慮超時HTTP請求之前,可以指定等待的秒數。有效值是一個浮點數,比如10.5秒。默認是30秒
### sqlmap中設置超時重試次數
參數 --retries count
設置對應重試次數,默認情況下重試3次
### sqlmap中設置隨機參數
參數 --randomize 參數名稱
sqlmap可以指定要在每次請求期間隨機更改其值得參數名稱。長度和類型根據提供的原始值保持 一致
### sqlmap中設置忽略401
如果測試偶爾返回HTTP錯誤401的站點,而你想忽略它并在不提供適當憑證的情況下繼續測試,可以 使用--ignore-401
--ignore-401 參數用來忽略未驗證錯誤
### 避免錯誤請求過多而被屏蔽
有時服務器檢測到某個客戶端錯誤請求過多會對其進行屏蔽,而Sqlmap的測試往往會產生大量錯 誤請求,為避免被屏蔽,可以時不時的產生幾個正常請求以迷惑服務器。
#### 參數
- –-safe-url 隔一會就訪問一下的安全URL
- –-safe-post 訪問安全URL時攜帶的POST數據
- –-safe-req 從文件中載入安全HTTP請求
- –-safe-freq 每次測試請求之后都會訪問一下的安全URL