AWVS漏洞复现小记

× 文章目录
  1. 1. 0x00 前言
  2. 2. 0x01 AngularJS 客户端模板注入
    1. 2.1. 漏洞描述
    2. 2.2. 影响
    3. 2.3. 修复
    4. 2.4. 复现
  3. 3. 0x02 DOM型跨站脚本
    1. 3.1. 漏洞描述
    2. 3.2. 影响
    3. 3.3. 修复
    4. 3.4. 复现
  4. 4. 0x03 跨站脚本
    1. 4.1. 漏洞描述
    2. 4.2. 影响
    3. 4.3. 修复
    4. 4.4. 复现
  5. 5. 0x04 结束语

0x00 前言

AWVS作为黑盒测试,主动扫描的比较好用的工具,碰到部分网站扫描结果一堆漏洞,部分漏洞复现比较难,这里找了几个常见的,以往一直忽略的漏洞,详细研究一下,到最后成功复现

其中1、2、4漏洞比较难以复现,大家一般都是当作误报处理,这里记录一下

因使用汉化版,部分漏洞描述翻译可能存在问题,请忽略

0x01 AngularJS 客户端模板注入

漏洞描述

此 Web 应用程序容易受到 AngularJS 客户端模板注入漏洞的攻击。当用户输入动态嵌入到使用 AngularJS 客户端模板的页面上时,会发生 AngularJS 客户端模板注入漏洞。通过使用大括号,可能将 AngularJS 表达式注入应用程序正在使用的 AngularJS 客户端模板中。这些表达式将由 AngularJS 在客户端进行求值,当与沙箱转义结合使用时,它们将允许攻击者执行任意 JavaScript 代码。

发现者 AngularJS 客户端模板注入

影响

攻击者可以注入 AngularJS 表达式,这些表达式将在客户端进行评估。AngularJS 表达式通常并不是很危险,但是当与沙箱转义结合使用时,它们可使攻击者能够执行任意 JavaScript 代码。

修复

攻击者不可能使用大括号插入 AngularJS 表达式。应用程序需要将用户输入中的大括号视为高度危险,或者完全避免在服务器端反射用户输入。

复现

URL: https://xx.com/forget_pass.html

Parameter: phone

URL encoded GET 输入 phone 已设置为 1zmvpmtruem5van。此输入已反映在 AngularJS 模板中。

这里访问URL可以看到,phone内容作为模板,动态生成HTML代码

访问:https://xx.com/forget_pass.html?phone=13111{{8/2}}11111

执行了运算 8/2 观看页面中手机号变成了13111411111, 这里可以确定存在模板注入,下面来进一步利用一下

一般都是注入js代码,类似XSS效果弹个窗口

这里看了下AngularJS版本为1.5.5

1.5.5版本存在沙箱,需要绕过沙箱,这里从网上找到对应版本绕过沙箱方法

1
{{a=toString().constructor.prototype;a.charAt=a.trim;$eval('a,alert(/xss/),a')}}');}}

成功复现弹窗

0x02 DOM型跨站脚本

漏洞描述

此脚本可能容易受到跨站脚本 (XSS) 攻击的攻击。

跨站脚本(也称为 XSS)是一个漏洞,允许攻击者向其他用户发送恶意代码(通常是 Javascript 的形式)。因为浏览器无法知道脚本是否可信,它将在用户上下文中执行脚本,这样,攻击者就可以访问浏览器保留的任何 cookie 或会话令牌。

传统的跨站点脚本漏洞发生在服务器端代码上,而基于文档对象模型的跨站点脚本是会影响客户端浏览器中脚本代码的漏洞类型。

发现者 DOM 型跨站脚本

影响

Malicious 用户可以将 JavaScript、VBScript、ActiveX、HTML 或 Flash 注入至易受攻击的应用程序,欺骗用户,以从这些用户处收集数据。攻击者可以窃取会话 cookie 并掌控帐户,以冒充用户,还可能修改用户能够看到的页面内容。

修复

您的脚本应筛选来自用户输入的元字符。

复现

URL: https://xx.com/

Parameter: window.location

这里访问URL, 确定输出位置
https://xx.com/?wvstest=javascript:domxssExecutionSink(1,"'\"><xsstag>()locxss")#javascript:domxssExecutionSink(1,"'\"><xsstag>()locxss")

查看 addFav(),通过window.location.href 获取当前页面的URL,然后写入到html中

1
2
3
4
5
function addFav(t) {
document.write('<a href="' + window.location.href + '" title="' + document.title.replace(/<|>|'|"|&/g, '') +
'" rel="sidebar" onclick="if(UA.indexOf(\'chrome\') != -1){alert(\'' + L['chrome_fav_tip'] +
'\');return false;}window.external.addFavorite(this.href, this.title);return false;">' + t + '</a>');
}

最后结果

1
<a href="https://xx.com/?wvstest=javascript:domxssExecutionSink(1,%22%27\%22%3E%3Cxsstag%3E()locxss%22)#javascript:domxssExecutionSink(1,%22'\%22%3E%3Cxsstag%3E()locxss%22)" title="" rel="sidebar" onclick="if(UA.indexOf('chrome') != -1){alert('请按快捷键Ctrl+D收藏本页,谢谢');return false;}window.external.addFavorite(this.href, this.title);return false;">收藏本页</a>

因a标签的href属性里面,对字符进行了url编码,没有绕过,这里先研究一下onclick里面的内容,先美化一下代码,这里可以看到判断为chrome浏览器直接退出,其他浏览器点击会添加到收藏,这里还是没有触发XSS

1
2
3
4
5
6
if (UA.indexOf('chrome') != -1) {
alert('请按快捷键Ctrl+D收藏本页,谢谢');
return false;
}
window.external.addFavorite(this.href, this.title);
return false;

这里想到之前碰到过的XSS,chrome等浏览器会自动把参数进行url编码,这里换成IE内核的,IE浏览器不会自动url编码的

想到这里,打开IE,禁用XSS筛选器

访问 https://xx.com/#"><svg/onload=alert(/xss/)> 成功发现弹窗

0x03 跨站脚本

这里吐槽一下,为啥别人扫出来的漏洞直接就能复现,我扫出来的漏洞那么波折呢

漏洞描述

跨站点脚本 (XSS) 是指客户端代码注入攻击,其中,攻击者可以将恶意脚本执行到合法的网站或 Web 应用程序中。当 Web 应用程序在其生成的输出中使用未经验证或未编码的用户输入时,就会发生 XSS。

发现者 跨站脚本

影响

恶意 JavaScript 可以访问与网页其余部分相同的所有对象,包括访问 cookie 和本地存储(通常用于存储会话令牌)。如果攻击者可以获取用户的会话 cookie,则他们可以冒充该用户。

此外,JavaScript 可以读取向用户显示的页面内容并进行任意修改。因此,XSS 与一些巧妙的社会工程技术相结合,为攻击者带来了很多可能性。

修复

对页面上呈现的用户输入应用上下文相关编码和/或验证

复现

URL: https://xx.cn/index?returnUrl=

Parameter: returnUrl

returnUrl? 这里一般都会存在URL重定向漏洞吧,使用浏览器访问该URL,构造XSS查看结果

这一看结果,返回内容在json里面,Content-Type 也是 application/json,咋个绕过

咨询大佬,回应说是应该是IE特定条件下能触发,具体也不清楚

这里使用IE浏览器访问,结果直接就弹出是否下载了json文件

通过百度,搜索关键字,发现需要修改注册表,添加json的mime类型支持

如何修改自行百度吧

然后禁用IE浏览器的XSS筛选器,成功弹窗

0x04 结束语

之前一直认为AWVS误报挺多的,这次扫描,比较严重的漏洞都成功复现了,当然漏洞影响有限,还浪费了很多查资料的时间,这里记录一下,方便以后使用,后续也会持续更新,补充一些新的漏洞。