欢迎来到天天文库
浏览记录
ID:9493362
大小:121.00 KB
页数:29页
时间:2018-05-01
《sqlserver应用程序中的高级sql注入》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Sqlserver应用程序中的高级SQL注入>>教育资源库 介绍:SQL是一种用于关系数据库的结构化查询语言。它分为许多种,但大多数都松散地基于美国国家标准化组织最新的标准SQL-92。典型的执行语句是query,它能够收集比较有达标性的记录并返回一个单一的结果集。SQL语言可以修改数据库结构(数据定义语言)和操作数据库内容(数据操作语言)。在这份文档中,我们将特别讨论SQLSERVER所使用的Transact-SQL语言。 当一个攻击者能够通过往query中插入一系列的sql语句来操作数据写入到应用程序中去,我
2、们管这种方法定义成SQL注入。 一个典型的SQL语句如下: Selectid,forename,surnamefromauthors 这条语句将返回authors表中所有行的id,forename和surname列。这个结果可以被限制,例如: Selectid,forename,surnamefromauthorse'john'andsurname='smith' 需要着重指明的是字符串'john'和'smith'被单引号限制。明确的说,for
3、ename和surname字段是被用户提供的输入限制的,攻击者可以通过输入值来往这个查询中注入一些SQL语句, 如下: Forename:jo'hn Surname:smith 查询语句变为: Selectid,forename,surnamefromauthorse='jo'hn'andsurname='smith' 当数据库试图去执行这个查询时,它将返回如下错误: Server:Msg170,Level15,State1,Line1 Line1:In
4、correctsyntaxnear'hn' 造成这种结果的原因是插入了.作为定界符的单引号。数据库尝试去执行'hn',但是失败。如果攻击者提供特别的输入如: Forename:jo';droptableauthors Surname: 结果是authors表被删除,造成这种结果的原因我们稍后再讲。 看上去好象通过从输入中去掉单引号或者通过某些方法避免它们都可以解决这个问题。这是可行的,但是用这种方法做解决方法会存在几个困难。第一,并不是所有用户提供的数据都是字符串。如
5、果用户输入的是通过用户id来查询author,那我们的查询应该像这样: Selectid,forename,surnamefromauthorsa'color='cccccc'> <CENTER><H1>Login</H1> <FORMaction='process_loginasp'method=post> <TABLE> <TR><TD>Username:</TD><TD><INPUTtype=textn
6、ame=usernamesize=100e=passitvalue='Submit'><INPUTtype=resetvalue='Reset'> </FORM> </Font> </BODY> </HTML> 下面是process_login.asp的代码,它是用来控制登陆的: <HTML> <BODYbgcolor='000000'text='ffffff'> <FONTFace=
7、9;tahoma'color='ffffff'> <STYLE> p{font-size=20pt!important} font{font-size=20pt!important} h1{font-size=64pt!important} </STYLE> <%LANGUAGE=JScript%> <% functiontrace(str){ if(Request.form(debug)==true) Response.write(str); }
8、 functionLogin(){ var12345678910下一页>>>>这篇文章来自..,。username; varpasse=Request.form(username); pass(passuserse='+username+'andpassa'color='cc0000'>
此文档下载收益归作者所有