难度 高
目标 root 权限 + 2 Flag
使用VMware进行运行
信息收集
kali 192.168.152.56 靶机 192.168.152.65
第一次遇到这么快的端口扫描
可以看到存在ftp anoymous访问 同时还有大量的tcpwrapped状态,这个状态我还没见过
另外有个数据库和两个我网站服务,我第一次见开启了这么多服务的靶机
访问80端口默认的apache启动页面
访问44441页面就一个coming soon
尝试登录了匿名ftp,目录下有个pub但是里面也没有东西
kali 访问 ftp -a 192.168.152.65
先对web的目录进行一遍扫描
44441端口没有扫描出任何的东西,不过80端口扫描出了一个admin登录页面和一个blog登录页面和一个phpinfo
访问admin后尝试了几下弱口令没结果
访问blog发现功能点相对多一些,而且写着power by wordpress 不过和我看到的wordpress不太一样 ,不过当我 尝试登录发现在尝试解析一个域名
应该要绑定一下本地的hosts文件
cereal.ctf
绑定完发现真的是wordpress
wordpress有很多漏洞,不过目前多是一些插件导致的漏洞,不知道还存不存在,反正什么wpscan等一些漏扫都上完了没有扫出漏洞。。。
有了域名访问的内容好像多了一些,于是直接切换域名再扫一遍目录
发现扫出来了一些目录而且存在目标遍历
最后一个点mysql服务也尝试进行一些爆破,wordpress我没怎么打过这个站不知从何下手。
mysql的爆破也一直显示无法连接,可能没有开启外联
它这里唯一的可能就这个blog的有个search页面是自己写的可能会存在漏洞,同时说会从什么网站备份中恢复
这个search框试过了没有SQL注入
没思路了,wordpress我没有打过也没有啥经验不知道从何下手
突破边界
看了wp竟然需要继续子域名的挖掘,44441端口也有一个子域名进行访问。。。
子域名枚举
使用gobuster进行爆破
gobuster vhost -u http://cereal.ctf:44441 -w /usr/share/seclists/Discovery/DNS/fierce-hostlist.txt --append-domain --timeout 60s --random-agent -q
视频中的gobuster有点落后了现在需要加其他参数才扫的出来。。。
可以扫出一个
secure.cereal.ctf:44441
那么也写入hosts
添加后再次访问44441端口,发现有个ping的界面,遇到这种界面一般会存在rce
然后果断bp抓包查看,发现有两个参数
第一个参数解码,一眼php序列化后的字符串
于是先修改了一下ip参数,看到底是哪个参数中的ip是实际运行的变量,然后发现修改了ip参数并不会改变执行的结果,那么说明就是这个序列化的结果中的ip在实际控制着执行的结果
不过直接通过输入框尝试了一下命令发现都没有执行,尝试无回显在本地起个http用curl发现也没有回显
但是反序列化漏洞一般都是配合代码审计进行的,得知道具体的代码反序列化才可以去触发一些函数之类的行为才有意义
所以如果能拿到源码或许可以突破进行
前面就一直在提示说备份文件备份文件的,估计现在就想办法找这个备份文件了,拿目录扫描工具框框的扫
使用这个字典可以扫到一个back_en的文件,这个目录下面很可能就有备份文件
虽然直接访问这个文件夹是403的情况,但是403可能只是对当前文件夹的拦截,有些情况下直接访问到具体的文件是可以绕过的
换个字典
有一说一这么多字典该用哪个我是真的晕。。。
代码审计
将备份文件下载后
<?php
class pingTest {
public $ipAddress = "127.0.0.1";
public $isValid = False;
public $output = "";
function validate() {
if (!$this->isValid) {
if (filter_var($this->ipAddress, FILTER_VALIDATE_IP))
{
$this->isValid = True;
}
}
$this->ping();
}
public function ping()
{
if ($this->isValid) {
$this->output = shell_exec("ping -c 3 $this->ipAddress");
}
}
}
if (isset($_POST['obj'])) {
$pingTest = unserialize(urldecode($_POST['obj']));
} else {
$pingTest = new pingTest;
}
$pingTest->validate();
可以看到代码还是很简单的,就一个类中自定义了两个函数,接收到的序列化字符串被反序列化后也会调用validate函数,如果没有接收到obj参数中的序列化字符串会默认新建一个类,并且类中默认ip就是127.0.0.1
看着应该是只要将参数isValid修改为True那么就不会进入validate函数的第一个if判断,可以直接进行ping()函数也就是直接进行命令执行
相比ctf的题目中反序列化这入门题都算不上。。。
只需要修改一些ipaddress和isValid参数绕过一下判断即可
O:8:"pingTest":3:{s:9:"ipAddress";s:12:"127.0.0.1;ls";s:7:"isValid";b:1;s:6:"output";s:0:"";}
终于是突破边界了,只能说找信息收集漏洞点真的是一件很折磨的事情
终于突破边界了直接反弹shell
输入的时候序列化字符串需要url编码一下
提权
得到shell后先升级一下
SHELL=/bin/bash script -q /dev/null
查看一下有哪些用户可以登录发现有个rocky需要关注
看一下目前有哪些进程
前面扫到的这些奇怪的端口果然是迷雾弹。。。
然后又查看了一下能否使用suid提权,没有看到常见的一些命令
然后今日rocky目录看一下有没有什么东西,拿到第一个flag
然后就没有发现什么有用的东西了
找一找3306的数据库结果发现启动的用户是mysql,只能看能不能在里面找点密码啥的了
wordpress源码中配置有数据的账号密码
newuser
VerySecureRandomPassword!
使用这个密码去登录ssh也没有登录成功
数据库登录进去发现了一个账号密码
在线解密没解密出来。。。
没啥思路了看一下wp
这里需要使用一个工具来监视进程,应该是这个程序执行的很快然后就结束了。
GitHub - DominicBreuker/pspy: Monitor linux processes without root permissions
这个工具可以在不需要root权限的情况下也可以监视进程的创建,可能会有计划任务在创建进程,但是root用户的计划任务又看不到,说不定有些任务执行完就秒没了不会有长时间的进程信息
等待了一段时间后出现了这个可疑的进程
在运行一个chown.sh
chown命令是用来修改所属用户和用户组的,这个脚本将这个html目录下的所有文件的所属用户和组修改。
比如我创建了一个文件
在等待一段时间后,计划任务自动执行脚本将这个文件的所属用户修改为了rocky
那么这里可以使用软连接的方式,在当前目录创建一个/etc/passwd文件如果将这个软连接的文件修改了所属组会将真实的passwd一并修改(我也是第一次知道软连接被修改了源文件也会被修改)
ln -sf /etc/passwd ./passwd
又是等到一段时间,这里不会修改这个软连接的显示需要直接查看/etc/passwd文件
可以看到所属组和用户都已经被修改
因为bash的问题vi无法正常的交互所以只能使用echo写入一个新的用户
echo "dreamer292::0:0:root:/root:/bin/bash" >> /etc/passwd (第二个分号后面有x就是需要密码登录,这里删除后等于创建了一个不需要密码的登录账号)
写入成功后直接su 新用户
拿下root权限和最后一个flag
后记
非常注重信息收集的一关,前期的目录扫描和子域名爆破真的非常吃力,难以找到这个突破口,后续的突破轻松一些,不过最后的提权方式我也是第一次学习到这样的手法。