SQL注入天书——ASP注入漏洞全接触
来源:ChinaITLab 收集整理 作者: 出处:综艺读书 2006-08-08引 言
随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。
|
|
|||
SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。
但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。
根据国情,国内的网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。在本文,我们从分入门、进阶至高级讲解一下ASP注入的方法及技巧,PHP注入的文章由NB联盟的另一位朋友zwell撰写,希望对安全工作者和程序员都有用处。了解 ASP注入的朋友也请不要跳过入门篇,因为部分人对注入的基本判断方法还存在误区。大家准备好了吗?Let's Go...
入 门 篇
如果你以前没试过SQL注入的话,那么第一步先把IE菜单=>工具=>Internet选项=>高级=>显示友好 HTTP 错误信息前面的勾去掉。否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。
第一节、SQL注入原理
以下我们从一个网站www.mytest.com开始(注:本文发表前已征得该站站长同意,大部分都是真实数据)。
在网站首页上,有名为“IE不能打开新窗口的多种解决方法”的链接,地址为:http://www.mytest.com/showdetail.asp?id=49,我们在这个地址后面加上单引号’,服务器会返回下面的错误提示:
Microsoft JET Database Engine 错误 '80040e14'
字符串的语法错误 在查询表达式 'ID=49'' 中。
/showdetail.asp,行8
从这个错误提示我们能看出下面几点:
1. 网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。
2. 程序没有判断客户端提交的数据是否符合程序要求。
3. 该SQL语句所查询的表中有一名为ID的字段。
从上面的例子我们可以知道,SQL注入的原理,就是从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取你想到得到的资料。
第二节、判断能否进行SQL注入
看完第一节,有一些人会觉得:我也是经常这样测试能否注入的,这不是很简单吗?
其实,这并不是最好的方法,为什么呢?
首先,不一定每台服务器的IIS都返回具体错误提示给客户端,如果程序中加了cint(参数)之类语句的话,SQL注入是不会成功的,但服务器同样会报错,具体提示信息为处理 URL 时服务器上出错。请和系统管理员联络。
其次,部分对SQL注入有一点了解的程序员,认为只要把单引号过滤掉就安全了,这种情况不为少数,如果你用单引号测试,是测不到注入点的
那么,什么样的测试方法才是比较准确呢?答案如下:
① http://www.mytest.com/showdetail.asp?id=49
② http://www.mytest.com/showdetail.asp?id=49 ;and 1=1
③ http://www.mytest.com/showdetail.asp?id=49 ;and 1=2
这就是经典的1=1、1=2测试法了,怎么判断呢?看看上面三个网址返回的结果就知道了:
可以注入的表现:
① 正常显示(这是必然的,不然就是程序有错误了)
② 正常显示,内容基本与①相同
③ 提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof时)、或显示内容为空(程序加了on error resume next)
不可以注入就比较容易判断了,①同样正常显示,②和③一般都会有程序定义的错误提示,或提示类型转换时出错。
当然,这只是传入参数是数字型的时候用的判断方法,实际应用的时候会有字符型和搜索型参数,我将在中级篇的“SQL注入一般步骤”再做分析。
第三节、判断数据库类型及注入方法
不同的数据库的函数、注入方法都是有差异的,所以在注入之前,我们还要判断一下数据库的类型。一般ASP最常搭配的数据库是Access和SQLServer,网上超过99%的网站都是其中之一。
怎么让程序告诉你它使用的什么数据库呢?来看看:
SQLServer有一些系统变量,如果服务器IIS提示没关闭,并且SQLServer返回错误提示的话,那可以直接从出错信息获取,方法如下:
http://www.mytest.com/showdetail.asp?id=49 ;and user>0
这句语句很简单,但却包含了SQLServer特有注入方法的精髓,我自己也是在一次无意的测试中发现这种效率极高的猜解方法。让我看来看看它的含义:首先,前面的语句是正常的,重点在and user>0,我们知道,user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个 nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQLServer的出错提示是:将nvarchar值 ”abc” 转换数据类型为 int 的列时发生语法错误,呵呵,abc正是变量user的值,这样,不废吹灰之力就拿到了数据库的用户名。在以后的篇幅里,大家会看到很多用这种方法的语句。
顺便说几句,众所周知,SQLServer的用户sa是个等同Adminstrators权限的角色,拿到了sa权限,几乎肯定可以拿到主机的 Administrator了。上面的方法可以很方便的测试出是否是用sa登录,要注意的是:如果是sa登录,提示是将”dbo”转换成int的列发生错误,而不是”sa”。
如果服务器IIS不允许返回错误提示,那怎么判断数据库类型呢?我们可以从Access和SQLServer和区别入手,Access和 SQLServer都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统表[msysobjects]中,但在Web环境下读该表会提示“没有权限”,SQLServer是在表[sysobjects]中,在Web环境下可正常读取。
在确认可以注入的情况下,使用下面的语句:
http://www.mytest.com/showdetail.asp?id=49 ;and (select count(*) from sysobjects)>0
http://www.mytest.com/showdetail.asp?id=49 ;and (select count(*) from msysobjects)>0
如果数据库是SQLServer,那么第一个网址的页面与原页面http://www.mytest.com/showdetail.asp?id= 49是大致相同的;而第二个网址,由于找不到表msysobjects,会提示出错,就算程序有容错处理,页面也与原页面完全不同。
如果数据库用的是Access,那么情况就有所不同,第一个网址的页面与原页面完全不同;第二个网址,则视乎数据库设置是否允许读该系统表,一般来说是不允许的,所以与原网址也是完全不同。大多数情况下,用第一个网址就可以得知系统所用的数据库类型,第二个网址只作为开启IIS错误提示时的验证。
进 阶 篇
在入门篇,我们学会了SQL注入的判断方法,但真正要拿到网站的保密内容,是远远不够的。接下来,我们就继续学习如何从数据库中获取想要获得的内容,首先,我们先看看SQL注入的一般步骤:
第一节、SQL注入的一般步骤
首先,判断环境,寻找注入点,判断数据库类型,这在入门篇已经讲过了。
其次,根据注入参数类型,在脑海中重构SQL语句的原貌,按参数类型主要分为下面三种:
(A) ID=49 这类注入的参数是数字型,SQL语句原貌大致如下:
Select * from 表名 where 字段=49
注入的参数为ID=49 And [查询条件],即是生成语句:
Select * from 表名 where 字段=49 And [查询条件]
(B) Class=连续剧 这类注入的参数是字符型,SQL语句原貌大致概如下:
Select * from 表名 where 字段=’连续剧’
注入的参数为Class=连续剧’ and [查询条件] and ‘’=’ ,即是生成语句:
Select * from 表名 where 字段=’连续剧’ and [查询条件] and ‘’=’’
© 搜索时没过滤参数的,如keyword=关键字,SQL语句原貌大致如下:
Select * from 表名 where 字段like ’%关键字%’
注入的参数为keyword=’ and [查询条件] and ‘%25’=’, 即是生成语句:
Select * from 表名 where字段like ’%’ and [查询条件] and ‘%’=’%’
接着,将查询条件替换成SQL语句,猜解表名,例如:
ID=49 And (Select Count(*) from Admin)>=0
如果页面就与ID=49的相同,说明附加条件成立,即表Admin存在,反之,即不存在(请牢记这种方法)。如此循环,直至猜到表名为止。
表名猜出来后,将Count(*)替换成Count(字段名),用同样的原理猜解字段名。
有人会说:这里有一些偶然的成分,如果表名起得很复杂没规律的,那根本就没得玩下去了。说得很对,这世界根本就不存在100%成功的黑客技术,苍蝇不叮无缝的蛋,无论多技术多高深的黑客,都是因为别人的程序写得不严密或使用者保密意识不够,才有得下手。
有点跑题了,
相关图文阅读
频道图文推荐
相关专题
·终极PK!寻找史上最牛的木马查杀软件 (0次浏览)
·阿利谈安全之SAVCE10.1.4.4000初用体验 (0次浏览)
·360安全卫士V3.5 试用手记 (0次浏览)
·剿杀恶意软件!金山清理专家不留情 (0次浏览)
·解决卡巴斯基6.0自动断开连接重新启动 (0次浏览)
·方便快捷 卡巴斯基小助手 V3.3 (0次浏览)
·木马克星 360安全卫士3.5beta试用 (0次浏览)
·教你五招McAfee杀毒软件高级设置 (0次浏览)
·为企业护航 赛门铁克推新安全产品 (0次浏览)
·免费杀软新体验 新版AVG全面评测 (0次浏览)
·阿利谈安全之SAVCE10.1.4.4000初用体验 (0次浏览)
·360安全卫士V3.5 试用手记 (0次浏览)
·剿杀恶意软件!金山清理专家不留情 (0次浏览)
·解决卡巴斯基6.0自动断开连接重新启动 (0次浏览)
·方便快捷 卡巴斯基小助手 V3.3 (0次浏览)
·木马克星 360安全卫士3.5beta试用 (0次浏览)
·教你五招McAfee杀毒软件高级设置 (0次浏览)
·为企业护航 赛门铁克推新安全产品 (0次浏览)
·免费杀软新体验 新版AVG全面评测 (0次浏览)
·临床实测:NOD32网络监控是废物吗? (51次浏览)
·“误杀门”过后 五款杀毒软件能力大比拼 (35次浏览)
·应用评测:选择适合网上炒股的杀毒软件 (28次浏览)
·告别诺顿卡巴照样免费杀毒之Active Virus Shi (27次浏览)
·保护系统安全的六大防御软件集合 (22次浏览)
·实例评测 选择出最适合股民的杀毒软件 (21次浏览)
·实例评测:选择出最适合股民的杀毒软件 (15次浏览)
·ddos免费防火墙 傲盾防火墙 V6.0 (12次浏览)
·最新四个木马测试你的杀毒软件,菜鸟勿试! (10次浏览)
·告别诺顿卡巴照样免费杀毒之McAfee VirusScan (9次浏览)
·“误杀门”过后 五款杀毒软件能力大比拼 (35次浏览)
·应用评测:选择适合网上炒股的杀毒软件 (28次浏览)
·告别诺顿卡巴照样免费杀毒之Active Virus Shi (27次浏览)
·保护系统安全的六大防御软件集合 (22次浏览)
·实例评测 选择出最适合股民的杀毒软件 (21次浏览)
·实例评测:选择出最适合股民的杀毒软件 (15次浏览)
·ddos免费防火墙 傲盾防火墙 V6.0 (12次浏览)
·最新四个木马测试你的杀毒软件,菜鸟勿试! (10次浏览)
·告别诺顿卡巴照样免费杀毒之McAfee VirusScan (9次浏览)
·德国杀毒软件小红伞试用功能详解 (668次浏览)
·杀毒之王 卡巴斯基7.0Beta火速测评 (297次浏览)
·安全新选择 瑞星防火墙Vista体验版 (249次浏览)
·卡巴斯基几种比较实用的使用方法 (245次浏览)
·除了省资源,NOD32为什么还能那么牛 (138次浏览)
·卡巴斯基 7.0.0.119被认定为正式版 (137次浏览)
·杀毒软件血战之:你的杀软到底行不行? (115次浏览)
·果真不负盛名?卡巴斯基7 Beta体验 (110次浏览)
·剿灭木马:零距离试用瑞星Vista体验版 (100次浏览)
·一分钟拥有独一无二的360安全卫士 (99次浏览)
·杀毒之王 卡巴斯基7.0Beta火速测评 (297次浏览)
·安全新选择 瑞星防火墙Vista体验版 (249次浏览)
·卡巴斯基几种比较实用的使用方法 (245次浏览)
·除了省资源,NOD32为什么还能那么牛 (138次浏览)
·卡巴斯基 7.0.0.119被认定为正式版 (137次浏览)
·杀毒软件血战之:你的杀软到底行不行? (115次浏览)
·果真不负盛名?卡巴斯基7 Beta体验 (110次浏览)
·剿灭木马:零距离试用瑞星Vista体验版 (100次浏览)
·一分钟拥有独一无二的360安全卫士 (99次浏览)
最新技术文档
·终极PK!寻找史上最牛的木马查杀软件 06-27
·阿利谈安全之SAVCE10.1.4.4000初用体验 06-27
·360安全卫士V3.5 试用手记 06-22
·剿杀恶意软件!金山清理专家不留情 06-22
·解决卡巴斯基6.0自动断开连接重新启动 06-21
·方便快捷 卡巴斯基小助手 V3.3 06-20
·木马克星 360安全卫士3.5beta试用 06-19
·教你五招McAfee杀毒软件高级设置 06-17
·为企业护航 赛门铁克推新安全产品 06-15
·免费杀软新体验 新版AVG全面评测 06-14
·阿利谈安全之SAVCE10.1.4.4000初用体验 06-27
·360安全卫士V3.5 试用手记 06-22
·剿杀恶意软件!金山清理专家不留情 06-22
·解决卡巴斯基6.0自动断开连接重新启动 06-21
·方便快捷 卡巴斯基小助手 V3.3 06-20
·木马克星 360安全卫士3.5beta试用 06-19
·教你五招McAfee杀毒软件高级设置 06-17
·为企业护航 赛门铁克推新安全产品 06-15
·免费杀软新体验 新版AVG全面评测 06-14
站内各频道最新更新文档
站内最新制作专题
|
|||
| ·ACDSEE专题教程-下载使用 ·迅雷专题教程-下载使用 ·Windows XP频道 ·Windows Vista频道 ·Windows 2000频道 ·win2003频道 ·Freebsd频道 ·Oracle频道 |
·Linux频道 ·Windows频道 ·邮件服务器专题 ·协议大全 ·数据恢复指南教程 ·FreeBSD使用教程 ·Linux数据库宝典 ·Linux基础知识 |
||
热门关键字导读
站内频道文章精选
| · 秘密:Vista隐蔽的动态屏保 · 腾讯开发新电子宠物--QQ熊 · 惠普否认2999元PC有价无货 |
· 驱逐Win系统“流氓”文件 · WinXP中获取未使用的IP地址 · 尝试format C:格式化硬盘? |
| · 在DOS下恢复回收站中的文件 · 拯救WinXP崩溃的救命稻草 · Linux系统中超级权限的应用 |
· 搜狗PK谷歌:谁能代言拼... · 昨日重现,一键GHOST轻松.. · 实现Web迅雷在空闲时杀毒 |
| · AVIFile函数制做AVI文件 · VC中链接动态链接库的方法 · 熊猫烧香核心源码(Delphi) |
· DateDiff函数祥解 · JavaScript去除空格的三种 · js效果 图片加载进度实时.. |
| · SQL Server数据库优化方案 · Oracle的初学者入门心得 · JSP连接Mysql数据库 |
· Photoshop为美女做艺术处理 · 用Freehand创建发光字特效 · 设计自己的个性QQ动态表情 |
百度推荐,商机无限
搜索您感兴趣的内容




