[其他] Union注入的问题疑惑的解答
1.就是里面好像说的爆字段 不过我没弄成功 我只能通过猜的办法得到字段?
答:这个问题我刚看到了一些知识,使用having 1=1语句使程序显示错误信息来获取信息
具体的错误是因为having语句必须要和GROUP BY或者聚合函数一起配合使用,否则出错
学过SQL语言的朋友就可以知道,having条件其实是用在结果集合里面,而不像where那样
直接使用在查询的同时在筛选的条件(这句话好像不太好表达,大家自己理解吧)
具体的过程:①使用having 1=1使存在注入漏洞的页面产生错误,进而爆出表名和第一个字段
②使用得到的表名和字段在加上group by分组爆出第二个字段,提交的数据如下:
group by Tuser.id having 1=1-- 解释:Tuser是爆出的表名,id则第一个字段名
③通过第二步又可以爆出第二个列的字段,接下来以此类推的爆出第三字段,第四。。。等等
提交的语句如:group by Tuser.id Tuser.user Tuser.pass [...n] having 1=1-- [...n] 代表下个字段
2.文章里说的直接用having 1=1逼出字段数?我记得having是属于group by分组里的条件?
答:这种攻击手法其实就是利用程序报错的原理,根据错误信息来获取相关信息,上面也解答了
3.union注入时表和字段的取得都使用那些方法的(除了猜解以外的方法)
答:冰的原点的文章里说的三种,第一种是上面说的having 1=1--,第二种是使用order by N--N是
字段的个数,第三是使用union select n1,n2... 。我自己补充一种用工具猜或者手工猜,当然这种方
法不是很通用,手工猜的话很难,工具猜的需要足够的字段,这个也算一种方法吧
4.使用union爆出来默认是一条记录?这个有没错的?没错继续一个问题怎么取得下一条记录,自然
答:这个我暂时没有什么好的办法,有一个笨办法,那就是使用where排除第一条记录,自然就会就
会显示下一条记录了。比如表里面有三条记录,其中默认第一条记录有user=admin1这个账户,那么
代码如:union select 1,2,user,pass,5 from admin where user<>'admin'-- 这样子就可以获取下一条
记录了。那么要是有多条记录?很简单实用and加上排除的排除记录的user即可了,代码如下:
union select 1,2,user,pass,5 from admin where user<>'admin1' and user<>'admin2'--以此类推下去
5.在我使用and 1=1 union select 1,user,pass,4,5 from admin 这样我可以爆出user和pass
但是为什么换成这样子;union select 1,user,pass,4,5 from admin也没有出错呢?而且可以爆
出和上面那一句一样的结果 使用;号已经是分割成两个SQL语句了 那还union还联合什么的?
答:这个问题解决从朋友那里了解的,不知道理解的对不对,小菜我和大家分享一下。首先要了解的
是union是联合查询,将两个查询结构连接成一个结果集,那么使用上面的语句可以理解前面查询的
结果集是一个空的结果集,后面才是我们查询的结果,联合在一起自然就得到我们查询的结果了,所
以上面的;号也可以理解成是一个查询结果为空的语句。
补充一些:这也是我测试得到的结果,在使用union爆信息时,如果and 1=1 union select * from admin
这样的形式没得到结果时,我们可以去掉and 1=1 直接union all select * from admin,或者在前面加上;
在使用union语句爆信息还是有很多灵活应用的,就像冰的原点里面说到的那样,利用类型替换就一种
灵活的变换!
感谢楼主的分享
www.dj857.net
www.njqvmm.com
www.224408.info
www.0472bh.com
www.a8022.net
页:
[1]