Post on: Jul 8, 2025Last edited: Jul 8, 2025
Words 5912Read Time 15 min

type
status
date
slug
summary
tags
category
icon
password

Solar - Vulnyx

挑战一下solar
notion image
图片.png
设置ip变量,扫描开放端口
实验室配置问题nmap扫描显示 filtered实际为open,扫描发现配置域名
www.solar.nyxwww.sunfriends.nyx将他们配置到hosts中,这里为了方便windows也配置了
notion image
图片.png
浏览器显示有风险,进去80端口发现重定向到www.solar.nyx,并且在443端口有本地签名
访问第一个域名发现一个登录框,尝试弱密码和万能密码登录,无效
notion image
图片.png
另一个域名为维护界面
notion image
图片.png
对第一域名进行目录扫描
尝试扫描出的目录,发现没有额外东西,只有域名二中的server.php中有个登录服务,尝试弱密码和万能密码发现无效
notion image
图片.png
看教程说是藏了个隐藏sql文件后缀为gz,不常见所以扫描时候没加
获取文件,放到了solar文件夹中,由于网站是自验证所以需要添加-k参数忽视验证
解压发现是一个数据库的备份,浏览发现包含用户的账户密码,其中JulianAdm为管理员,开始破解hash函数
notion image
图片.png
看位数猜测为sha256格式加密,发现只有calvin的密码可以破解,密码为emily
notion image
图片.png
notion image
图片.png
notion image
图片.png
notion image
图片.png
尝试登录
notion image
图片.png
毫无头绪,查看页面源码让ai解读发现存在MQTT数据通信
账户为:user 密码为:1tEa15klQpTx9Oub6ENG
notion image
图片.png
notion image
图片.png
并且存在数据同步,从data中
notion image
图片.png
notion image
图片.png
开始下载MQTTX ,这里可以使用其他MQTT连接设备,MQTTX有gui界面并且可以在windows中使用,很方便 :)
notion image
图片.png
用上面得到的凭证连接,订阅#发现一直有数据在发
notion image
图片.png
notion image
图片.png
构造数据发送到data主题,发现有显示,观察页面为javascript构建,尝试构造JavaScript代码上传将
  • <img src=x ...>
    • 这里创建了一个 HTML <img> 标签。
    • src=x 指定了一个无效的图片路径(x 不是有效的 URL)。
    • 由于 src 不能正确加载,浏览器会触发 onerror 事件。
  • onerror=eval(atob(\/[base64encodeJavascriptCode]\/.source));
    • onerror 事件在图片加载失败时执行 JavaScript 代码。
    • eval(...):执行传入的 JavaScript 代码(高危函数,可能导致 XSS)。
    • atob(...):将 Base64 编码的字符串解码为普通文本。
    • /[base64encodeJavascriptCode]/.source
      • 这里的 [base64encodeJavascriptCode] 代表一个 Base64 编码后的 JavaScript 代码字符串。
      • .source 是正则表达式对象的 source 属性,目的是让 /.../ 作为字符串而非正则表达式来解析(避免直接写字符串时的语法问题)。
notion image
图片.png
notion image
图片.png
查看维护信息界面,管理员说会查看仪表盘所以可以借此获取当前页面源码
首先用python在kali中开一个端口8000用来接收
pyload,进行捕获
获得两段信息,一段为自己主机的,一段为base64加密后的页面源码进行base64解码后得到页面源码
我们攻击的代码在第三个div :)
notion image
图片.png
对比正常的仪表盘界面我们发现最后登录为admin用户,且此连接MQTT的是admin用户
notion image
图片.png
notion image
图片.png
代码里有写捕获单击事件发布到record
构造单击事件payload复现情形,可在record发现返回,成功获取admin人员数据
notion image
图片.png
没有思路,发现作者是用伪造chart,按他的思路,我们也将另一个 XSS 插入到 JSON 的 chart 参数中,假设它将嵌入到 HTML <img> 标签的 src 属性中尝试,伪造chart,发现发送到record里他也会显示说明成功
notion image
图片.png
尝试进入records页面发现需要登录并且之前获得的那个用户并没有权限登录,回去尝试获取records页面源码,同之前一样尝试开启http服务,构建js获取源码,发现成果,base64解码 这段 HTML 代码展示了一个 太阳能数据列表,其中列出了多个数据记录,并为每个记录提供了一个 “Download PDF” 按钮,用于下载相应的数据文件。
看ai跑出来说是可能包含文件包含漏洞
notion image
图片.png
使用相同的技术编辑,尝试获取pdf,编辑payload,
payload拆解,文件包含
  • 浏览器解析 <img> 标签时,发现 src="x" 无效,触发 onerror 事件。
  • JavaScript 代码执行,向服务器 /records/ 发送 fetch 请求,下载 2024-09-02T23:29:26.645Z.json 文件。
  • 服务器返回 JSON 文件(如果受害者已登录,并且服务器未进行身份验证)。
  • JavaScript 读取文件内容,将其转换为 Base64 编码
  • 使用 location.href 发送数据到攻击者服务器 192.168.1.116
  • 攻击者解码数据,成功窃取 JSON 文件内容

base64解码并转换为pdf格式,查看文件属性发现创作者为wkhtmltopdf 0.12.6.1
wkhtmltopdf是一个开源的命令行工具,用于将HTML文件转换成PDF文件。它是基于WebKit的HTML转PDF工具,支持各种操作系统,包括Windows、Mac和Linux。版本0.12.6.1是该工具的一个特定版本,包含了一些特定的功能和修复了一些bug。用户可以使用wkhtmltopdf来快速高效地将HTML页面转换为PDF文件。
notion image
图片.png
notion image
图片.png
notion image
图片.png
查看相关文档发现文件包含漏洞,尝试构建xss来伪造json数据,可以修改p为其他参数,获取其他路径文件,将这段代码写入到chart中
notion image
图片.png
利用xss漏洞检索一下看看有没有上传成功
发现有上传继续构建xss把pdf下载下来
notion image
图片.png
观察代码发现可能有路径遍历攻击尝试下载passwd,无效
继续查看代码,找到了之前chart成功的原因,原来他会接收来自data的chart放到div中显示
继续,看到在执行wkhtmlopdf中只能读取/var/www/路径下的文件,知道目录结构
wkhtmltopdf
调用 wkhtmltopdf 命令行工具,将 HTML 转换为 PDF
--disable-local-file-access
禁止直接访问本地文件,防止 file:// 读取服务器上的敏感文件(如 /etc/passwd
--allow /var/www/
仅允许访问 /var/www/ 目录,避免加载外部或敏感文件
$tempHtmlFile
输入的 HTML 文件(要转换为 PDF 的网页文件路径)
$outputPdfFile
生成的 PDF 输出文件路径
尝试读取gobuster之前扫到的一些目录,先去record里面发送js,再模拟单击,
这里思路乱掉了,忘记应该怎么获取文件了,应该是
1.尝试构建xss来伪造json数据
2.检索最新上传文件往data发送,查看文件名字
3.下载pdf
OK,可以看到账号和密码了,尝试登录server.php,成功登录,分析页面源码发现这个页面也连接MQTT,尝试登录,连接成功
notion image
图片.png
notion image
图片.png
notion image
图片.png
先将之前的data,record加上,再直接订阅全部内容#可以接收数据,发现页面执行操作时会发送到server/command/output主题,这里卡进度了,看作者教程说尝试各种主题,它这也是试出来的,试到new时发送消息error主题会有反馈,观察发现几个状态很熟悉又回到刚开始时扫目录扫到的commands点进去查看格式,发现格式都为name+cmd
notion image
图片.png
notion image
图片.png
开始编辑命令先试whoami发现没回显,查看源码发现是用escapeshellcmd函数来转义字符串中的特殊符号了
notion image
图片.png
notion image
图片.png
尝试构建一个新的命令,开始反弹shell,这里用模版建了个shell脚本
notion image
图片.png
返回server界面发现之前上传的json都在这,监听执行curl一下
notion image
图片.png
notion image
图片.png
notion image
图片.png
离成功不远了感觉,查看一下TTY 设置
notion image
图片.png
notion image
图片.png
发现www-data 用户 无需密码 即可以 lenam 身份执行 /usr/bin/mosquitto_pub 学一下/usr/bin/mosquitto_pub
-h : 指定MQTT代理的主机名或IP地址。默认为localhost。
  • unix : 通过Unix域套接字而不是TCP套接字连接到代理,例如:/tmp/mosquitto.sock
  • p : 指定MQTT代理的端口号。默认为1883(普通MQTT)和8883(MQTT over TLS)。
  • u : 提供用户名。
  • P : 提供密码。
  • t : 指定发布消息的主题。
  • L : 以URL形式指定用户、密码、主机名、端口和主题,例如:mqtt(s)://[username[:password]@]host[:port]/topic
  • f : 将文件内容作为消息发送。
  • l : 从标准输入读取消息,每行发送一个单独的消息。
  • n : 发送一个空(长度为零)的消息。
  • m : 要发送的消息内容。
给终端升级一下,原始终端属实不好用,运行一下将数据发到fi主题,再把同目录下的note.txt也发了
notion image
图片.png

.ssh 目录的主要文件

文件名
作用
id_rsa
私钥(默认的 RSA 私钥)
id_rsa.pub
公钥(与 id_rsa 配对)
id_ed25519
私钥(Ed25519 算法,更新版)
id_ed25519.pub
公钥(与 id_ed25519 配对)
known_hosts
已知主机列表,存储 SSH 连接过的服务器公钥,防止 MITM 攻击
config
SSH 客户端配置文件,用于定义别名、端口、身份验证方式等
authorized_keys
允许 SSH 登录的公钥,存放已授权的公钥,服务器使用
ssh_config
系统级 SSH 客户端配置(通常位于 /etc/ssh/ssh_config
sshd_config
SSH 服务器配置(位于 /etc/ssh/sshd_config,仅服务器使用)
拿到user和密钥,试着爆破,爆不出来,密钥强度很高,顺便查看一下authorized_keys
下了个工具
linpeas.shLinux Privilege Escalation Awesome ScriptPEAS 系列的一部分),用于本地权限提升(Privilege Escalation)信息收集。它是渗透测试和 CTF 竞赛中常用的工具,可以帮助发现系统中的安全漏洞,例如:
  • 错误的 SUID/GUID 文件
  • 错误的权限(可写的 passwdshadow 等)
  • 敏感的环境变量
  • 存在漏洞的内核版本
  • 可利用的计划任务(cron jobs)
  • 暴露的 SSH 密钥、配置文件
去目标机上传一下
notion image
图片.png
目标明确开始提权
看作者提示,文件列表中有nanorc发送一下nanorc,有一个设置history
notion image
图片.png
notion image
图片.png
刚开始还不知道在哪,查了一下在.local/share/nano ,记录在serach_history下,得到
密码:CzMO48xpwof8nvQ6JUhF
notion image
图片.png
开始ssh登录,先将之前获得的密钥放入id中,成功登录
// …existing code…
成功拿到root密码
notion image
图片.png

获取Root权限

成功登录root用户,拿到root.txt
notion image
图片.png

XSS进阶:利用wkhtmltopdf读取文件

后续查看登录后的页面,发现存在一个PDF下载功能,这部分功能由records/index.php实现。

代码审计

代码显示,它会读取json文件内容,然后调用generatePDF函数生成PDF。进一步审计generatePDF函数:
我们发现PDF的生成使用了wkhtmltopdf工具,并且通过--allow /var/www/参数限制了本地文件访问的范围,这意味着我们可以利用XSS读取/var/www/目录下的任意文件。

漏洞利用

我们构造恶意的JSON数据,通过XSS payload来读取服务器上的文件。首先,我们向服务器提交一个包含XSS Payload的JSON文件,然后通过访问下载链接触发PDF生成,从而执行我们的XSS代码。
这个Payload会读取/var/www/sunfriends.nyx/server.php文件,并将其内容以Base64编码的形式呈现在生成的PDF中。
notion image
图片.png

Loading...