SQL Server应用程序的高级Sql注入(8)
作者:Chris Anley luoluo 来源: * 八进制 发布时间:2009-04-11 16:54:00
[存储过程]
传统的认识是如果ASP程序使用了数据库系统的存储过程,那么就不可能SQL注入了。这句话不完全对,这依赖于ASP脚本调用存储过程的方式。
本质上,一个带参数的查询执行了,用户提供的参数就被安全的传给查询,SQL注入就不可能了。但是,如果攻击者可以对无数据部分的查询语句施加任何影响,他们仍然可能控制数据库。
一个有用的规则是:
1. 如果ASP脚本创建了一个提交给服务器的SQL查询语句,这是很容易被SQL注入的,即使它使用了存储过程。
2. 如果ASP脚本使用了封装传递参数给存储过程的过程对象(如ADO command对象,和参数集合一起使用的)那么它通常就很安全了,但是这还要取决于对象的执行。
明显的,最好习惯于验证所有的用户输入,因为新的攻击技术会不停的涌现。
为了说明存储过程查询的注入,运行下面的SQL语句:
sp_who '1' select * from sysobjects
或者
sp_who '1' ; select * from sysobjects
任何附加语句在存储过程执行后还是可以执行。
[高级Sql注入]
一个应用程序通常过滤单引号,另一方面限制用户的输入,比如限制长度。
在这里,我们将讨论一些绕过一些明显的SQL注入防范的和长度限制的技巧。
[没有符号的字符串]
有时候,开发人员可能已经通过过滤单引号来保护应用程序,比如用VBScript的'replace'函数:
function escape( input )
input = replace(input, "'", "''")
escape = input
end function
不可否认,这会阻止所有的对我们上面给出的对示例站点的攻击,删除';'字符也会起作用。但是,在一个大的程序里一些用户输入可能被假定为数值型。这些值没有限制,提供了很多可以注入的地方。
如果攻击者希望创建一个字符串值而不使用引号,他们可以用'char'函数。例如:
insert into users values( 666,
char(0x63)+char(0x68)+char(0x72)+char(0x69)+char(0x73),
char(0x63)+char(0x68)+char(0x72)+char(0x69)+char(0x73),
0xffff)
它是一个往表里插入字符的不带引号的查询语句。
当然,如果攻击者使用一个数值型的用户名和密码的话,下面的语句也同样可以很好的执行:
insert into users values( 667,
123,
123,
0xffff)
因为SQL-Server自动将数值型的转换成'varchar'类型,类型转换是默认的。


猜你喜欢
- 使用python删除excel表格重复行。# 导入pandas包并重命名为pdimport pandas as pd# 读取Excel中Sh
- 如何在ADO中使用SQL函数?代码见下:<%Set conn1 = Server.CreateObjec
- 我会随便说,C++ 近年来开始"抄袭" Python 么?我只会说,我在用 C++ 来学习 Python.不信?来跟着我
- mssql 的正式名字是 SQL Server MS公司出的。图形操作界面好一些,性能还可以。在在mssql和oracle上不能互换.支持O
- 本文以实例形式较为详细的讲解了Python的多线程,是Python程序设计中非常重要的知识点。分享给大家供大家参考之用。具体方法如下:用过P
- 异常捕捉:try: XXXXX1 raise Exception(“xxxxx2”) except (Except
- 1.selenum:三方库。可以实现让浏览器完成自动化的操作。2.环境搭建2.1 安装:pip install selenium2.2 获取
- 元组Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。元组创建很简单,只需要在括号中添加元素,并
- 安装pip(3) install pyecharts此文版本为v1.6此文版本为v1.6此文版本为v1.6效果图使用Pycharts绘制一个
- ALTER TABLE 表名字 ADD CONSTRAINT pk_表名字 PRIMARY KEY( SNumber, SDate ); S
- 使用 Windows 系统一大好处是它的应用太丰富了,甚至强大的 GPU 也能在闲暇时间做点其它「工作」。然而与 Linux 或 macOS
- 总说由于pytorch 0.4版本更新实在太大了, 以前版本的代码必须有一定程度的更新. 主要的更新在于 Variable和Tensor的合
- 使用pandas处理向量化的数据,进行数据的替换时不仅仅能够进行字符串的替换也能够处理数字。做简单的示例如下:In [4]: data =
- 1.gorm介绍1.1介绍全功能 ORM关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表
- 这两天准备复习一下java,所以写一个采用dubbo的商场项目练练手,却卡第一个测试上,启动provider服务和Consumer服务,请求
- asp函数代码 代码如下:<% Function RemoveHTML(str) Dim objRegExp, Match,strHT
- 我们可以利用windows提供的api函数来实现对系统键盘事件和鼠标事件的监听,主要利用的是SetWindowsHookEx函数,这个函数可
- <div> <table width="320" cellpadding="0"
- 本文实例为大家分享了python实现转圈打印矩阵的具体代码,供大家参考,具体内容如下#! conding:utf-8__author__ =
- 使用Django服务网页时,只要用户执行导致页面更改的操作,即使该更改仅影响页面的一小部分,它都会将完整的HTML模板传递给浏览器。但是如果