Username: Password:

浅谈数据库的攻击
来源:linux宝库作者:linux宝库 发布时间:2007-09-30 00:00:00


  浅谈数据库的攻击(荐)

  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,这是个扩展存储过程,他只有一个参数,把参数做为系统命令来装给系统执行。

  假如是管理用户就有权执行这个存储过程,而且这时能够执行很多操作,如用ipconfig来看ip配置,用net user来看系统用户。但是用net user /add 用户名 密码并不一定成功,有时会返回一个“指定的登录会话不存在”而不能执行,原因我还不清楚。

  假如没有权限也不要紧,MS SQL Server有个漏洞,您能够创建一个临时存储过程来执行,就能够绕过去,如:

  CREATE PROC #cmdshell(@cmdstr varchar(200))

  AS

  EXEC master.dbo.xp_cmdshell @cmdshell

  当然这时是没有权限执行net user /add等的,但是能够查看,能够创建文档。

  反复用echo创建一个FTP脚本,把木马传到一个FTP站点上,然后用存储过程调用ftp来利用脚本来下载并安装,然后......呵呵:)

  假如数据库没有装在Web服务器上所以没有找到或改了端口号而一时很难找到还是有办法的。

  假如数据库服务器直接从Internet上无法访问,您能够利用程式里的漏洞来删除、修改数据或加入javascript语句到数据库,通常他们显示本来应该自己人录入的数据时不去过滤<>,所以能够用javascript把他转到其他站点上或做些什么。

  假如只是改了端口号就要看程式里数据库用户的权限了,假如是管理用户,能够用’ exec master.dbo.xp_cmshell ’net user /add aaa bbb来创建一个操作系统用户,然后再用’ exec master.dbo.xp_cmdshell ’net localgroup /add administrators aaa来把他升级为终极用户。

  假如这台服务器的NetBIOS绑定了TCP/IP,而且C$、D$等管理共享存在,呵呵,恭喜了,您在DOS命令下用net use Z: \ip address$ "bbb" /user:"aaa"就能够把对方的整个C盘映射为您本地的一个网络驱对器Z:了。

  6。数据库里怎样留后门。

  创建用户的sp_addlogin、权限分配的sp_addsrvrolemember是用一条语句来判断用户是否有权限执行,也就是说用户都能够执行他,他再来判断用户是否有权执行。

  当您攻入一个数据库时能够用他的Enterprise Manager来连上去修改这些存储过程,因为这些存储过程都没有加密。

  能够在判断的地方加个条件,当这个条件满足时就不直接执行下去而不管是什么权限的用户调用他。

  但是改完要注意,这时他的Type成了User,要想改回能够到sysobjects表中把name为sp_addlogin的一条删除,然后再把没有改过的相同版本的MS SQL Server的同一条记录拷贝进去就能够了。

  当然不要忘了这些默认是不能手工修改的,要修改得先把掉SQL Server的参数,改完不要忘了再改回来啊:) 这时只要网站的程式有问题,不管程式中的用户权限怎样,您都能够随时创建SQL Server的管理用户。

  7。数据库扫描工具。

  ISS DATABASE Scanner

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅