- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于ASP源代码剖析SQL注入漏洞
引言
随着Internet技术的迅猛发展,为了能更充分地使用互联网这个世界上最大的交流平台,许多单位或个人争相建立了自己的网站。为了与广大用户更好地进行交流,大多数网站又采用了动态网站编程技术。在众多的网站开发技术中,由于Microsoft的ASP的简单易用,所以成为众多网站程序员的首选。但是,一些程序员在编程时不够注意安全方面,所以经常出现因一个变量未过滤,造成网站被“注入”,导致整台服务器沦陷的事实。
下面我基于ASP源代码对注入漏洞发生的原理做进一步的阐述。
1 剖析SQL注入漏洞(SQL Injection)
1.1什么是SQL注入
由于某些程序员在编程时,没有对用户输入数据的合法性进行判断,使攻击者可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入,又叫SQL注射。由于SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,目前普通的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。
SQL注入漏洞从提交数据的方式可以分为三类:Get、Post和Cookies,其中出现最普及的当属Get方式的注入。从变量类型又可以分为数字型注入和字符型注入。
1.2 Get方式注入原理
下面是一段存在Get注入的代码:
<!--#include file=conn.asp-->
<%id= request.querystring(id)
set rs=Server.CreateObject(ADODB.RecordSet)
sql=select * from class where classid=id
rs.open sql,conn,1,1
rs.close
set rs=nothing
%>
通过代码,我们看到id参数从URL传进来后,没有经过任何过滤,就进行数据查询,从而产生了经典的SQL注入漏洞。比如攻击者可以提交如下数据:
id=1 and exists(select * from admin)
那么数据库查询语句(上面的sql 变量)就变成:
sql=select * from class where classid=1 and exists(select * from admin)
我们知道classid=1为真(假设数据库表中有此数据),由于“and”表示“与”的关系,那么:
classid=1 and exists(select * from admin) 的真伪只取决于exists(select * from admin)
简单地说就取决于admin表是否存在。如果网页返回的正常,则admin表存在,反之则不存在。那么攻击者就达到了猜测管理员表名的目的。
1.3Post方式注入原理
Post注入是通常针对采用Post提交的表单进行的注入,很多情况下都是字符型的变量,而且它没有Get方式注入那样容易察觉,下面是一段存在Post注入的表单:
<tr>
<td width=102 height=25 align=right>邮箱地址:</td>
<td width=198 height=25><input name=email type=text id=email>
<input name=login type=hidden value=yes></td>
</tr>
<tr>
<td height=25 align=right>访问密码:</td>
<td height=25><input name=password type=password id=password></td>
</tr>
这是一个普通用户的登录界面,提交进行数据库处理的代码如下:
<%if request.form(login)=yes then
set rs=server.createobject(adodb.recordset)
sql=select * from book where xx=request.form(email) and
password=request.form(password) order by id desc
rs.open sql,conn,1,1
if not
原创力文档


文档评论(0)