SQL Server应用程序中的高级SQL注入
SQL Server应用程序中的高级SQL注入
摘要: 这份文档的预期读者为与数据库通信的WEB程序的开发者和那些扮演审核WEB应用程序的安全专家。 介绍: 一个典型的SQL语句如下: 看上去好象通过从输入中去掉单引号或者通过某些方法避免它们都可以解决这个问题。这是可行的,但是用这种方法做解决方法会存在几个困难。第一,并不是所有用户提供的数据都是字符串。如果用户输入的是通过用户id来查询author,那我们的查询应该像这样: 我们更进一步地使用一个简单的ASP登陆页面来指出哪些能进入SQLSERVER数据库并且尝试鉴别进入一些虚构的应用程序的权限。 <HTML>
<HEAD> <TITLE>Login Page</TITLE> </HEAD> <BODY bgcolor=’000000’ text=’cccccc’> <FONT Face=’tahoma’ color=’cccccc’> <CENTER><H1>Login</H1> <FORM action=’process_loginasp’ method=post> <TABLE> <TR><TD>Username:</TD><TD><INPUT type=text name=username size=100 width=100></TD></TR> <TR><TD>Password:</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> <CENTER>ACCESS DENIED</CENTER> </H1> </BODY> </HTML> <% Response.end return; } else { Session("username") = "" + rso("username"); %> <FONT Face=’tahoma’ color=’00cc00’> <H1> <CENTER>ACCESS GRANTED<BR> <BR> Welcome, <% Response.write(rso("Username")); Response.write( "</BODY></HTML>" ); Response.end } } function Main() { //Set up connection var username var cn = Server.createobject( "ADODB.Connection" ); cn.connectiontimeout = 20; cn.open( "localserver", "sa", "password" ); username = new String( Request.form("username") ); if( username.length > 0) { Login( cn ); } cn.close(); } Main(); %> 出现问题的地方是process_lgin.asp中产生查询语句的部分: 攻击者可以只需提供他们知道的用户名,就可以以任何用户登陆,使用如下输入:
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449913.aspx
参考文档:
SQL注入漏洞全接触--高级篇 C#开发的MDI架构+Access数据库应用程序(增删改查) VS调试C#程序,修改代码出错:不允许对64位应用程序进行修改 C#获取应用程序当前文件目录位置(安装路径) VS Winform设置应用程序文件图标及任务栏显示图标|C/S框架网 C/S应用程序开发框架|C/S开发平台 手把手搭建一个ASP.NET Core Web应用程序(默认HTTPS协议) 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 C/S框架新功能:自动检测升级包并强制关闭应用程序进行版本升级 WCF开发框架IIS承载WCF - Website站点承载改为ASP.NET网站应用程序承载 VS2017发布ASP.NET网站应用程序提示:发布遇到错误由于构建错误,发布失败 WCF开发框架-IIS启用net.tcp协议发现不会自动执行Global应用程序解决方案 VS运行ASP.NET网站应用程序:“/”应用程序中的服务器错误。分析器错误,未能加载类型"XXX.Global"。 C#应用程序不需要管理员权限运行app.manifest文件配置 C#源码-[CMS程序]SiteServer CMS 3.3.7 SQL版_siteservercmssql-源码下载
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |