1、 sqlmap介紹
sqlmap是一款支持MySQL, Oracle,PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird,Sybase和SAP MaxDB等數據庫的各種安全漏洞檢測工具。
2、 sqlmap的下載以及安裝
(1)linux下git直接安裝
Kali系統自帶的sqlmap
gitclone –depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
(2)windows下安裝
windows下下載sqlmap的壓縮包,解壓後即可使用。但需要一些組件包的支持,需要有python2.7.x或者2.6.x環境支持
D:\\一些工具分類\\Python27
(3)kali及PentestBox默認安裝sqlmap
(4) sqlmap支持的檢測模式
sqlmap支持五種不同的注入模式:
l 基於布爾的盲注,即可以根據返回頁面判斷條件真假的注入;
l 基於時間的盲注,即不能根據頁面返回內容判斷任何信息,用條件語句查看時間延遲語句是否執行(即頁面返回時間是否增加)來判斷;
l 基於報錯注入,即頁面會返回錯誤信息,或者把注入的語句的結果直接返回在頁面中;
l 聯合查詢注入,可以使用union的情況下的注入;
l 堆查詢注入,可以同時執行多條語句的執行時的注入。
(5)sqlmap不同的等級
1、同時顯示基本信息和警告信息。(默認)
2、同時顯示debug信息。
3、同時顯示注入的payload。
4、同時顯示HTTP請求。
5、同時顯示HTTP響應頭。
6、同時顯示HTTP響應頁面。
--level
除此之外,也可以用-v代替level,因為-v就是level的縮寫,因此這樣也是可以的
如果你想看到sqlmap發送的測試payload最好的等級就是3
如下圖,我這裡選擇了-v3,它這裡顯示了注入的payload,那麼這個工具注入的代碼就顯示出來了,因此我們也可以照著這個去學習和研究
3、 數據庫注入的使用
Access數據庫注入sqlmap.py -u "網站" 我們先檢測這個網站是否存在注入點
-u "網站"--tables 列出數據庫中所有表的名字。
-u "網站"-T "表名" --columns 針對某個表的列名
-u "網站"-dump T "表名" - C "列名"針對某個表裡的某個列。列出該列中的字段內容(注意-dump可以放在後面,不用擔心麻煩注意看清楚大小寫)
因為access數據庫只有一個獨立的數據庫,所以它這裡不需要去猜數據庫名
mssql數據庫注入 -u "網站"
-u "網站"--dbs
-u "網站"--is-dba 查看當前用戶是否是數據庫管理員
-u "網站" --current -db
-u "網站"-D "數據庫名" --tables
-u "網站"-D "數據庫名" -T "表名" --columns
-u "網站"--dump -D "數據庫名" -T "表名"-C "列名"
mysql數據庫同上
一般注入的時候,我們可以先查看它的權限 --privileges
由於mysql和mssql數據庫有多個數據庫和多個網站,那麼這個時候sqlmap默認跑的注入方式是顯錯注入。
1) mysql注入演示
首先簡單的測試是否存在sql注入漏洞
可以看見它這裡顯示了對方網站的操作系統為Windows,然後當前的php版本為5.4以及web服務器Apache的版本,還有當前的數據庫為mysql5.0版本,上面的就是sqlmap注入時候攻擊代碼。
跑完的數據都將會保存在output目錄下生成一個以網站域名命名的文件夾。
由於我是本地環境,所以它這裡就是127.0.0.1
那麼簡單的檢測就這樣演示完了,接下來就是跑數據庫名,為什麼要跑數據庫?因為mysql和mssql跟access數據庫不一樣,mysql有多個數據庫,那麼我們就需要跑出當前網站的數據庫名,就跟我們進行顯錯注入一樣,都需要數據庫名來進一步來弄出表名和表裡面的數據。
這個要用到--current-db這個參數,這個參數是用來顯示當前數據庫名的參數
那麼結果如下,可以看見它這裡顯示出當前的數據庫名為security,那麼我們知道了數據庫名,我們就可以去跑當前數據庫名的所有數據
用-D大寫的D代替databases,那麼這個就是指定對應的數據庫名,然後再用--tables去跑出當前數據庫的所有表名
跑出來的結果如下,跑出了security數據庫的4個表名,分別為emails、referrs、uagents、users。
那既然都跑出表名了,我們想看哪個表名最有價值,一般作為滲透者,都會對user、username、pass、password、admin等表名進行猜解,因為這些關鍵詞的表名一般都存在重要的信息。
那我們就直接猜users表名的數據,當然,猜完表也要猜列名。猜列表要使用到--columns參數,這裡還是一樣,用-D和-T分別代表數據庫名和表名,-T是tables的縮寫,那麼後面就是猜列名的參數--columns
然後就是這裡猜出三個列名。分別是id、password、username等等,那麼我們要猜出所有的數據,那我們就要用到--dump,--dump是全部拖下來的意思(可以這樣理解)
因為這裡有三個列名,那麼用-C全部指定的時候,要用到逗號隔開,再使用--dump全部脫褲。
那麼對應的數據就這麼簡單的顯示出來了
4、注入的選擇
參數:--technique
這個參數可以指定sqlmap使用的探測技術,默認情況下會測試所有的方式
· 測試注入點:sqlmap.py -u url -p id
· sqlmap注入方式techniquesqlmap.py -u url --technique T
支持探測的方式如下
B:Boolean-based blind sql injection(布爾型注入)
E:Error-based SQL injection (報錯型注入)
U:UNION query SQL injection (可聯合查詢注入)
S:Stacked queries SQL injection(可語句查詢注入)
T: Time-based blind SQL injecgtion(基於多時間延遲注入)
比如說我想進行一個時間盲注,再用-v3顯示出當前注入的攻擊代碼。那麼可以對比一下上面默認注入的代碼和這裡選擇注入方式的代碼。是完全不一樣的
閱讀更多 安界 的文章