手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

SQL注入漏洞攻防必杀技

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

连接的数据库名。

  ④ http://Site/url.asp?id=1;backup database 数据库名 to disk=’c:/inetpub/wwwroot/1.db’

;--

  这是相当狠的一招,从③拿到的数据库名,加上某些IIS出错暴露出的绝对路径,将数据库备份到Web

目录下面,再用HTTP把整个数据库就完完整整的下载回来,任何的管理员及用户密码都一览无遗!在不知

道绝对路径的时候,还能够备份到网络地址的方法(如//202.96.xx.xx/Share /1.db),但成功率不高。

  ⑤ http://Site/url.asp?id=1 ;and (Select Top 1 name from sysobjects where xtype=’U’

and status>0)>0

  前面说过,sysobjects是SQLServer的系统表,存储着任何的表名、视图、约束及其他对象,xtype=

’U’ and status>0,表示用户建立的表名,上面的语句将第一个表名取出,和0比较大小,让报错信息

把表名暴露出来。第二、第三个表名怎么获取?还是留给我们聪明的读者思考吧。

  ⑥ http://Site/url.asp?id=1 ;and (Select Top 1 col_name(object_id(‘表名’),1) from

sysobjects)>0

  从⑤拿到表名后,用object_id(‘表名’)获取表名对应的内部ID,col_name(表名ID,1)代表该表的

第1个字段名,将1换成2,3,4...就能够逐个获取所猜解表里面的字段名。

  以上6点是我研究SQLServer注入半年多以来的心血结晶,能够看出,对SQLServer的了解程度,直接

影响着成功率及猜解速度。在我研究SQLServer注入之后,我在研发方面的水平也得到很大的提高,呵呵

,也许安全和研发本来就是相辅相成的吧。

  第二节、绕过程式限制继续注入

  在入门篇提到,有很多人喜欢用’号测试注入漏洞,所以也有很多人用过滤’号的方法来“防止”注

入漏洞,这也许能挡住一些入门者的攻击,但对SQL注入比较熟悉的人,还是能够利用相关的函数,达到

绕过程式限制的目的。

  在“SQL注入的一般步骤”一节中,我所用的语句,都是经过我优化,让其不包含有单引号的;在“

利用系统表注入SQLServer数据库”中,有些语句包含有’号,我们举个例子来看看怎么改造这些语句:

  简单的如where xtype=’U’,字符U对应的ASCII码是85,所以能够用where xtype=char(85)代替;

假如字符是中文的,比如where name=’用户’,能够用where name=nchar(29992) nchar(25143)代替。

  第三节、经验小结

  1.有些人会过滤Select、Update、Delete这些关键字,但偏偏忘记区分大小写,所以大家能够用sele

cT这样尝试一下。

  2.在猜不到字段名时,不妨看看网站上的登录表单,一般为了方便起见,字段名都和表单的输入框取

相同的名字。

  3.特别注意:地址栏的 号传入程式后解释为空格,+解释为 号,%解释为%号,具体能够参考URL

Encode的相关介绍。

  4.用Get方法注入时,IIS会记录您任何的提交字符串,对Post方法做则不记录,所以能用Post的网址

尽量不用Get。

  5. 猜解Access时只能用Ascii逐字解码法,SQLServer也能够用这种方法,只需要两者之间的区别即

可,但是假如能用SQLServer的报错信息把值暴露出来,那效率和准确率会有极大的提高。

  防范方法

  SQL注入漏洞可谓是“千里之堤,溃于蚁穴”,这种漏洞在网上极为普遍,通常是由于程式员对注入

不了解,或程式过滤不严格,或某个参数忘记检查导致。在这里,我给大家一个函数,代替ASP中的R

equest函数,能够对一切的SQL注入Say NO,函数如下:


以下是代码片段:
Function SafeRequest(ParaName,ParaType)
 ’--- 传入参数 ---
 ’ParaName:参数名称-字符型
 ’ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)
 Dim Paravalue
 Paravalue=Request(ParaName)
 If ParaType=1 then
  If not isNumeric(Paravalue) then
   Response.write "参数" & ParaName & "必须为数字型!"
   Response.end
  End if
 Else
  Paravalue=replace(Paravalue,"’","’’")
 End if
 SafeRequest=Paravalue
End function

不管您是安全人员、技术爱好者还是程式员,我都希望本文能对您有所帮助。


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

上一页 1 2 3 4下一页
[打印] [关闭]
Google
相关文章
上一篇: 木马的自运行方法
下一篇: 真真假假的安全警告
热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS