初级域渗透系列

admin 2022年3月22日10:17:20评论86 views字数 14775阅读49分15秒阅读模式

from:https://www.t00ls.net/viewthread.php?tid=30541&highlight=%E5%9F%9F%E6%B8%97%E9%80%8F

https://www.t00ls.net/viewthread.php?tid=30781&highlight=%E5%9F%9F%E6%B8%97%E9%80%8F

https://www.t00ls.net/viewthread.php?tid=30632&highlight=%E5%9F%9F%E6%B8%97%E9%80%8F

https://www.t00ls.net/thread-28727-1-1.html

写在前面的话:T00ls.Net - 低调求发展 - 技术无止境 - Focus On Network Security* U7 a2 z3 x- f2 B
     这是一份初级的域渗透教程,旨在给不熟悉域渗透的童鞋进行科普,同时也是揭露一些常见的渗透方法,让广大内网管理员知其然而后防范于未然。
     由于这是初级的教程,所以不会或较少涉及程序编写,powershell,从Linux渗透windows域,metasploit,网络设备,社会工程学等,等以后如果有中阶域渗透系列再行讨论。
    未经允许请勿利用文章里的技术资料对任何外部计算机系统进行入侵攻击,不得进行任何非授权形式的安全测试。本文仅提供技术交流,本人不对任何利用该文章技术造成的任何理论上或实际上的损失承担责任。
0x01. 基本介绍 - 专注网络安全6 m' d6 q# N2 ]* O6 T
      推荐大家去看一本书《Windows Server 2008 R2 Active Directory配置指南》 ,如果有时间可以通读。如果时间紧,可以只读其中几章:               
            第1章  Active Directory域服务(AD DS) - 专注网络安全! t: v% a; c6 l* j
            第2章  建立AD DS域
            第3章  域用户与组账户的管理
            第8章  管理域和林信任 - 低调求发展5 i: e+ i' i# s8 w* j8 J
            第10章  操作主机的管理。 - 低调求发展% P' Z8 x& b3 s6 d
0x02. 信息获取
如何判断当前计算机是否在域内

     比较简单的方法是net time /domain命令,如果存在域会从域控返回时间:

初级域渗透系列
这表示域名为test.ad,域控是PDC
     如果不存在域,则结果是这样的:T00ls.Net - 低调求发展 - 技术无止境 - Focus On Network Security! r/ s5 e& d$ O9 Y* Z$ B

初级域渗透系列
     上述方法不一定准确,当计算机在域内但是当前cmdshell不是域用户权限时就看不到时间了,结果会显示没有权限: - 低调求发展* y+ Z/ D1 m+ y+ y5 R3 K! T

初级域渗透系列
 内网中,一般System error 5就表示权限不够。0 U* Z/ a1 b2 q# ' * p. v5 l6 N
     最准确的方法是net config workstation或者systeminfo命令

初级域渗透系列
很明显,域名是TEST,DNS名称是test.ad,
     下面那个Logon domain,登录域,表明当前用户是域用户登录还是本地用户登录。这里显示WIN10是机器名,表明当前是本地账号登录,如果是域账号登录域这里会显示域名TEST。所以这个命令跟当前用户权限没有关系,是能直接看出结果的。00LS1 A* O! D5 ^/ n3 }, j! {
     systeminfo命令的结果

初级域渗透系列
Logon Server,登录服务器,这表明验证这次用户登录的域控制器是PDC,如果域内存在多台域控,这个值在不同的计算机上是有可能不一样的。
     注意前面域名有两种表示,一个是test.ad,一个是TEST,前面一个是完整的dns名,后面的是NetBIOS名称,在后文中所有指定domain的地方除非特殊说明使用任意一个都可以。- 低调求发展/ X2 l) Y9 f8 n$ x4 ~
     如果存在域,接下来就是要获取域中的各类信息。一般渗透一个域之前,存在两种情况,一种是已经拿下一台域成员计算机,另一种是取得了一个域用户账 户,可以通过vpn或者其他方式连接内网访问到域控制器,但是没有域成员计算机的权限。下面分两种情况分别说明如何获取信息。T00LS" H9 [5 S4 ]  Z6 j& W% h2
域成员计算机专注
     内置命令获得基本的信息 - 专注网络安全% _9 `( }  @* `4 : t! Q7 b" l
     初级域渗透系列
    初级域渗透系列

初级域渗透系列
但是当AD中机器和用户很多时,这样导出是相当费时间和空间的。导出的文件怎么拖回本地也是一个问题,所以一般加上过滤器只查询比较重要的数据。T00LS- j; O" z/ U! F9 J% W- j( E# U# k
     csvde和ldifde的-l参数是指定ldap查询的过滤器,ldap的查询语法可以参考这里http://blog.csdn.net/leader_ww/article/details/4028672,在阅读下文之前请先先阅读这篇文章。
     ldap协议存储的数据都是attribute和value对应的方式,在实际渗透中只关心比较重要的attribute即可。AD中每个对象的attribute在域控制器上用adsi编辑器查看。

初级域渗透系列
计算机对象比较重要的属性有cn,dNSHostName,lastLogon,operatingSystem,operatingSystemVersion,sAMAccountName,servicePrincipalName,descriptionwww.t00ls.net  a5 ~- E$ O4 |, X1 B9 `7 L# Q# a
     用户对象比较重要的属性有sAMAccountName,displayName,lastLogon,pwdLastSet,mail,accountExpires,memberOf,description,homeDirectory,scriptPath
     除了上述属性外,在AD数据库中要分辨一个对象是计算机对象还是用户对象或者其他用户组等对象,需要用到 objectClass,objectCategory来判断。用户对象的objectClass为 top,person,organizationalPerson,user;计算机对象的objectClass为 top,person,organizationalPerson,user,computer,比用户对象多一个computer。
     除这个方法外比较简单高效的办法是用sAMAccountType的值来判断,关于sAMAccountType的介绍可以参考https://msdn.microsoft.com/en-us/library/ms677182(v=vs.85).aspxwww.t00ls.net# a3 u! ^7 g* A7 _3 T" q
     其中说道,当sAMAccountType值为0x30000000时表示该对象是SAM_USER_OBJECT,即用户对象,值为0x30000001表示该对象是SAM_MACHINE_ACCOUNT,即机器用户。0x30000000的十进制是805306368,0x30000001的十进制是805306369
     综合上面所有的信息,用csvde/ldifde查询所有用户的命令为:www.t00ls.net8 |; G6 g8 {  T# F/ u
    csvde.exe/ldifde.exe -u -r "(sAMAccountType=805306368)" -l sAMAccountName,displayname,lastlogon,pwdLastSet,description,mail,homedirectory,scriptpath -f output.csv

初级域渗透系列

初级域渗透系列

初级域渗透系列
上述用法能获取到的信息依然不是很多 - 专注网络安全2 N8 p6 T0 z$ G, P8 A
     除了上述用法之外,dsquery也支持ldap语法查询,查询命令为dsquery *T00ls.Net - 低调求发展 - 技术无止境 - Focus On Network Security; Y0 i" q8 n% c
     dsquery * forestroot -filter "(sAMAccountType=805306368)" -attr sAMAccountName displaynamedescription

初级域渗透系列
上述命令中forestroot是指从该节点开始搜索。可以指定林根目录 (forestroot)、域根目录 (domainroot) 或节点的可分辨名称 (ObjectDN)。那么forestroot和domainroot有什么差别呢?当以forestroot为搜索节点时,可以搜索到该林中所有域的 情况,比如dsquery computer forestroot命令会返回林中所有域的计算机,而dsquery computer domainroot命令则只返回运行当前命令的域环境中的计算机,如果查询当前域,domainroot可以省略掉,如果需要查询林中另外的域可以用 dsquery computer –domain test2.ad命令来查询test2.ad中的信息。
     另外注意attr参数后面的属性名是用空格分开,之前的csvde和ldifde都是用逗号分隔的。 - 专注网络安全$ y, A1 x) |. |4 ~- y0 i( w
     更多关于dsquery和dsget的基本用法可以参考MSDN - 低调求发展3 _- e. v! s1 k2 [+ z- R
    https://technet.microsoft.com/zh-cn/library/cc755655.aspx - 专注网络安全1 F+ K$ K5 p- ~0 z
    https://msdn.microsoft.com/zh-cn/cc755876(zh-cn,WS.10).aspx
     adfind是第三方工具,下载地址www.joeware.net
     在所有查询工具中,adfind是最强大的,功能也最多,单介绍adfind的用法就可以写一整篇文章,这里只做简单的用法介绍。5 I( Y# X- G3 u& Y


     套用之前的例子,查询用户的基本信息命令:
    AdFind.exe -default -f "(sAMAccountType=805306368)" sAMAccountName displayname lastlogon pwdLastSet mail homedirectory scriptpath -int8time lastlogon;pwdlastset

初级域渗透系列
-f是指定ldap过滤器,后面的各种属性名用空格分隔。 - 低调求发展# j! G: D- S: t% i& C$ G* D7 w
     这里有点需要注意的是后面的-int8time选项,这个选项是用来将AD数据库中存储的时间格式转化为人可识别的格式。如果用ldifde查询 lastlogon和pwdlastset属性,那么查询到的值会是这样的lastLogon: 130734001728864141。这样一串数字根本无法识别,adfind提供了-int8time选项,可以将该串数值串转化为可读时间串。关于 这串时间,也可以用windows自带的命令手动转为可读时间串,w32tm /ntte 130734001728864141。顺带提一下,这篇帖子中https://www.t00ls.net/thread-25456-1-1.html 后面关于时间的转化就可以用w32te这个命令,谢谢@Missll 的指点。. D3 Q/ m& }5 V0 X0 o! ^" O3 f1 h

初级域渗透系列
关于域用户与本地用户的问题T00ls.Net - 低调求发展 - 技术无止境 - Focus On Network Security! M# M& u* C; r
     当控制一台域成员计算机,运行cmd时存在三种用户权限情况:域用户,本地用户,SYSTEM用户。用whoami可以区分三种情况,域用户输出结 果是domainusername,本地用户是hostnameusername,SYSTEM输出是ntauthoritysystem。在这三 种情况中,本地用户是无法运行之前说的所有命令的,因为本质上所有查询都是通过ldap协议去域控制器上查询,这个查询需要经过权限认证,只有域用户才有 这个权限。当域用户运行查询命令时,会自动使用kerberos协议认证,无需额外输入账号密码。SYSTEM用户的情况比较特殊,在域中,除了普通用户 外,所有机器都有一个机器用户,用户名是机器名后加$,本质上机器上的SYSTEM用户对应的就是域里面的机器用户,所以SYSTEM权限是可以运行之前 说的查询命令的。
www.t00ls.net6 v6 i2 A( J7 L  p
非域成员计算机,可访问域控制器
     这种情况多见于拨vpn进入内网,或者少数情况下的DMZ跨入内网,这里的前提是有一个普通的域账号密码。
     net系列命令在这种情况下无法使用。其他工具都提供了用账号密码连接指定服务器的方法,所以只要有一组可用的普通权限的域账户以及可以访问到域控制器就可以查询。www.t00ls.net' _1 `. 5 V( }5 V6 , D7 d
     adexplorer打开就有填写账号密码的提示框,这里不做介绍。- 低调求发展" p: c* d! a4 S1 @- _
     csvde/ldifde提供了-s servername -b UserName Domain Password参数,servername是DC的ip地址或者dns名称,如果是dns名称,本地必须能解析这个dns地址,完整的命令: - 专注网络安全; t, T, x& p- W7 c& u) f' Y. {
     csvde/ldifde -s 192.168.1.111 -b john test.ad Passw0rd! -f output.txt
     也可以加上-r和-l参数来进行ldap查询。
     dsquery提供-s Server -u Username -p Password参数,可进行远程查询。其中Username可以有三种形式:
          用户名(比如Linda) - 专注网络安全/ a' w: p9 e5 e: U5 u5 [
          域用户名(比如MicrosoftLinda)
          用户主体名(UPN)(例如[email protected]T00ls.Net - 低调求发展 - 技术无止境 - Focus On Network Security$ d* Q1 X- T& M0 V( p
    dsquery * forestroot -s 192.168.1.111 -u john -p Passw0rd! -filter "(sAMAccountType=805306368)" -attr sAMAccountName displayname descriptionT00ls.Net - 低调求发展 - 技术无止境 - Focus On Network Security0 F: W3 J' _1 g

初级域渗透系列
 adfind提供-h server:port用于指定远程服务器地址和端口,如果端口是默认的389可以省掉。-u user指定用户,-up pwd指定密码。其中用户可以有三种格式:
          域用户名(比如MicrosoftLinda)
          用户主体名(UPN)(例如[email protected]www.t00ls.net" g8 6 W$ D+ i8 m( {
          可分辨名称(DN)(例如cn=user,ou=someou,dc=domain,dc=com)
     adfind -h 192.168.1.111 -u test.adjohn -up Passw0rd! -default -f "(sAMAccountType=805306368)" sAMAccountName displayname lastlogon pwdLastSet mail homedirectory scriptpath -int8time lastlogon;pwdlastset3 f5 O$ Z  D0 f2 c5 I0 h

初级域渗透系列
使用ldap的查询语法基本上基本上能查询任何需要的信息。除了上面讲的通过域LDAP协议查询获取信息外,还有一些其他信息也是比较有帮助的:www.t00ls.net; w* m' E* p$ f0 B: j3 I
     1、\domainNetlogon目录。这个目录里存放的是域用户登录脚本,很多用户目录映射、打印机设置等操作的脚本都放在这里,这个目录是普通域用户权限就可读的。大部分时间能获得各个部门的共享文件夹,文件服务器目录,运气好时甚至能得到一些账号密码。 - 专注网络安全5 T# M& U4 q! D/ Y3 X, z
     2、winfo 询远程机器信息+ }* ^9 n" L5 p6 j- `- H
     winfo原来是一个空会话利用工具,在域中以普通域用户权限使用有奇效。有普通域用户权限就可以使用winfo来查看其它机器的信息。
     winfo 192.168.1.4T00ls.Net - 低调求发展 - 技术无止境 - Focus On Network Security6 B2 m$ o6 O1 g; A' m' u6 l
     比较重要的信息有本地账户信息:' L. l* r  @! ?

初级域渗透系列
可以看到本地用户有localadmin,这对猜密码有很大的帮助
     另外还有密码策略、共享文件夹信息等

没介绍很多外面介绍域渗透必写的命令,比如ipconfig /all看域名,net view /domain看域名,net view看机器列表等等,原因是由于这些命令的结果并不严谨,命令的输出与我们的期望并不是一个必要充分的关系。
ipconfig /all输出的时候存在域名不代表就存在域。net view /domain看到的域名有时候是看不到林中其他域的,最后net view看机器列表这个能看到的机器少之又少,以前外面有个列域机器的bat就是利用这个命令的结果,其结果往往与真实的结果相差甚远。
     还漏掉一条命令是net localgroup administrators /domain,这个确实是由于个人知识面原因没有覆盖,以前没注意这个用户组,这里稍作补充( thanks @wutongyu )。一台服务器在升为域控制器时,其本地账户会自动转为域内置组administrators组账户,域中存在一些组,scope是domain local group,表示域本地组,administrators就是一个域本地组,所以要用net localgroup administrators /domain访问,这个组里面的用户对于该域中所有域控制器且仅仅是所有域控制器有 完全控制权限,默认domain admins和enterprise admins都是这个组内的账户,administrator默认是该组账户。如前所说,这个组的用户只能控制域控制器,对域内其他成员机器没有权限,但 是只要控制了域控制器,其他机器不就易如反掌了么...T00LS2 ?* G0 d- R/ ^" V+ r  F3 {+ }

0x03. 常见攻击方法- 低调求发展6 y; Q2 h" R& |+ R5 @: h- `7 X! L
用户登录迭代
      当拿下一台域成员机器,一般可以得到两种账号,一种是本地账号,一种是域账号,域账号一般是当前机器的使用者在使用的,通过mimikatz等工具可以直接抓到明文密码。
      而在域中成员机的本地账户使用次数一般不多,只能提取hash破解。虽然本地账户使用次数不多,但是在域中本地账户是绝对需要注意的一点,很多公司内部存在着本地账户密码相同的漏洞。T00ls.Net - 低调求发展 - 技术无止境 - Focus On Network Security/ p+ A7 G/ y: v  S! `8 i
      在新员工入职时,IT部门配发的计算机都是经过同一个流程处理的,有点类似于ghost方式,所有新装的计算机都有着相同的本地账号和密码,所以只要拿到一个本地账号,就可以通杀整个部门,甚至整个公司。
      拿到本地账号的密码后,对域内所有机器进行ipc连接,连接成功后抓取明文密码,提取sam、system、security注册表文件; - 低调求发展' |9 B3 x. K  
      如果存在通用的本地账号,一般可以抓到一些域账号明文密码,使用新抓到的域账号重复这个过程,直到抓到域管理员为止。
      一般如果本地用户能登录某台服务器,抓到一些域账号密码,那么这个方法的成功率就比较高。T00ls.Net - 低调求发展 - 技术无止境 - Focus On Network Security0 V& ~  p$ l  T( z" [4 _& o
     主要是利用管理员功能及权限分配不合理、权限粒度太大,出现交叉登录的情况,如果域管理员与被抓到的用户同时登录某台服务器,那么域管理员就会被抓到。T00ls.Net - 低调求发展 - 技术无止境 - Focus On Network Security. z- U: L% A' x7 {9 ^3 N2 S1 r( H# v
     来一个具体的例子:www.t00ls.net* s3 v5 z+ ^% b8 ?
     假设已控域内个人机一台,系统Windows10 - 低调求发展7 z3 q; V/ T! z1 u1 ]$ Z
     先看到本地管理用户

初级域渗透系列

TESTDomain Admins是域TEST的域管理员账号组,这个默认是所有域成员计算机的本地管理员,然后TESTjohn这个是这个计算机的主人的账户。注意到有个localadmin账户,很有可能就是本地通用账户。
     抓本地hash,抓本地hash的方法有很多,一类是直接用工具在线抓:pwdump7,gsecdump,gethashes等,还有一类就是导 出注册表,回来本地导出。前一种需要做免杀,后一种需要下载文件,各有利弊。对于不会做免杀的我来讲,更喜欢用后者。
     注册表导出

初级域渗透系列

reg save hklmsam sam.hive & reg save hklmsystem system.hive & reg save hklmsecurity security.hive
     cain能从hive文件中提取mscash,但是不支持复制出来,只能一个一个字符敲出来,十分蛋疼;getsyskey+gethashes也 可以导出,但是只能导出本地账户hash;creddump是一个python写的工具,不仅能导出本地hash,还支持导出mscash(域缓存 hash,这个后面会讲到),一般我习惯使用这个,下载地址https://code.google.com/p/creddump/,默认版本的creddump不支持mscash2,有人根据原版本进行修改,并命名为creddump7,可以支持所有系统版本的注册表提取mscash。下载地址:https://github.com/Neohapsis/creddump7
     注册表文件下载回本地后用creddump7导出www.t00ls.net7 G5 y% K" y" ~7 j! l

初级域渗透系列

所有LMhash都是aad3b435b51404eeaad3b435b51404ee,这表示这是空的,因为从Vista以后本地就不再存LM hash。Administrator,DefaultAccount和Guest的nt hash都是31d6cfe0d16ae931b73c59d7e0c089c0,这个hash值于NT hash的意义跟aad3b435b51404eeaad3b435b51404ee于LM hash的意义是一样的,都是空。
     localadmin的nt hash是6c3d8f78c69ff2ebc377e19e96a10207,可以去cmd5或者hashkiller(以前的Md5decryptor)上面查: http://www.hashkiller.co.uk/ntlm-decrypter.aspx

初级域渗透系列

如果查不到,也可以自己用hashcat破解,ntlm破解速度还不错,至于hashcat的用法见“(更新字典) 一点密码破解的心得”https://www.t00ls.net/thread-21659-1-1.html+ B/ ?8 H0 G' S# _- ^
     接下来用这个账号登陆所有服务器进行尝试。
     要进行整个流程,手工处理太麻烦,可以写个批处理来批量运行。 - 专注网络安全9 [  q. b# b' y( W3 r/ I$ k
     LoginTester.bat,这是我写的批量登录服务器批处理,提供本地或域的账号密码,然后会尝试登录给定列表或ip地址段里面的机器,如果登录成功,就自动抓取明文密码,导出注册表信息回本地 。T00ls.Net - 低调求发展 - 技术无止境 - Focus On Network Security% R& x) z% r* v: j

初级域渗透系列

初级域渗透系列
     这个批处理的必要依赖项是32.exe 64.exe,这两个是抓取明文密码的工具;wmiexec.vbs是我之前写过的一个工具,利用wmi远程执行命令,原帖:利用WMI代替psexec——WMIEXEC.vbs  https://www.t00ls.net/thread-21167-1-1.html。www.t00ls.net) O. P  ?% I( E8 L( 1       - 专注网络安全$ J. b1 H0 m3 a) h8 a. T
     获得域内所有计算机列表
     有几种方法,最简单的net group “domain computers” /domain,或者用dsquery等其他查询工具 - 低调求发展% ~+ @4 z) R- X- n$ F9 i
     dsquery * -filter "&(sAMAccountType=805306369)" -attr cnT00ls.Net - 低调求发展 - 技术无止境 - Focus On Network Security( u2 s: }+ P! y# I3 B2 |# I

初级域渗透系列

这样获取的是所有计算机,如果只需要服务器的话在filter中加入(OperatingSystem=*server*)
     具体命令是
     dsquery * -filter "&(sAMAccountType=805306369)(OperatingSystem=*server*)" -attr cn
     如果是用net group “domain computers” /domain,那么所有机器账户后面都有一个$,在建立ipc连接时需要删掉。
     机器列表放到server.txt中,用户信息放到user.txt中,然后使用LoginTester.bat进行测试。

初级域渗透系列

     当存在可以ipc连接的机器时,会自动dump明文密码,提取注册表

初级域渗透系列

     结果会存在AllinOne.bat目录,以机器名-pass.txt存储明文密码,机器名后加sam,system,security.hive存储注册表。

初级域渗透系列
www.t00ls.net- R, x6 M0 H! n- c8 U! j

可以利用新抓到的用户重复这个过程,直到抓到域管理员或者没有新用户被抓到为止。 - 专注网络安全. I9 R8 j# b5 @6 |- S1 N
% X! t, J) h  G8 b2 {
域登录缓存mscash
     
     计算机加入域后,Windows系统默认会在注册表内缓存最近10个在机器上登录的域账号与密码信息。这是为了方便当计算机联系不到域控制器时,还 能使用曾经登陆过的域账号继续登录。最常见的一种情况是公司配的笔记本,带回家后在没有挂vpn连接公司网络的情况下还可以使用域账号登录系统,这时候就 是使用了缓存的域登录信息。www.t00ls.net; Y9 ~+ D  y: ?# R( U
     缓存的密码信息有两种加密版本,Vista之前的加密方式相对简单,以用户名作为salt,称为mscash;之后的加密方式不仅将用户名作为salt,加密算法也更复杂,称为mscash2。T00ls.Net - 低调求发展 - 技术无止境 - Focus On Network Security3 s9 }: E' g* q
     在公司给新员工配发计算机时,都会经过IT部门配置,将计算机加入域,然后进行相关配置。很多公司的IT人员会直接使用域管理员账号或其 他高权限管理用户登陆新机器进行操作,这时候就会在系统的注册表里缓存下账号与密码信息,如果这些  高权限账户常年不更改密码,那么就可以破解这些账户 从而拿到域管理员权限。
     当拿到域内成员机权限后,可以提取sam、system、security,然后用creddump7提取mscash,如果域成员机上没有抓到mscash,那么可以使用之前说的用户迭代方法,看是否其他机器上存在mscash。# c( P/ R/ x' f
具体例子:
     导出注册表后用creddump7提取mscash

初级域渗透系列

后面的第三个参数true表示这是mscash2版本,如果是2003上面提取的注册表这里写false - 低调求发展& U3 ]5 i0 T! S$ t" H- z
     这里有两个域管理员账户,administrator和adminjkT00LS3 Z$ j4 N) k3 U" c7 [) [- v
     破解之前先去查查看用户状态,要是用户最近已经改密码或者已经被禁用了那就没必要跑了。 - 专注网络安全; _0 g& @0 u- p. s& e) G1 H9 [
     如果是域成员计算机且当前用户是域用户,可以直接使用net user username /domain查看; - 低调求发展6 N4 t" V' j8 O* S: ~$ V
     如果当前cmdshell不是域用户权限可以使用ldifde、adfind等工具查询,下面是ldifde的查询语法7 q) e, ]! l7 s4 S
     ldifde.exe -u -r "(sAMAccountName=adminjk)" -l pwdLastSet -s pdc.test.ad -b john test.ad Passw0rd. -f out.txt
     查询完后用w32tm命令转化时间格式T00LS' T9 G( R) v/ z( M& q0 L/ w

初级域渗透系列

下面这个是adfind的查询语句
     AdFind.exe -u pdc.test.ad -u test.adjohn -up Passw0rd. -default -f "(sAMAccountName=adminjk)" pwdLastSet userAccountControl -int8time pwdLastSet

初级域渗透系列
userAccountControl是什么gui?可以参照这里https://support.microsoft.com/zh-cn/kb/305144, http://blog.sina.com.cn/s/blog_a1c8858c0101f73i.html
     简单来说这个值就是上面链接里表中各个值累加的和,当用户处于什么状态时就累加什么值。T00ls.Net - 低调求发展 - 技术无止境 - Focus On Network Security. p. Y$ P6 K) X. V6 X5 m
     所以66048=65536+512,即DONT_EXPIRE_PASSWORD+ NORMAL_ACCOUNT表示密码永不过期+账号正常。也就说这个账号现在是正常使用的,而且从上图可知,上次更改密码还是2015.04.02的时 候,很可能抓到的这个hash就是现在的密码。 - 低调求发展/ ^' o) W: G- U7 H) N
     那就用hashcat来跑一下,hashcat中mscash2的类型是2100。www.t00ls.net" x, n6 A' u9 j4 s4 j3 A7 U0 o& z
     hash格式是:$DCC2$10240#adminjk#259108604cb524e8c044d5cda274bae1 - 低调求发展; K! Q& D0 J% X+ s0 U6 k
     前面的$DCC2$10240不用更改,中间是用户名,后面是hash。
     这个算法跑起来速度不算快,所以结果依赖于收集的字典以及脸~

初级域渗透系列

     接之前用户登录迭代的例子,假如当时没有抓到域管理员账号,那么可以看抓到的注册表中是否存在mscash。

初级域渗透系列
8 Q; j; Q5 D' K' ~9 }; z! n+ h4 }' I
Tips: - 低调求发展: }& i' F  A( Q, w
           Creddump7在提取2003上面的mscash时可能会爆错ERR: Couldn't find subkey PolEKList of Policy,换回原版用就可以。 - 低调求发展3 f$ K3 K  }$ h7 S7 H' Awww.t00ls.net9 Q; w& W8 g/ S4 r* c2 z; p* n- u
     hashcat中破解mscash时的格式是:f52365bd11722ddfb4428222c8785582:adminjk T00ls.Net - 低调求发展 - 技术无止境 - Focus On Network Security1 o: Q2 c, o4 w, v0 u5 h* ?% w2 Y- l
     前面是hash,后面是用户名,作为salt* M' G* G- Y8 p2 K4 f( U
     hashcat破解mscash速度很快

初级域渗透系列
     文中工具下载地址:https://github.com/Twi1ight/AD-Pentest-Script

组策略漏洞(GPP)
      域管理员使用GPP来配置和操作域,常见的操作有远程创建本地用户、映射打印机、映射磁盘等待,这些操作有时候需要提供账号密码。当组策略进行分发时, 会在SYSVOL目录下生成一个xml文件,理所当然的前面提供的账号密码就保存在这个xml文件中了,而密码是经过AES加密的,也就是说是完全可逆的 加密算法,而微软同时也很照顾的公布了加密密钥,所以任何域普通用户就可以读取这些xml文件并使用公开的AES密钥破解密码。www.t00ls.net8 U1 }2 ?: L  F7 z, k
     受影响的xml文件有Groups.xml, ServicesServices.xml,ScheduledTasksScheduledTasks.xml ,PrintersPrinters.xml,DrivesDrives.xml,DataSourcesDataSources.xml。www.t00ls.net! N2 v. @% ]4 ]( X6 }, p
     可以先dir整个SYSVOL目录,然后查找上面的文件,如果文件存在且里面包含类似cpassword=“j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw”的字符串,那就表明该漏洞存在。T00LS  Z2 y7 f  @1 i
     具体例子:
     域成员机本地权限,普通域账号密码T00LS* : k$ ~4 O; E( u4 q( M' e
     对域控制器建立ipc连接,然后net view \域控制器 可以看到SYSVOL目录初级域渗透系列
     dir测试是否有访问权限(某些管理员有做限制),然后使用dir /s /a列出所有sysvol文件夹所有内容。

初级域渗透系列
     搜索Groups.xml等文件www.t00ls.net/ B5 E; F1 E8 A) c+ U& A, o/ Q0 R

初级域渗透系列
     找到一个Groups.xml,用type命令查看内容

初级域渗透系列
可以看到用户名为localadmin,加密过的密码为Xpk4DyKDjYQQ/EUHClHlP9fWCDewkY7i0KNmhuIxkCY
     解密脚本有很多种,后面的链接里有python、ruby和powershell版本的,我挑了个powershell版的做了修改,使用方法如下:

初级域渗透系列
powershell –ep bypass 启动powershell并指定可以执行脚本,然后导入模块GPP.ps1,最后调用函数Get-DecryptedCpassword解密。2 C- j: j4 n5 u1 F3 k% B
     这些xml文件中有时候能找到本地管理员账号密码,有时候甚至能找到域管理员。而且值得一提的是,这个漏洞的修复除了打补丁之外,还需要管理员手动去删除掉这些密码,而大部分管理员除了开启自动更新打补丁根本不看微软的公告,所以这个漏洞即使打过补丁,也可能仍然存在,危害相当大。
ms14-068 Kerberos漏洞和kerberos技巧在

http://www.heresec.com/index.php/archives/164/

由于微信公众平台限制字数,文章剩下的部分请查看以上链接。

本文始发于微信公众号(关注安全技术):初级域渗透系列

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月22日10:17:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   初级域渗透系列http://cn-sec.com/archives/502622.html

发表评论

匿名网友 填写信息