黑客小组 承接业务>记录查询+密码找回+定位服务+通话短信查询以及修改服务。

本站所有查询破解等商业服务, 保证其 安全性 + 快捷性 + 保障性 + 售后 !
安全性 -交易后删除所有档案,只留订单号.快捷性 -整个交易流程条理性,下订单-支付定金-填写工单-等待结果
保障性 -本站通过多家媒体报道.售后 -交易完成后,凭下订单生成的订单号 维护,升级等

另类技巧拿下服务器

终于有时间可以写自己的东西了。呵呵,直入黑客基地,不废话了。

i、 introduction

关于win2k下面的空会话,已经是一个很老的话题了。当然,也一直被认为是win2k自带的一个后门。当建立一个空会话之后,对于一台配置不到位的win2k服务器来说,那么将能够得到非常多的信息,比如枚举帐号等等。

ii、 about tcp port 445, win2000的tcp 445端口

smb(server message block)协议在nt/2000中用来作文件共享,在nt中,smb运行于nbt(netbios over tcp/ip)上,使用137,139(udp),139(tcp)端口。在2000中,smb可以直接运行在tcp/ip上,而没有额外的nbt层,使用tcp 445端口。因此在2000上应该比nt稍微变化多一些。

可以在“网络连接/属性/tcpip协议/属性/高级/wins中设置启用或者禁用nbt(netbios over tcp/ip)。

当2000使用网络共享的时候,就面临着选择139或者445端口了。下面的情况确定会话使用的端口:

1、如果客户端启用了nbt,那么连接的时候将同时访问139和445端口,如果从445端口得到回应,那么客户端将发送rst到139端口,终止这个端口的连接,接着就从445端口进行smb的会话了;如果没有从445端口而是从139得到回应,那么就从139端口进行会话;如果没有得到任何回应,那么smb会话失败。

2、如果客户端禁用了nbt,他就将只从445端口进行连接。当然如果服务器(开共享端)没有445端口进行smb会话的话,那么就会访问失败了,所以禁用445端口后,对访问nt机器的共享会失败。

3、如果服务器端启用nbt,那么就同时监听udp 137、138端口和tcp139,445。如果禁用nbt,那么就只监听445端口了。

所以对于2000来说,共享问题就不仅仅是139端口,445端口同样能够完成。

iii、the null session,关于空会话

null会话(空会话)使用端口也同样遵循上面的规则。null会话是同服务器建立的无信任支持的会话。一个会话包含用户的认证信息,而null会话是没有用户的认证信息,也就好比是一个匿名的一样。

没有认证就不可能为系统建立安全通道,而建立安全通道也是双重的,第一,就是建立身份标志,第二就是建立一个临时会话密匙,双方才能用这个会话进行加密数据交换(比如rpc和com的认证等级是pkt_privacy)。不管是经过ntlm还是经过kerberos认证的票据,终究是为会话创建一个包含用户信息的令牌。(这段来自joe finamore)根据win2000的访问控制模型,对于空会话同样需要提供一个令牌。但是空会话由于是没有经过认证的会话,所以令牌中不包含用户信息,因此,建立会话双方没有密匙的交换,这也不能让系统间发送加密信息。这并不表示空会话的令牌中不包含sid,对于一个空会话,lsa提供的令牌的sid是s-1-5-7,这就是空会话建立的sid,用户名是 anonymous logon。这个用户名是可以在用户列表中看到的。但是是不能在sam数据库中找到,属于系统内置的帐号。

null会话几乎成为了微软自己安置的后门,但是微软为什么要来设置这样一个“后门”呢?我也一直在想这个问题,如果null会话没有什么重要的用途,那么微软也应该不会来设置这样一个东西。好不容易才在微软上找到这个:

当在多域环境中,要在多域中建立信任关系,首先需要找到域中的pdc来通过安全通道的密码验证,使用空会话能够非常容易地找到pdc,还有就是关于一些系统服务的问题。而且lmhosts的#include就需要空会话的支持,可以参考文章:

http://support.microsoft.com/default.aspx?scid=kben-us;q121281

还有http://support.microsoft.com/default.aspx?scid=kben-us;q124184

其实建立一个空会话的条件也非常严格。首先要能够满足上面的,也就是打开tcp139和tcp 445端口。我们可以从一次关闭这两个端口的情况中看得出来。服务器关闭445和139端口,然后我们来进行空会话的连接。首先,客户端打算连接的是445端口,然后再试图连接139端口。当然最后还是失败了。

仅仅开放这两个端口还不行,服务器还必须得打开ipc$共享。如果没有ipc共享,即使共享一个文件,有权限为anonymous logon,也不能建立会话,即使权限设置为完全控制,出现的连接错误依然是权限不够。这和其他帐号是不一样的。如果要允许一个文件夹共享能够类似ipc$(命名管道而非共享)能够使用空会话,那么需要修改注册表:

hkey_local_machine\system\currentcontrolset\services\lanmanserver\parameters
\中的:nullsessionshares,

添加新的共享名,这样才能建立一个共享的空会话。这时,将不依赖ipc的存在了。(即使这样的空会话对于后面的突破也是一点没可取之处的,因为没有了ipc$命名管道,rpc不可取了,这下知道ipc这个命名管道的具体实现了。呵呵)虽然空会话建立的要求很严格,但是那都是默认建立的。既然是默认的,对于使用win2k系统的服务器来说,就还是有利用的价值。最明显的就是空会话可以很方便地连接到其他的域,枚举用户、机器等。这也就是扫描软件进行探测的原理。我举个简单的程序例子来说明这个用途,并枚举用户组和用户。

#include
#include
#include
#pragma comment (lib, "mpr.lib")
#pragma comment (lib, "netapi32.lib")
void explorer_groups(char *);
void main( int argc, char *argv[ ] )
{
dword ret;
char username[100] = "", password[100] = "";
char server[100] = "", ipc[100] = "";
netresource net;
if (argc == 1) {
exit(1);
}
strncpy(server,argv[1],100);
printf("server: %s\n", server);
sprintf(ipc,"\\\\%s\\ipc$",server);
net.lplocalname = null;
net.lpprovider = null;
net.dwtype = resourcetype_any;
net.lpremotename = (char*)&ipc;
printf("setting up session... ");
ret = wnetaddconnection2(&net,(const char *)&password,(const char *)&use
rname,0);
if (ret != error_success)
{
printf("ipc$ connect fail.\n");
exit(1);
}
else printf("ipc$ connect success.\n");
explorer_groups((char*)&server);
printf("disconnect server... ");
ret = wnetcancelconnection2((char*)&ipc,0,true);
if (ret != error_success)
{
printf("fail.\n");
exit(1);
}
else printf("success.\n");
exit (0);
}
void explorer_groups(char *server)
{
dword ret, read, total, resume = 0;
int i;
lpvoid buff;
char comment[255];
wchar_t wserver[100];
do {
ret = netlocalgroupenum(wserver, 1, (unsigned char **)&buff, max_pre
ferred_length, &read, &total, &resume);
if (ret != nerr_success && ret != error_more_data)
{
printf("fail\n");
break;
}
plocalgroup_info_1 info = (plocalgroup_info_1) buff;
for (i=0; i
printf("group: %s\n",info[i].lgrpi1_name);
widechartomultibyte(cp_acp, 0, info[i].lgrpi1_comment , -1, comm
ent,255,null,null);
printf("\tcomment: %s\n",comment);
dword ret, read, total, resume = 0;
ret = netlocalgroupgetmembers((const unsigned short*)&wserver, i
nfo[i].lgrpi1_name, 2, (unsigned char **)&buff, 1024, &read, &total, &resume
);
if (ret != nerr_success && ret != error_more_data) {
printf("fail\n");en
break;
}
plocalgroup_members_info_2 info = (plocalgroup_members_info_2) b
uff;
for (unsigned i=0; i
printf("\t\t%s\n", info[i].lgrmi2_domainandname);
printf("\t\t\tsid:%d\n", info[i].lgrmi2_sid);
printf("\t\t\tsidusage:%d\n",info[i].lgrmi2_sidusage);
}
netapibufferfree (buff);
}
netapibufferfree (buff);
} while (ret == error_more_data );
}

这是一个简单的例子。当然可以查询更多的东西。类似,就不再重复了。枚举用户名是很重要的用途,因为接下来可以做的就是进行密码的猜解,这对系统安全构成的威胁是非常大的。

想到有威胁,就需要知道怎么防范。防范很简单。不过这里需要提醒的是关于注册表(或者安全策略中)中可以设置restrictanonymous为1,这样可以禁止空连接进行枚举。因为很多安全配置介绍中都是这样做的,因为如果设置为2的话,有一些问题会发生。比如一些win的服务出现问题等等。但是,restricanonymous设置为1并不会组织用户帐号的枚举。因为空连接是一样能够建立的,并不是说阻止了空连接的建立。但是我们这里需要来突破!!

iv、 break through "restricanonymous=1",突破restricanonymous=1的限制进行用户枚举虽然我们还是能够建立空连接,但是却没有那些net函数的访问权限了。这个可以看msdn上关于对网络管理函数的安全问题。但是,有一个突破点,呵呵,那就是猜测。这个需要联系到访问控制模型上了。就象前面对null会话说到的那样,null会话获得anonymous logon 用户名的sid(安全标志符),系统用sid来标志这个用户,同时创建令牌。而这个令牌才是系统对用户的访问权限标志,并不是用帐户名来确定。现在我们需要的是sid,因为令牌中包含了帐户的sid,对于系统来说,sid是不变的。sid是在帐户或者组创建的时候就建立好了。可是每个win2k系统为相同用户名的帐户创建的sid并不相同。

我们来先分析这个重要的sid。sid的格式是:s-r-x-y(1)-y(2)-……-y(n)。其中s表示该字符串是sid,r是sid的版本号,对于2000来说,这个就是1,然后x是标志符的颁发机构 (identifier authority)。对于2000内的帐户,颁发机构就是nt,值是5。然后y表示一系列的子颁发机构,前面几项是标志域的,最后一个y(n)标志着域内的帐户和组。也就是说,对于多数帐户来说,区别在与这个y(n)。

现在需要分析一下sam结构中对帐户的管理。展开注册表的sam之后,hkey_local_machine\sam\sam\domains\builtin\aliases\members,存储着重要的帐户内容。找到本地的域,然后展开,得到的就是本地帐号的所有sid列表。分析其规律,因为有些是系统规定的y(n),所以就有规律了。其中的000001f4,十进制的500,这一定是一个固定的,标志系统建立时候的内置管理员帐号administrator,000001f5就是guest

帐号了。然后看到了一个跳跃到了000003e8,这是其他帐号的开始,比如 tsinternetuser帐户以及自定义的帐户了。

到了这里,我们还需要函数的支持。lookupaccountname()和lookupaccountsid(),这两个函数是允许空会话使用的。上面通过空会话来建立连接然后使用net*函数枚举帐户已经被restrictanonymous禁止了。因此,sid成为我们的突破口。不过sid对于一台机器来说是固定的,但是并不是说跟其他的机器的sid是一样的,我们需要进行一定的猜测

用来获得sid中不同的部分,就是几个子颁发机构。哈哈,我们猜测的东西就是用户名。假象系统存在的用户名,比如tsinternetuser,guest帐户等。然后通过这些帐户名获得sid的前面部分,然后根据前面部分进行枚举,将最后一个子颁发机构进行递加,从而获得每个帐户的sid,然后又回过来,利用函数lookupaccountsid()进行用户名的查询。

这样就达到了枚举帐户的目的了,而且是在 restrictanonymous=1 的情况下。

我写了一个程序,我猜测的帐号是guest。大致思路在这里介绍了,把代码贴在这里太占篇幅,原代码和执行程序可以在我的主页(www.opengram.com)下载。

v、 conclusion

不过,即便我们花费这么大精力能够突破restricanoymous=1的限制,但是防范起来简直太容易了。取消掉ipc$命名管道,就让null session完全没有用了。

 

互联网的触角已经延伸到了人类生活的每个角落,革命性的改变了人类的生活方式。从现实商业目的,到网络黑客服务,再到以用户为中心、注重用户个人体验的黑客小组所有破解查询项目,传统的网络服务概念被彻底颠覆。。
行业内优秀的破解查询团队
国内老牌兵团成员
国内最具有价值体现的黑客服务机构
专业WEB 服务器 数据库研究高手
网络黑客信息服务一体化

网络黑客服务业务提供商繁多,所谓能破解查询鱼龙混杂您是否还徘徊在选择有实力的黑客服务当中?,想找有实力,有信誉,有保障,有质量的 提供商吗?就在你的眼前 黑客小组 由原绿色兵团小组成员组织的黑客服务提供商,在中美黑客大战响有名气!本站站长糖舆甜是知名兵团早期核心成员 以多年的黑客经验倾力打造行业黑客小组 竭诚为广大客户提供一流的服务!。
版权所有,未经授权禁止复制或建立镜像。所用程序 2019 DesDev Inc. All rights reserved Powered by 黑客破解
Copyright ◎ 2002-2019 黑客破解.com @cn破解小组 版权所有 网站地图
京ICP备00113678号