浅谈对数据库的攻击
作者:Yudi 文章来源:Web 更新时间:2007-10-21
浅谈对数据库的攻击(1)
佳佳在这里简单谈一下对数据库的攻击。由于本人才疏学浅,望大家能够批评指正。
一般的web server都要使用数据库来存储信息,几乎所有的网站都要用数据库。这样就存在着两种可能,一种是使用小型数据库,如aceess,一般就储存在本地。另一种是使用大型数据库,如SQL server,Oracle这时候一般就放在另一台机器上,然后通过ODBC来访问它。
由于页面经常需要查询各种信息,修改用户信息等操作,实质上就是和数据库打交道了。这样就给非法用户留下利用的机会了。
1.对本地数据库的攻击。
对本地数据库的攻击一种方法就是下载数据库,然后呢,你就可以打开这个数据库得到内部的用户和帐号了,以及其它有用的信息。
下面以“水莲会”为例:
经过扫描,得知www.suilian.net使用的是虚拟主机,使用的是WIndows NT+IIS4.0.扫描器你可以使用twwwscan或者其它,其实功能都大同小异。
在对IIS攻击时如果能够看到ASP源代码,那么成功的可能性就很大了。
经过测试,发现此站点存在源代码暴露漏洞。。。
大家可以试试:
http://www.suilian.net/null.htw?CiWebhitsfile=/maillist.asp%20&CiRestriction=none&CiHiliteType=full
http://www.suilian.net/null.htw?CiWebhitsfile=/index.asp%20&CiRestriction=none&CiHiliteType=full
http://www.suilian.net/null.htw?CiWebhitsfile=/chat/DetNew.asp%20&CiRestriction=none&CiHiliteType=full
http://www.suilian.net/null.htw?CiWebhitsfile=/chat/detail.asp%20&CiRestriction=none&CiHiliteType=full
http://www.suilian.net/null.htw?CiWebhitsfile=/chat/topic4.asp%20&CiRestriction=none&CiHiliteType=full
http://www.suilian.net/null.htw?CiWebhitsfile=/chat/titlefrm.asp%20&CiRestriction=none&CiHiliteType=full
http://www.suilian.net/null.htw?CiWebhitsfile=/chat/titlenew.asp%20&CiRestriction=none&CiHiliteType=full
看见了什么?
当然源代码泄露的漏洞有很多种,这里就不一一列举,你可以去查漏洞手册。
现在你就可以去查看ASP源代码了。
如果你对ASP不熟悉,我简单介绍一下(其实佳佳也不熟悉)。
ASP是嵌在<%和%>之间。一般使用VBScript或者JavaScript书写代码。
看这个例子使用VBScript书写的:
<%
...
set cn1=server.createobject("ADODB.connection")
dbpath=server.mappath("user.mdb")
cn1.open "driver={microsoft access driver (*.mdb)};dbq="&dbpath
set rs=server.createobject("ADODB.recordset")
rs.open "select * from yhb",cn1,adopenkeyset
...
%>
这是一个典型的与数据库连接的代码。
依次的步骤为:
建立连接对象,
设置数据库路径,
打开数据库,
设置记录对象,
取记录。
这里我们就可以知道数据库的类型,名称和路径,这里是在当前目录下。
还可以知道数据库的表名和字段名称。
有经验的程序员一般不会把数据库名直接放在代码里,而是在ODBC里设置数据源,以增加安全性。
然后就发现存在
d:\S\suilian\chat\news.mdb
d:\S\suilian\topic22.mdb等数据库
你只要使用
http://www.suilian.net/chat/news.mdb
http://www.suilian.net/topic22.mdb
就可以把它下载下来。。。
有什么问题请在佳佳的BBS留言,经常去586,lovehacker,mayi都是高手。。。
对本地数据库的攻击的第二种方法是使用SQL语句,这和远程数据库的方法一样,会在下一节介绍的。
再见!
jjgirl 11.20.2000
浅谈对数据库的攻击(2)
这次主要介绍对远程数据库的攻击:
佳佳写完此文后得到深圳黑客cyberman的大幅度修改(可以说本文主要内容是由cyberman完成),在此对cyberman的黑客精神表示感谢!
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语句利用起来讨厌一些,主要是里面有好多列,而且还要处理掉最后的“)”。
我就以我最[1] [2] 下一页
编辑推荐