SQL Server应用程序中的高级SQL注入

爱华古典家具

爱华古典家具

2016-01-29 16:35

SQL Server应用程序中的高级SQL注入,SQL Server应用程序中的高级SQL注入
 

摘要:
这份文档是详细讨论SQL注入技术,它适应于比较流行的IIS+ASP+SQLSERVER平台。它讨论了哪些SQL语句能通过各种各样的方法注入到应用程序中,并且记录与攻击相关的数据确认和数据库锁定。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/sqlserver/)

这份文档的预期读者为与数据库通信的WEB程序的开发者和那些扮演审核WEB应用程序的安全专家。

介绍:
SQL是一种用于关系数据库的结构化查询语言。它分为许多种,但大多数都松散地基于美国国家标准化组织最新的标准SQL-92。典型的执行语句是query,它能够收集比较有达标性的记录并返回一个单一的结果集。SQL语言可以修改数据库结构(数据定义语言)和操作数据库内容(数据操作语言)。在这份文档中,我们将特别讨论SQLSERVER所使用的Transact-SQL语言。
当一个攻击者能够通过往query中插入一系列的sql语句来操作数据写入到应用程序中去,我们管这种方法定义成SQL注入。

一个典型的SQL语句如下:
Select id,forename,surname from authors
这条语句将返回authors表中所有行的id,forename和surname列。这个结果可以被限制,例如:
Select id,forename,surname from authors where forename'john' and surname='smith'
需要着重指明的是字符串'john'和'smith'被单引号限制。明确的说,forename和surname字段是被用户提供的输入限制的,攻击者可以通过输入值来往这个查询中注入一些SQL语句,
如下:
Forename:jo'hn
Surname:smith
查询语句变为:
Select id,forename,surname from authors where forename='jo'hn' and surname='smith'
当数据库试图去执行这个查询时,它将返回如下错误:
Server:Msg 170, Level 15, State 1, Line 1
Line 1:Incorrect syntax near 'hn'
造成这种结果的原因是插入了.作为定界符的单引号。数据库尝试去执行'hn',但是失败。如果攻击者提供特别的输入如:
Forename:jo';drop table authors—
Surname:
结果是authors表被删除,造成这种结果的原因我们稍后再讲。

看上去好象通过从输入中去掉单引号或者通过某些方法避免它们都可以解决这个问题。这是可行的,但是用这种方法做解决方法会存在几个困难。第一,并不是所有用户提供的数据都是字符串。如果用户输入的是通过用户id来查询author,那我们的查询应该像这样:
Select id,forename,surname from authors where id=1234
在这种情况下,一个攻击者可以非常简单地在数字的结尾添加SQL语句,在其他版本的SQL语言中,使用各种各样的限定符号;在数据库管理系统JET引擎中,数据可以被使用'#'限定。第二,避免单引号尽管看上去可以,但是是没必要的,原因我们稍后再讲。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/sqlserver/)

我们更进一步地使用一个简单的ASP登陆页面来指出哪些能进入SQLSERVER数据库并且尝试鉴别进入一些虚构的应用程序的权限。
这是一个提交表单页的代码,让用户输入用户名和密码:
<HTML
<HEAD
<TITLELogin Page</TITLE
</HEAD

<BODY bgcolor='000000' text='cccccc'
<FONT Face='tahoma' color='cccccc'
<CENTER<H1Login</H1
<FORM action='process_loginasp' method=post
<TABLE
<TR<TDUsername:</TD<TD<INPUT type=text name=username size=100 width=100</TD</TR
<TR<TDPassword:</TD<TD<INPUT type=password name=password size=100 withd=100</TD</TR
</TABLE
<INPUT type=submit value='Submit'<INPUT type=reset value='Reset'
</FORM
</Font
</BODY
</HTML
下面是process_login.asp的代码,它是用来控制登陆的:
<HTML
<BODY bgcolor='000000' text='ffffff'
<FONT Face='tahoma' color='ffffff'
<STYLE
p { font-size=20pt ! important}
font { font-size=20pt ! important}
h1 { font-size=64pt ! important}
</STYLE
<%@LANGUAGE = JScript %
<%
function trace( str ) {
if( Request.form("debug") == "true" )
Response.write( str );
}
function Login( cn ) {
var username;
var password;
username = Request.form("username");
password = Request.form("password");
var rso = Server.CreateObject("ADODB.Recordset");
var sql = "select * from users where username = '" + username + "' and password = '" + password + "'"; trace( "query: " + sql );
rso.open( sql, cn );
if (rso.EOF) {
rso.close();
%
<FONT Face='tahoma' color='cc0000'
<H1 <BR<BR
<CENTERACCESS DENIED</CENTER
</H1

展开更多 50%)
分享

猜你喜欢

SQL Server应用程序中的高级SQL注入

SQLServer
SQL Server应用程序中的高级SQL注入

SQL Server应用程序高级SQL注入(下)

SQLServer
SQL Server应用程序高级SQL注入(下)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

SQL Server应用程序高级SQL注入(上)

SQLServer
SQL Server应用程序高级SQL注入(上)

将应用程序从Sql Server迁移到Oracle

编程语言 网络编程
将应用程序从Sql Server迁移到Oracle

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

编写高级应用程序

编程语言 网络编程
编写高级应用程序

ASP防SQL注入攻击程序

ASP
ASP防SQL注入攻击程序

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

《NBA 2K16》线上对战打法技巧心得

《NBA 2K16》线上对战打法技巧心得

天网防火墙V2.61学习教程(8)

天网防火墙V2.61学习教程(8)
下拉加载更多内容 ↓