sql注入(Union注入攻击)

这段时间自我摸索着学习了下sql注入,学习的过程中发现了一些小白学习初期可能会犯的错误,也想把自己学习过程中的心得与体会分享给大家,希望能帮助到大家!

好了,接下来就开始我们的正题!

目录

一、了解Union用法

二、结合靶场环境讲解如何使用Union进行联合攻击

①:判断注入点

②:判断注入点为整形还是字符型

③:使用order by 来判断注入表中字段数量,即列的数量

④:结合Union字段来确定回显位

⑤:注入成功,根据个人需求,获取相关内容


一、了解Union用法

在数据库中,当我们需要将两个表的查询内容合并到一张表去显示,就需要使用我们的Union去拼接。

例如:select 字段1,字段2,字段3 from table1 union select  str1,str2,str3 from table2

当table1查询的字段数量与table2查询的字段数量一致时,结果为true,就会返回我们想要看到的查询效果,如下图所示:

 当两张表查询字段数量不一致时,会报错,如下图所示:

为什么会报错?即两表查询字段数量不一致。

二、结合靶场环境讲解如何使用Union进行联合攻击

首先,我们需要明白何时需要使用Union联合攻击,当用户输入字段后, 服务器会将结果以肉眼可见的方式返回到页面中,也就是我们日常所说的有回显,这时便可以使用我们的Union联合攻击来进行相关测试。

测试步骤为:

①:判断注入点

因为本人学习sql注入时间不长,也没有特别牛掰的方法,但是有一招百用不厌,即直接输入我们的 ' ,效果如下图所示:

如果报错的话,那么我们基本99%可以确定存在sql注入漏洞。

②:判断注入点为整形还是字符型

接着上图举例:

当我们输入字符和数字时,提示movies not found,说明注入点为字符型 。其实这个东西也可以根据相关提示字段来判断,例如本题题目让我们根据输入查找电影名,那么自然而然注入点就为字符型了。//个别特殊情况除外

如果注入点为整形,当我们输入字符时,便会提示报错提示。

③:使用order by 来判断注入表中字段数量,即列的数量

order by 5:即根据我们表中存在的第五个字段进行排序,默认为升序,如果表中字段数量<5,也就是说第五个字段不存在,进行报错提示。//这个5只是我测试随便写的,大家可以自行填写大小进行测试。

当我们order by 5:页面返回结果,说明表中存在的字段数量>=5

这时候便需要我们更换5这个数字,来回测试,当该整数值>表中字段数量时,便会报错,那么这个临界值便是表中字段数量,因为这道题我提前做过,表中字段数量为7,当我们order by 8,报错如下图所示: 

根据报错,提示我们不知道第八列的存在,这里需要大家注意的是,如果我们使用--作为注释,一定记得要在--后面加上空格符。

④:结合Union字段来确定回显位

当我们知道表中的字段数量,便可以结合union来确定网页回显字段,如下图所示:

 至于看到这里,不知道大家有没有,反正我当时就好奇,为什么我们select 1,2,3,4,5,6,7,一共查询了七个字段,而我们表中只返回4个呢,后来才明白,就跟你去市场买菜,你问人家你为啥白菜给我卖888元一斤,因为我想,哈哈哈哈哈哈哈!就像我有100万,至于想不想让你知道就跟你没关系了,你只需要看到你能看到的就好了,没有为什么。

⑤:注入成功,根据个人需求,获取相关内容

当我们看到2,3,5,4字段可以回显时,便可以使用相关sql语句来获取我们想看到的内容。

select database():查看当前数据库名

select version():查看操作系统版本

select user():查看当前用户信息,包含当前用户名和数据库ip地址

select @@datadir:返回数据存储路径

select @@basedir 返回MySQL的安装路径

到这里,我们的Union联合注入也就基本完成了,欢迎大家指正!

猜你喜欢

转载自blog.csdn.net/m0_65463546/article/details/128234690