当前位置:文档之家› 第10章 数据库系统安全

第10章 数据库系统安全


xp_cmdshell在SQL
Server2000是默认开启的, 2005中默认被禁止,但数据库用户拥有 sysadmin权限可以使用sp_configure重新开启它
信息安全技术
30
SQL注入攻击的防范
1. 使用专业的漏洞扫描工具 2. 要在Web应用程序开发过程的所有阶段实施代码 的安全检查 3. 使用安全的存储过程对抗SQL注入 4. 检查数据类型:
信息安全技术
13
MS SQL Server注入攻击
/ReadNews.asp?NewsI D=294 and (select count(*) from sysobjects)>0,服 务器会返回错误提示。
ห้องสมุดไป่ตู้信息安全技术
14
MS SQL Server注入攻击
信息安全技术
5
MS SQL Server注入攻击
看到URL中有类似“detail.asp?productid”这样的信息,就 可以猜测该网站是否存在注入漏洞了
信息安全技术
6
MS SQL Server注入攻击
第1步:加单引号。 如图所示是在浏览器地址栏中 /detail.asp?productid=392后面加一个单引号, 按Enter键后,服务器返回的错误提示。

如用户在输入邮箱时,必须按住邮箱的格式进行检查 输入时间、日期时必须严格按照时间、日期的格式进行 检查 避免应用中使用root、dbowner等高权限账户连接数据库
信息安全技术
31
5. 从数据库自身的角度来说应该使用最小权限原则

SQL注入攻击的防范
6. 在HTML/XML中显示“用户可控数据”前,应该 进行html escape转义 7. 使用预编译语句,例如:
信息安全技术
18
攻击存储过程
SQL Server和Oracle数据库有大量内置存储 过程
SQL
Server2000存储过程xp_cmdshell臭名昭著
EXEC master.dbo.xp_cmdshell ‘cmd.exe dir c:’ EXEC master.dbo.xp_cmdshell ‘ping ‘
第十章
数据库安全
主讲人:任凯 联系方式:renkai_jlxy@ 云盘:/s/1qWykdjQ1
本章提要
SQL注入攻击
存储过程的攻击 SQL注入攻击的防范
信息安全技术
2
SQL注入攻击
SQL注入攻击是黑客对数据库进行攻击的常用手段 之一 原因:由于程序员的水平及经验参差不齐,相当 大一部分程序员在编写代码的时候,没有对用户 输入数据的合法性进行判断,使应用程序存在安 全隐患 用户可以提交一段数据库查询代码,根据程序返 回的结果,获得某些他想得知的数据,这就是所 谓的SQL Injection,即SQL注入
MS SQL Server注入攻击
继续猜测表名,在 /detail.asp?productid=392后 面加“and (select count(*) from adminuser)>=0”, 返回正常页面,说明存在“adminuser”表,猜测 成功。

A. /product_more.asp?id=20’ B. /product_more.asp?id=20 and 1=2 C. /product_more.asp?id=20 and 1=1 D. /product_more.asp?id=20 and 99*9<100
9
信息安全技术
MS SQL Server注入攻击
第4步:在浏览器地址栏中 /detail.asp?productid=392后 面加“and user>0”,按Enter键后,服务器返回错 误提示,可知是SQL Server数据库。
信息安全技术
10
MS SQL Server注入攻击
/detail.asp?productid=392 and (select count(*) from sysobjects)>0 如果是SQL Server数据库,那么该网址显示的页面 与“/detail.asp? productid=392”是 一样的
信息安全技术
12
MS SQL Server注入攻击
/ReadNews.asp?NewsI D=294 and (select count(*) from msysobjects)>0, 服务器会返回错误提示“不能读取记录;在 'msysobjects'上没有读取数据权限。”,说明是 SQL Server数据库。
信息安全技术
33
课堂练习
3.关于SQL注入说法正确的是( D )


A. SQL注入攻击是攻击者直接对web数据库的攻击 B. SQL注入攻击除了可以让攻击者绕过认证之外,不会 再有其他危害 C. SQL注入漏洞,可以通过加固服务器来实现 D. SQL注入攻击,可以造成整个数据库全部泄露
信息安全技术
16
MS SQL Server注入攻击
第6步:猜测字段名(用户名和密码字段)。 猜出表名以后,将count(*)替换成count(字段名),用 同样的方法猜解字段名。 在浏览器地址栏中 /detail.asp?productid=392后面加 “and exists (select count(name) from adminuser)>=0”,按 Enter键后,服务器返回错误提示,说明不存在“name”用 户名字段。
第3步:测试“and 1=2”。在浏览器地址栏中/ detail.asp?productid=392后面加“and 1=2”,按Enter键后,服务器返回 错误提示
如果一个网站可以被注入,那么:第2步显示正常网页,第3步显示错 误提示,提示”BOF或EOF中有一个是“真”,或者当前的记录已被删 除,所需的操作要求一个当前的记录”。 如果一个网站不可以被注入,那么:第2步和第3步都会显示错误提示。
信息安全技术
17
MS SQL Server注入攻击
继续猜测用户名字段名,在 /detail.asp?productid=392后面加 “and (select count(admin_name) from adminuser)>=0”,返 回正常页面,说明存在“admin_name”用户名字段名,猜 测成功。
信息安全技术
32
课堂练习
1. sql注入防护通常针对编码进行安全加固。以下哪 一个不属于加固的范畴?( D )

A.使用参数化语句 C.规范化
B.验证输入 D.使用web安全防火墙
2. 已知某个链接存在SQL注入漏洞,网址是 /product.asp?id=20,以下哪 个URL访问之后,页面不会报错( C )。
4. SQL注入通常会在哪些地方传递参数值而引起 SQL注入?( D )


A.web表单 C.url包含的参数值
信息安全技术
B.cookies D.以上都是
34




String custnmae = request.getParamenter(“customerName”); String query = “SELECT account_balance FROM user_data WHERE user_name=?”; PreparedStatement pstmt = connection.prepareStatement(query); pstmt.setString(1,custname); ResultSet results = pstmt.executeQuery();
信息安全技术
11
MS SQL Server注入攻击
sysobjects是SQL Server的系统表 SQL Server数据库一切信息都保存在sysobjects里



例如删除表的SQL语句: if(Exists(Select * From sysobjects Where xtype=‘U’ And Name=‘表名’)) ; drop table [dbo].[表名];
信息安全技术
3
SQL注入攻击
途径:
通过web表单进行SQL注入攻击
通过cookies进行SQL注入攻击
通过url包含的参数值进行SQL注入攻击
信息安全技术
4
SQL注入攻击
步骤: SQL注入漏洞的判断 分析数据库服务器类型 可执行情况 发现WEB虚拟目录 上传ASP木马 得到系统的管理员权限
第5步:猜测表名。在浏览器地址栏中 /detail.asp?productid=392后 面加“and (select count(*) from admin)>=0”,按 Enter键后,服务器返回错误提示,说明不存在 “admin”表。
信息安全技术
15
信息安全技术
7
MS SQL Server注入攻击
第2步:测试“and 1=1”。如图所示,在浏览器地址栏中 / detail.asp? productid=392后面加 “and 1=1”,按Enter键后,服务器返回到正常页面
信息安全技术
8
MS SQL Server注入攻击
相关主题