本章分享的union注入是用的靶场的第一关来演示
靶场下载链接:GitHub - workcha/sqli-labs-master: sql注入必练习题目
第一步:检查网页有没有漏洞,如下图,使用 ' 来判断有没有sql漏洞
下面这张图是点击键盘enter之后的样子
如果出现上图这个样子就表示有sql注入漏洞,但为了保险起见,我们可以在id=1后面分别加入 and 1=1# 和 and 1=2# 再次来判断网页是否存在漏洞,其中#要把它换成%23这个url编码,否则浏览器可能无法识别#,导致#这个符号无用,而#这个符号是用于注释后面的内容,避免后面的内容与前面的内容发生冲突
如果 and 1=1# 提交数据过后回显的是下面这样,
而 and 1=2# 提交数据过后回显的却是下面这样
那么就可以确定这个网页有sql漏洞,我们就可以进行下一步操作。
第二步:使用oder by 来查当前数据库的表里有多少个字段,查看当前数据库的表里有多少个字段是因为后面使用union联合查询时,union联合查询里的字段数量要和主查询语句里的字段数量要一致。
上面写order by 3 是因为当前数据库的表里只有3个字段,如果写order by 4就会报下面的错误
我们知道有几个字段后,就可以进行第三步了。
第三步:查看显示位在哪个字段,如 ?id=-1' union select 1,2,3%23 其中的id=-1是让union前面的sql语句失效,这样我们就可以知道显示位在哪个字段了,而显示位是让我们查询的东西能显示到浏览器页面上来,如下图
其中显示位在2,3字段,如果没显示位则不能使用union注入。
第四步:查看MySQL里的所有数据库和表
查看所有数据库的命令:union select 1,group_concat(schema_name),3 from information_schema.schemata
查看所有表的命令:union select 1,group_concat(table_name),3 from information_schema.tables
我们通过以上这四步就可以通过union注入获取到MySQL里所有的数据库和表。
注:此union注入仅供学习参考。