type
status
date
slug
summary
tags
category
icon
password
Solar - Vulnyx
挑战一下solar

图片.png
设置ip变量,扫描开放端口
实验室配置问题nmap扫描显示 filtered实际为open,扫描发现配置域名
www.solar.nyx
和 www.sunfriends.nyx
将他们配置到hosts中,这里为了方便windows也配置了
图片.png
浏览器显示有风险,进去80端口发现重定向到
www.solar.nyx
,并且在443端口有本地签名访问第一个域名发现一个登录框,尝试弱密码和万能密码登录,无效

图片.png
另一个域名为维护界面

图片.png
对第一域名进行目录扫描
尝试扫描出的目录,发现没有额外东西,只有域名二中的server.php中有个登录服务,尝试弱密码和万能密码发现无效

图片.png
看教程说是藏了个隐藏sql文件后缀为gz,不常见所以扫描时候没加
获取文件,放到了solar文件夹中,由于网站是自验证所以需要添加-k参数忽视验证
解压发现是一个数据库的备份,浏览发现包含用户的账户密码,其中JulianAdm为管理员,开始破解hash函数

图片.png
看位数猜测为sha256格式加密,发现只有calvin的密码可以破解,密码为emily

图片.png

图片.png

图片.png

图片.png
尝试登录

图片.png
毫无头绪,查看页面源码让ai解读发现存在MQTT数据通信
账户为:user
密码为:1tEa15klQpTx9Oub6ENG

图片.png

图片.png
并且存在数据同步,从data中

图片.png

图片.png
开始下载MQTTX ,这里可以使用其他MQTT连接设备,MQTTX有gui界面并且可以在windows中使用,很方便 :)

图片.png
用上面得到的凭证连接,订阅#发现一直有数据在发

图片.png

图片.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
属性,目的是让/.../
作为字符串而非正则表达式来解析(避免直接写字符串时的语法问题)。

图片.png

图片.png
查看维护信息界面,管理员说会查看仪表盘所以可以借此获取当前页面源码
首先用python在kali中开一个端口8000用来接收
pyload,进行捕获
获得两段信息,一段为自己主机的,一段为base64加密后的页面源码进行base64解码后得到页面源码
我们攻击的代码在第三个div :)

图片.png
对比正常的仪表盘界面我们发现最后登录为admin用户,且此连接MQTT的是admin用户

图片.png

图片.png
代码里有写捕获单击事件发布到record
构造单击事件payload复现情形,可在record发现返回,成功获取admin人员数据

图片.png
没有思路,发现作者是用伪造chart,按他的思路,我们也将另一个 XSS 插入到 JSON 的
chart
参数中,假设它将嵌入到 HTML <img>
标签的 src
属性中尝试,伪造chart,发现发送到record里他也会显示说明成功
图片.png
尝试进入
records
页面发现需要登录并且之前获得的那个用户并没有权限登录,回去尝试获取records
页面源码,同之前一样尝试开启http服务,构建js获取源码,发现成果,base64解码
这段 HTML 代码展示了一个 太阳能数据列表,其中列出了多个数据记录,并为每个记录提供了一个 “Download PDF” 按钮,用于下载相应的数据文件。看ai跑出来说是可能包含文件包含漏洞

图片.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文件。
图片.png

图片.png

图片.png
查看相关文档发现文件包含漏洞,尝试构建xss来伪造json数据,可以修改p为其他参数,获取其他路径文件,将这段代码写入到chart中

图片.png
利用xss漏洞检索一下看看有没有上传成功
发现有上传继续构建xss把pdf下载下来

图片.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,尝试登录,连接成功

图片.png

图片.png

图片.png
先将之前的data,record加上,再直接订阅全部内容#可以接收数据,发现页面执行操作时会发送到
server/command/output
主题,这里卡进度了,看作者教程说尝试各种主题,它这也是试出来的,试到new时发送消息error主题会有反馈,观察发现几个状态很熟悉又回到刚开始时扫目录扫到的commands点进去查看格式,发现格式都为name+cmd
图片.png

图片.png
开始编辑命令先试whoami发现没回显,查看源码发现是用
escapeshellcmd
函数来转义字符串中的特殊符号了
图片.png

图片.png
尝试构建一个新的命令,开始反弹shell,这里用模版建了个shell脚本

图片.png
返回server界面发现之前上传的json都在这,监听执行curl一下

图片.png

图片.png

图片.png
离成功不远了感觉,查看一下TTY 设置

图片.png

图片.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也发了

图片.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.sh
是 Linux Privilege Escalation Awesome Script(PEAS 系列的一部分),用于本地权限提升(Privilege Escalation)信息收集。它是渗透测试和 CTF 竞赛中常用的工具,可以帮助发现系统中的安全漏洞,例如:- 错误的 SUID/GUID 文件
- 错误的权限(可写的
passwd
、shadow
等)
- 敏感的环境变量
- 存在漏洞的内核版本
- 可利用的计划任务(cron jobs)
- 暴露的 SSH 密钥、配置文件
去目标机上传一下

图片.png
目标明确开始提权
看作者提示,文件列表中有nanorc发送一下nanorc,有一个设置history

图片.png

图片.png
刚开始还不知道在哪,查了一下在.local/share/nano ,记录在serach_history下,得到
密码:CzMO48xpwof8nvQ6JUhF

图片.png
开始ssh登录,先将之前获得的密钥放入id中,成功登录
// …existing code…
成功拿到
root
密码
图片.png
获取Root权限
成功登录
root
用户,拿到root.txt

图片.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中。
图片.png
- Author:axlfpe
- URL:https://tlifecafe.xyz/article/3fdc6703-86af-499c-a692-c2970bbc6409
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!