浅谈数据库的攻击

2016-01-29 16:35 6 1 收藏

浅谈数据库的攻击,浅谈数据库的攻击

【 tulaoshi.com - SQLServer 】

  浅谈数据库的攻击(荐)

1。突破script的限制。  

例如,某网页上有一文本框,允许你输入用户名称,但是它限制你只能输入4个字符。许多程序都是在客户端限制,然后用msgbox弹出错误提示。如果你攻击时需要突破此限制,只需要在本地做一个一样的主页,只是取消了限制,通常是去掉VBscript或IavaScript的限制程序,就可以成功突破。  

如果是javascript做的,干脆临时把浏览器的脚本支持关掉。如果是  
有经验的程序员常常在程序后台再做一遍检验,如果有错误就用response.write或类似的语句输出错误。  

2。对SQL的突破  

例如某网页需要你输入用户名称和口令,这样就有两个文本框等待你的输入,现在我们假设有一用户adam,我们不知道他的口令,却想以他的身份登陆。  

正常情况下,我们在第一个文本框输入adam,第二个文本框输入1234之类的密码,如果密码正确就可以进入,否则报错。  

程序中的查询语句可能是:  

sql="select * from user where username='"&text1.value&"' and passwd= '"&text2.value&"'"  

执行时候就是  

select * from user where username='adam' and passwd='1234'  

好了,  

如果我们在text2里输入的不是1234,而是1234'"&"'or 1=1  

我们的sql语句就成了,  

select * from user where username='adam' and passwd='1234' or 1=1  

我们就可以进入了。。。  

有经验的用户就在程序中增加对单引号等特殊字符的过滤。  

但是,一般人习惯上有两种登录认证方式我就用ASP的VBScript做例子了:  

一是用select * from ... where username = ' & Request.Form("username") & "password = " & Request.Form("password"),然后判断结果是否为空来验证。其实还有一种方式:  

用select * from ... where username = ' & Request.Form("username"), 然后判断结果集中的密码是否和输入相同来验证,这种方式就安全一些了。  

3。利用多语句执行漏洞。  

根据上面的思路,如果用户根据书名(例如linux入门)查询所有的书,SQL语句为  

select book.name,book.content from book where bookname='linux入门'  

如果我们输入的不是linux入门而是 linux入门' delete from user where '1' = '1  

从而构成对表的删除。  

成功的前提条件是对方允许多条语句的执行。  

由于程序没有处理边界符“'”产生的漏洞的危害程度和结果集的类型及数据库的配置有很大的关系。首先说结果集,如果结果集只支持单条的SQL语句,那么你所能做的只是上面提到的那种在密码框内输入' or '1' = '1来登录,其他的做不了。  

我们还可以用这种方法在数据库里增加用户。  

4。SQL Server装完后自动创建一个管理用户sa,密码为空。而好多人装完后并不去改密码,这样就留下了一个极大的安全问题,我稍后再细说。  

程序中的连接一般用两种,不是用global.asa就是用SSL文件。SSL文件一般人习惯放到到Web的/include或/inc目录下。而且文件名常会是conn.inc、db_conn.inc、dbconninc,等等,反正有时能猜到。  

如果这个目录没有禁读,一旦猜到文件名就可以了,因为.inc一般不会去做关联的,直接请求不是下载就是显示源文件。  

还有当主要程序放到一个后缀为.inc的文件而没有处理“'”,当运行出错时返回的出错信息中常会暴露.inc文件,我遇到过几次这样的情况。其实可以在IIS里设置来不回应脚本出错信息的。  

5。数据库的利用。  

如果程序中的连接用户权限极小,甚至多数表只能读,你就很难有所作为了。这时所能做的是能猜出表名和字段名来进行删除数据或表的操作。  

INSERT语句利用起来讨厌一些,主要是里面有好多列,而且还要处理掉最后的“)”。  

我就以我最熟悉的MS SQL Server来说一些吧。它的默认端口号是1433,你用telnet连一下服务器的这个端口,如果能连上去一般是装了MS SQL Server,当然这是可以改掉的。  

好了,说一说数据库的利用。  

如果对方的数据直接在Web服务器上而且你知道端口号,有帐号就干脆用SQL Analyzer来直接连接数据库。在它里面可以执行SQL语句。常用的是存储过程master.dbo.xp_cmdshell,这是一个扩展存储过程,它只有一个参数,把参数做为系统命令来装给系统执行。  <

来源:http://www.tulaoshi.com/n/20160129/1499010.html

延伸阅读
从前面的介绍可以看出,可以为各种类型的数据库管理系统编写VisualBasic前端。事实上,使用ODBC驱 动程序,可以建立与几乎任何数据库管理系统连接的应用程序。这一节中,将介绍可以与VisualBasic数据库应用程序一起使用的几种数据库管理系统。 普通的关系数据库管理系统 普通的关系数据库管理系统(RDBMS)一般是指传统的桌面RDB...
标签: MySQL mysql数据库
最近在学习数据库开发的一些实例,这里浅谈一下用JDBC连接数据库MySQL(当然也可以连接SQL Sever或Oracle了,只是我更喜欢开源软件,同时也更简单)。 首先正确安装好MySQL,建立好数据库 studentinfo mysqlcreate database studentinfo; 然后编写java代码, ConnectToMySQL.java import java.sql.*;public class ConnectT...
结论:在数据库中研究和实现算法有着相当大的困难,同时也是一种挑战。随着现实世界中业务规则的日益复杂,相应的数据库应用软件实现业务规则需要的算法也日益复杂,把复杂的算法应用在数据库中需要找到一个统一的方式,在熟悉业务规则的前提下,根据数据库的特点和相应的执行命令的能力,找到一种适合数据库批量计算的步骤是解决问题的关...
笔者认为,在创建索引时要做到三个适当,即在适当的表上、适当的列上创建适当数量的索引。虽然这可以通过一句话来概括优化的索引的基本准则,但是要做到这一点的话,需要数据库管理员做出很大的努力。具体的来说,要做到这个三个适当有如下几个要求。 一、 根据表的大小来创建索引。 虽然给表创建索引,可以提高查询的效率。但是数...
1、使用SHOW语句找出在服务器上当前存在什么数据库: mysql SHOW DATABASES; +----------+ | Database | +----------+ | mysql | | test | +----------+ 3 rows in set (0.00 sec)  2、创建一个数据库abccs mysql CREATE DATABASE abccs; 注意不同操作系统对大小写的敏感。 3、选择你所创建的数据库...

经验教程

695

收藏

51
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部