0x00 前言
本文主要讲述在一次漏洞挖掘过程中从xss到文件读取的过程,以及其造成的成因。
0x01 漏洞详细
1. XSS
首先注册账号后进去,任意选一个模板在线编辑,在编辑简历时插入payload测试
发现被转义了,我们手动修改回去
刷新简历可以看到成功弹窗,证明存在存储型xss
然后使用<h1>标签测试,可以发现h1标签也会被解析
然后我们发现,网站有一个功能可以把简历转成pdf并下载,而在线编辑的是html格式,而且这一转换过程是在后端完成,并且导出的pdf中标签依然是被解析的,如下图所示,导出的pdf中上方的字体也明显变大,说明h1标签被解析
通过过滤网络请求我们发现这样一个数据包,它将html及里面包含的js代码会发送给后端,后端可能通过渲染html代码从而生成pdf供用户下载
那后端是如何将html渲染成pdf,执行html中的js呢?
一般可以通过获取后端解析的组件及版本来获取更多信息,从下载的pdf中,可以文件的头部信息可以获取创建者或者pdf文件信息
wkhtmltopdf官方文档:
-
https://wkhtmltopdf.org/index.html
在他的使用文档中发现其使用 Qt WebKit 浏览器引擎将html渲染成pdf,既然是通过浏览器渲染的,那html中的所有标签也会被浏览器所执行。
所以我们使用 iframe 标签尝试读取内网资源
<
iframe
src
=
"http://127.0.0.1"
width
=
"500"
height
=
"100"
>
3. 任意文件读取
javascript 将在服务器端执行,让我们尝试通过注入以下 javascript 从文件系统中获取文件,然后构造payload进行文件的读取:
<
script
>
x=
new
XMLHttpRequest;
x.onload=
function
(
)
{
document
.write(
this
.responseText)
};
x.open(
'GET'
,
'file:///etc/passwd'
);
x.send();
</
script
>
0x03 漏洞成因及修复
其实我们在使用浏览器访问网页并加载js时,浏览器有一套安全机制,使用XMLHttpRequest对象读取本地文件在Web浏览器中是受限的,因为出于安全考虑,浏览器限制了通过XMLHttpRequest对象直接访问本地文件系统。
--
disable
-local-file-access 不允许一个本地文件加载其他的本地文件,使用命令行参数 --allow 指定的目录除外。
--
enable
-local-file-access 与--
disable
-local-file-access相反(这是默认设置)
--allow 允许加载指定文件夹中的一个或多个文件
文章来源:奇安信攻防社区(Duck)
原文地址:https:
//forum.butian.net/share/2409
原文始发于微信公众号(潇湘信安):记一次从xss到任意文件读取
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论