家电维修班,手机维修班,电脑维修班,电工班,焊工班,液晶电视维修班,电动工具维修班、电动车摩托车维修班、网络营销培训、网站设计培训、淘宝培训---全国招生 家电维修班,手机维修班,电脑维修班,电工班,焊工班,液晶电视维修班,电动工具维修班、电动车摩托车维修班、网络营销培训、网站设计培训、淘宝培训---全国招生
首 页·您想咨询招生情况,请联系我啊·您想咨询招生情况,请联系我啊
当前位置:湖南阳光电子技术学校文章资讯技术园地电脑维修技术
招生办公室电话:0731-85569651 0731-85579057 全国免费电话:0731-85579057

利用Win2K下的空会话(null session)入侵服务器

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2010-07-29 20:26:31

i、 introduction
ii、 about tcp port 445
iii、the null session
iv、 break through "restricanonymous=1"
v、 conclusion
终于有时间可以写自己的东西了。呵呵,直入主题,不废话了。
i、 introduction
关于win2k下面的空会话,已经是一个很老的话题了。当然,也一直被认为是win2
k自带的一个后门。当建立一个空会话之后,对于一台配置不到位的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(net
bios 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,用户名是 anony
mous logon。这个用户名是可以在用户列表中看到的。但是是不能在sam数据库中找到,
属于系统内置的帐号。
(关于这部分对null session的分析,可以参照:《null sessions in nt/2000》http
://rr.sans.org/win/null.php)
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
其实建立一个空会话的条件也非常严格。首先要能够满足上面的,也就是打开tcp
139和tcp 445端口。我们可以从一次关闭这两个端口的情况中看得出来。服务器关闭44
5和139端口,然后我们来进行空会话的连接。首先,客户端打算
连接的是445端口,然后再试图连接139端口。当然 后还是失败了。
仅仅开放这两个端口还不行,服务器还必须得打开ipc$共享。如果没有ipc共享,即
使共享一个文件,有权限为anonymous logon,也不能建立会话,即使权限设置为完全控
制,出现的连接错误依然是权限不够。这和其他帐号是不一样的。如果要允许一个文件
夹共享能够类似ipc$(命名管道而非共享)能够使用空会话,那么需要修改注册表:
hkey_local_machine/system/currentcontrolset/services/lanmanserver/parameters
/中的:nullsessionshares,
添加新的共享名,这样才能建立一个共享的空会话。这时,将不依赖ipc的存在了。(即
使这样的空会话对于后面的突破也是一点没可取之处的,因为没有了ipc$命名管道,rp
c不可取了,这下知道ipc这个命名管道的具体实现了。呵呵)
虽然空会话建立的要求很严格,但是那都是默认建立的。既然是默认的,对于使用
win2k系统的服务器来说,就还是有利用的价值。 明显的就是空会话可以很方便地连接
到其他的域,枚举用户、机器等。这也就是扫描软件进行探测的原理。我举个简单的程序
例子来说明这个用途,并枚举用户组和用户。
#include <windows.h>
#include <stdio.h>
#include <lm.h>
#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<read; 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<read; 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会话获得anon
ymous 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,这是其他帐号的开始,比如 tsinternetu
ser帐户以及自定义的帐户了。
到了这里,我们还需要函数的支持。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完全没有用了。
-----------------------
reference:
1、msdn
2、http://www.microsoft.com/msj/defaultframe.asp?page=/msj/0299/security/sec
urity0299.htm&nav=/msj/0299/newnav.htm
3、《the use of tcp port 445 in windows 2000》 arne vidstrom

  湖南省阳光电子技术学校常年开设:手机维修培训、家电维修培训、电工培训、电脑维修培训、焊工培训--面向全国火爆招生!网址:http://www.hnygpx.com 报名电话:0731-85579057)。安置就业。考试合格颁发全国通用权威证书。采用我校多年来独创的“模块教学法”,理论与实践相结合、原理+图纸+机器三位一体的教学模式,半天理论,半天实践,通俗易懂,确保无任何基础者也能全面掌握维修技能、成为同行业中的佼佼者。工作(一期不会,免费学会为止)。

Tags:session 服务器 null 会话

作者:佚名
[]
电工培训学校 电动车维修学校 摩托车维修学校 摩托车维修培训 手机维修培训 家电维修培训 电脑维修培训 电动工具维修培训 液晶电视维修培训 安防监控培训 空调维修培训 网络营销培训 网站设计培训 淘宝网店培训 电器维修培训 家电维修学校 电工培训 焊工培训 电工学校 电工培训学校 电动车维修学校 摩托车维修学校 摩托车维修培训 手机维修培训 家电维修培训 电脑维修培训 电动工具维修培训 液晶电视维修培训 安防监控培训 空调维修培训 网络营销培训 网站设计培训 淘宝网店培训 电器维修培训 家电维修学校 电工培训 焊工培训 电工学校 电工培训学校 电动车维修学校 摩托车维修学校 摩托车维修培训 手机维修培训 家电维修培训 电脑维修培训 电动工具维修培训 液晶电视维修培训 安防监控培训 空调维修培训 网络营销培训 网站设计培训 淘宝网店培训 电器维修培训 家电维修学校 电工培训 焊工培训 电工学校 电工培训学校 电动车维修学校 摩托车维修学校 摩托车维修培训 手机维修培训 家电维修培训 电脑维修培训 电动工具维修培训 液晶电视维修培训 安防监控培训 空调维修培训 网络营销培训 网站设计培训 淘宝网店培训 电器维修培训 家电维修学校 电工培训 焊工培训 电工学校
中山市,固原市,银川市,玉树,海东,陇南市,酒泉市,张掖市,天水市,金昌市,兰州市,榆林市,延安市,渭南市,铜川市,阿里,山南,拉萨市,怒江,文山州,楚雄州,普洱市,昭通市,玉溪市,昆明市,毕节,铜仁,遵义市,贵阳市,甘孜州,资阳市,达州市,宜宾市,南充市,遂宁市,绵阳市,泸州市,自贡市,三亚市,崇左市,河池市,玉林市,钦州市,梧州市,柳州市,梅州市,肇庆市,湛江市,佛山市,珠海市,韶关市,湘西州,怀化市,郴州市,张家界市,邵阳市,株洲市,仙桃市,随州市,荆州市,荆门市,襄樊市,黄石市,驻马店市,信阳市,南阳市,漯河市,中卫市,石嘴山市,海西,海南藏州,黄南州,海北,甘南,庆阳市,平凉市,武威市,白银市,嘉峪关市,安康市,汉中市,咸阳市,宝鸡市,林芝,日喀则,昌都,迪庆,德宏,大理,西双版纳,红河州,临沧市,丽江市,保山市,曲靖市,黔东州,黔西州,安顺市,六盘水市,凉山州,阿坝州,雅安市,广安市,眉山市,内江市,广元市,德阳市,攀枝花市,成都市,海口市,来宾市,百色市,贵港市,北海市,桂林市,南宁市,云浮市,揭阳市,潮州市,清远市,阳江市,汕尾市,惠州市,茂名市,江门市,汕头市,深圳市,广州市,娄底市,永州市,益阳市,岳阳市,湘潭市,长沙市,恩施州,黄冈市,孝感市,鄂州市,十堰市,武汉市,周口市,商丘市,三门峡市,许昌市,焦作市,安阳市,鹤壁市,平顶山市,开封市,郑州市,聊城市,滨州市,德州市,莱芜市,日照市,泰安市,烟台市,潍坊市,东营市,淄博市,上饶市,济南市,抚州市,宜春市,赣州市,新余市,九江市,景德镇市,宁德市,南平市,泉州市,莆田市,厦门市,宣城市,亳州市,六安市,宿州市,黄山市,滁州市,安庆市,淮北市,马鞍山市,蚌埠市,芜湖市,合肥市,丽水市,舟山市,衢州市,金华市,湖州市,嘉兴市,宁波市,宿迁市,镇江市,盐城市,连云港市,苏州市,徐州市,南京市,绥化市,牡丹江市,佳木斯市,大庆市,鹤岗市,哈尔滨市,白城市,白山市,辽源市,吉林市,葫芦岛市,铁岭市,盘锦市,阜新市,锦州市,本溪市,鞍山市,沈阳市,锡林郭勒盟,通辽市,乌海市,吕梁市,忻州市,晋中市,晋城市,阳泉市,太原市,廊坊市,承德市,保定市,邯郸市,唐山市,宁夏,甘肃省,西藏,贵州省,重庆市,广西,湖南省,河南省,江西省,安徽省,江苏省,黑龙江省,辽宁省,山西省,天津市,四平市,内蒙古,吴忠市,果洛,西宁市,定西市,商洛市,西安市,那曲,黔南州,巴中市,乐山市,贺州市,防城港市,东莞市,河源市,常德市,衡阳市,咸宁市,宜昌市,濮阳市,新乡市,洛阳市,菏泽市,临沂市,威海市,济宁市,枣庄市,青岛市,吉安市,鹰潭市,萍乡市,南昌市,龙岩市,漳州市,三明市,福州市,池州市,巢湖市,阜阳市,铜陵市,淮南市,台州市,绍兴市,温州市,杭州市,泰州市,扬州市,淮安市,南通市,常州市,无锡市,大兴安岭,黑河市,七台河市,伊春市,双鸭山市,鸡西市,齐齐哈尔市,延边,松原市,通化市,长春市,朝阳市,辽阳市,营口市,丹东市,抚顺市,大连市,阿拉善盟,兴安盟,乌兰察布市,巴彦淖尔市,呼伦贝尔市,鄂尔多斯市,赤峰市,头市,呼和浩特市,临汾市,运城市,朔州市,长治市,大同市,衡水市,沧州市,张家口市,邢台市,秦皇岛市,石家庄市,青海省,陕西省,云南省,四川省,海南省,广东省,湖北省,山东省,福建省,浙江省,上海市,吉林省,河北省,北京市