Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1014596
  • 博文数量: 179
  • 博客积分: 10080
  • 博客等级: 上将
  • 技术积分: 2580
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-10 09:26
文章分类

全部博文(179)

文章存档

2015年(1)

2014年(1)

2012年(1)

2011年(3)

2010年(14)

2009年(11)

2008年(10)

2007年(42)

2006年(96)

我的朋友

分类: WINDOWS

2006-04-21 15:16:10

跨站式SQL注入 (转载)
作者:木木
本期任务:成功入侵栏目提供的服务器,并替换网站ct.feedom.net的首页。

前几天麦当劳连续被黑事件当然也引起了我的视觉,想看看到底是怎么回事。精神振奋之余,上网找了找资料,发现是典型的跨站式SQL注入,我们来简单分析介绍下其中的SQL注入修改网站首页。
随着网站开发应用的普及, B/S结构网站应用的开发已是遍地开花。但由于程序员水平的参差不齐,程序漏洞也就产生了。相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。

Step1:判断是否存在漏洞
我们要来判断网站是否存在SQL注入漏洞。我们以cp.feedom.net网站为例来测试判断。比如下面这两个网址:
1. and 1=1
2. and 1=2
这就是经典的1=1、1=2测试法了,怎么判断呢?看看上面网址返回的结果就知道了,可以注入的表现:
1.正常显示;
2.提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof时)、或显示内容为空。
不可以注入就比较容易判断了,①同样正常显示,②和③一般都会有程序定义的错误提示,或提示类型转换时出错。
Step2:判断数据库类型并确定注入方法
一般ASP最常搭配的数据库是Access和SQLServer。怎么让程序告诉你它使用的什么数据库呢?在IE中输入 and user>0,返回的错误信息是JET就代表使用的是ACCESS数据库;返回的错误信息是OLE DB就代表使用的是SQLServer数据库。

Step3:猜解数据库中你想得到的信息
根据注入参数类型,在脑海中重构SQL语句的原貌,上面这个例子的参数类型是:ID=49 这类注入的参数是数字型,SQL语句原貌大致如下:Select * from 表名 where 字段=49
1.猜解数据库中的表名
在地址栏中输入 And (Select Count(*) from Admin)>=0,返回结果页面正常,说明什么?说明数据库中存在admin表。
输入 And (Select Count(admin) from Admin)>=0,通过类似上面指令的查询,你会发现admin表中存在admin字段、password字段和a_id字段。
2. 检查ID是否存在
输入 and exists (select a_id from admin where a_ID=1)。
实战当中,如果返回的页面不正常,就表示不存在,你就必须多花些时间猜解了,懂得原理之后,想要入侵破站也不是那么容易的,累啊兄弟们,OK继续往下注入。

Step4:猜解数据库中的值
1.用户名长度
我们举例来说说,已知表admin中存在username字段,首先,我们取第一条记录,测试长度: and (select top 1 len(username) from Admin)>0。
如果top 1的username长度大于0,则条件成立;接着就是>1、>2这样测试下去,一直到条件不成立为止。
1) and (select top 1 len(admin) from Admin)>4
2) and (select top 1 len(admin) from Admin)>5
第1)条指令返回正常,第2条返回错误,说明该用户名长度为5位。
2.猜解用户名
用户名长度我们知道了,那么我们该分析一下他的值。在得到username的长度后,用mid(username,N,1)截取第N位字符,再通过asc(mid(username,N,1))得到ASCII码。
 1)输入 and exists (select a_id from admin where asc(mid(admin,1,1))=97 and a_ID=1),返回正常,表示用户名的第一位值是a,如果不正常,大家对照ASCII码表慢慢找吧,这儿的a的ASCII码为97。
继续,以此类推最后出来的值:admin
提示:如果你手头上并无ASCII码表,你也可到这里去查寻对照:
3.猜解密码长度
输入 and exists (select a_id from admin where len(password)=8 and a_ID=1),原理同上面猜用户名长度的一样,我们猜到密码的长度为8位。
4.猜解密码值
输入 and exists (select a_id from admin where asc(mid(password,1,1))=97 and a_ID=1),最后得出的密码为:admin888。
相信你读到儿也挺累的啦:)现在你该很清楚的了解数据库的结构了吧,如图所示。

Step5:登录管理后台并上传ASP木马
1.在网站找到管理登录口,或直接输入,登录后台管理页面。
2.点击添加新闻,选中“设为首页图片新闻”选项。
3.看到上传图片的地方了吗,经本人测试该程序上传组件未过滤非图片文件的上传,上传我们的木马文件吧。点击上传图片,在弹出的对话框选择你的木马,点击“提交”即可上传(ASP木马下载:)。

Step6:利用ASP木马替换网站首页
1.现在我已上传了一个木马文件到uploadtest目录,当然大伙可以上传自已喜欢的木马。好了,现在让我们来访问:这儿的密码是admin888,点击上面菜单的[Stream],出来的画面如下:
 

上面的[查看]功能在于可以查阅服务器上的目构架构以及文件,这个界面的最大功能是上传文件到目录器,源文件可以通过[浏览]来从本地硬盘选择,目标文件必须用手动指定,确定好上传文件及目标文件后,最后我们通过点击最右边的[上传]完成文件上传过程。现在我上传了一个index.htm文件保存为:D:\www\cp.feedom.net\ct\index.htm CT这个目录就是网站ct.feedom.net的根目录,通过可以检查您上传的文件是否成功。
提示:由于该服务器仅作读者练习使用,所以对它作了权限控制,你只能对/ct 这个目录进行写操作。由于ASP木马的利用方法非点墨可以说明,因此笔者提供了一些资料供大家学习。资料地址:***********************。
上传HTM文件到这个目录后,你可以通过:上传的文件名来访问被你修改过的网站进行验证。

总结:SQL注入越来越流行,也是众多网站存在漏洞比较普遍的,关于SQL注入工具,其中的NB注入工具比较流行,它的POST方法提交参数,避免了在服务器上保留猜解方法日志,更有具有隐避性。木马种类繁多,个人有个人的喜欢,通过木马甚至可以完完全全的控制一台主机。
 
阅读(920) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-06-22 14:15:35

老生常谈 MSsql2000 危险组件的删除 Original URL::http://www.pcxxoo.com/safe/06032132011.html