SQL Inject漏洞手动测试:基于union联合查询的信息获取
union联合查询,简单来说就是可以通过联合查询来查询指定的数据
用法举例:
select username,password from user where id=1 **union** select 字段1,字段2 form 表名
注意,联合查询的字段数需要和主查询一致!如果字段数不一样的话会报错。
先讲一下union的原理
这是一条正常的查询
之后我们这样输入,
select id,eamil from member where username='kobe' union select username ,pw from member where id=1;
这一整条语句的意思就是,先执行前面正常的语句,同时,会把后面的句子联合一起查询出来
显示结果
上面一行就是正常查询的结果,下面一行就是后面句子查询的记录
我们在数据库中输入一些select参数可以得到数据库的名称,用户地址,数据库对应的版本
那么如果我们想通过sql注入来获取这些信息,我们可以在pikachu上试一下
以字符型注入为例,其他的都是一个原理,只不过闭合可能会有所区别
我们还是按照闭合原理,进行union的输入,但这时候我们发现我们不知道后台的字段有几个,我们只能猜测主查询有几个字段,只有把字段数猜出来,我们才能正确的去拼接union,那么我们如何来猜字段数呢?
可以用order by,order by在sql中为排序表达式,用于指定排序的依据,它可以是字段名也可以是字段别名,我们可以不对order做其他的命令,只是指定它的排序对象,来实现对字段数的猜测
order by 一般默认 数字1到9,字母a到z来排序,我们先输入order by 1
显示正常 没有报错 ,再输入order by 2
发现他还是显示正常的,此时是指定第二列来进行排序,这说明第二列是存在的,再来试试order by 3
发现SQL报出了错误,因为其实我们在前面已经select了两个字段,所以字段就是两个,没有第三个字段,这时指定第三个字段来进行排序,那肯定是要报错的,黑客就会依据order by 的查询功能来猜测出,这里的字段是两个。
我们来回到pikachu,首先要做的事情就是对字段进行猜测,运用刚才的原理,先猜测,可能有5个字段。
点击查询后,发现页面报出了错误。。第五列不存在
那么我们可以仿照二分法的模式,再来试试order by 3
网页显示第三列不存在
再试试2
这回没有报错,也就意味着这个order by 已经正常执行了,3不存在,2存在,就意味着我们的主查询只有两个字段,用order by 猜到了主查询的字段数之后 我们就可以union进行拼接, 因为只有两个字段,我们就随意输入两个字段,比如查询 database()和user()
成功查出了数据库名称和当前用户的权限
我们还可以去查询别的东西,或者随意打印一个字符让他打印出来
我们可以用union来获取数据库的很多基础信息
MYSQL小知识补充:information_schema
- sql-inject漏洞手动测试-基于函数报错的信息获取
- 【原】获取数据库(SQL SERVER 2005)的所有信息 Get all database information from SQL Server 2005 测试通过【想写基于数据库代码生成器可参考】
- Web入侵安全测试与对策学习笔记之(二)——获取目标信息之其他人留下的漏洞—样例程序的缺陷
- android-基于Webservice实现天气信息获取及源码下载(二)
- 通过ALM OTA API获取test case的信息,并上传测试结果到test set中
- android-基于Webservice实现天气信息获取及源码下载(一)
- jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
- gstreamer 中 gst-inspect获取信息,gst-launch测试链路示例
- 基于JAVA代码 获取手机基本信息(本机号码,SDK版本,系统版本,手机型号)
- 基于visual c++之windows核心编程代码分析(13)获取磁盘可用空间信息
- 基于随机采样获取训练、测试数据示例(Python)
- 通过IP获取对应城市信息(该功能基于淘宝第三方IP库接口)
- SQL联合查询优化 用union all来代替union
- 通过手动创建统计信息优化sql查询性能案例
- c# 获取电脑硬件信息通用查询类[测试通过]
- mysql中UNION和UNION ALL联合查询
- servlet测试获取请求行信息
- 基于JAVA代码 获取手机基本信息(本机号码,SDK版本,系统版本,手机型号)
- IOS 学习(基于 iOS 8.0 以上的地理信息查询)
- sql语句之UNION,联合查询