4.1.5-检查网页内容是否存在信息泄露

2023-11-16

检查网页内容是否存在信息泄露

ID
WSTG-INFO-05

总结

程序员在他们的源代码中包含详细的注释和元数据是很常见的,甚至建议这样做。但是,HTML 代码中包含的注释和元数据可能会泄露潜在攻击者不应获得的内部信息。应进行注释和元数据审查,以确定是否有任何信息被泄露。此外,某些应用程序可能会泄漏重定向响应正文中的信息。

对于现代 Web 应用程序,在前端使用客户端 JavaScript 正变得越来越流行。流行的前端构造技术使用客户端JavaScript,如ReactJS,AngularJS或Vue。与HTML代码中的注释和元数据类似,许多程序员也在前端的JavaScript变量中对敏感信息进行硬编码。敏感信息可以包括(但不限于):私有 API 密钥(例如不受限制的 Google 地图 API 密钥)、内部 IP 地址、敏感路由(例如指向隐藏管理页面或功能的路由),甚至凭据。这些敏感信息可以从此类前端 JavaScript 代码中泄露。应进行审查,以确定是否有任何敏感信息泄露,可能被攻击者用于滥用。

对于大型 Web 应用程序,性能问题是程序员非常关心的问题。程序员使用不同的方法来优化前端性能,包括语法上很棒的样式表(Sass),Sassy CSS(SCSS),webpack等。使用这些技术,前端代码有时会变得难以理解和调试,因此,程序员经常部署源映射文件以进行调试。“源映射”是一个特殊文件,它将资产的缩小/丑化版本(CSS或JavaScript)连接到原始创作版本。程序员仍在争论是否将源映射文件引入生产环境。但是,不可否认的是,源映射文件或用于调试的文件如果发布到生产环境,将使其源文件更易于人类阅读。它可以使攻击者更容易从前端查找漏洞或从前端收集敏感信息。应该进行JavaScript代码审查,以确定是否有任何调试文件从前端公开。根据项目的上下文和敏感性,安全专家应决定文件是否应存在于生产环境中。

测试目标

  • 查看网页评论、元数据和重定向正文以查找任何信息泄漏。
  • 收集 JavaScript 文件并查看 JS 代码,以更好地了解应用程序并查找任何信息泄漏。
  • 确定是否存在源映射文件或其他前端调试文件。

如何测试

查看网页注释和元数据

开发人员经常使用 HTML 注释来包含有关应用程序的调试信息。有时,他们会忘记注释并将其留在生产环境中。测试人员应查找以<!--开头的 HTML 注释。

检查 HTML 源代码中是否有包含敏感信息的注释,这些信息可以帮助攻击者更深入地了解应用程序。它可能是 SQL 代码、用户名和密码、内部 IP 地址或调试信息。

...
<div class="table2">
  <div class="col1">1</div><div class="col2">Mary</div>
  <div class="col1">2</div><div class="col2">Peter</div>
  <div class="col1">3</div><div class="col2">Joe</div>

<!-- Query: SELECT id, name FROM app.users WHERE active='1' -->

</div>
...

测试人员甚至可能会发现这样的东西:

<!-- Use the DB administrator password for testing:  f@keP@a$$w0rD -->

检查 HTML 版本信息以获取有效的版本号和数据类型定义 (DTD) URL

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  • strict.dtd – default strict DTD(默认)
  • loose.dtd – loose DTD(松散)
  • frameset.dtd – DTD for frameset documents(文档的框架集)

某些META 标签不提供主动攻击媒介,而是允许攻击者分析应用程序:

<META name="Author" content="Andrew Muller">

一个常见的(但不符合 WCAG)标记是刷新。 (但不符合 WCAG compliant) META 标记是刷新 Refresh

<META http-equiv="Refresh" content="15;URL=https://www.owasp.org/index.html">

META 标记的常见用途是指定搜索引擎可用于提高搜索结果质量的关键字。

<META name="keywords" lang="en-us" content="OWASP, security, sunshine, lollipops">

尽管大多数 Web 服务器通过robots.txt 文件管理搜索引擎索引,但它也可以通过 META 标签进行管理。下面的标签将建议机器人不要索引,也不要跟踪包含标签的HTML页面上的链接。

<META name="robots" content="none">

互联网内容选择平台Platform for Internet Content Selection (PICS) Web 描述资源协议 Protocol for Web Description Resources (POWDER) 为将元数据与互联网内容相关联提供了基础设施。

识别 JavaScript 代码和收集 JavaScript 文件

程序员经常在前端使用 JavaScript 变量对敏感信息进行硬编码。测试人员应该检查HTML源代码,并在<script></script> 标签之间寻找JavaScript代码。测试人员还应该识别外部JavaScript文件来审查代码(JavaScript文件具有JavaScript文件的文件扩展名 .js 和名称,通常放在<script> 标签的src(source)属性中)。

检查 JavaScript 代码是否存在任何敏感信息泄漏,攻击者可能会利用这些信息进一步滥用或操纵系统。查找以下值:API 密钥、内部 IP 地址、敏感路由或凭据。例如:

const myS3Credentials = {
  accessKeyId: config('AWSS3AccessKeyID'),
  secretAccessKey: config('AWSS3SecretAccessKey'),
};

测试人员甚至可能会发现这样的东西:

var conString = "tcp://postgres:1234@localhost/postgres";

找到 API 密钥后,测试人员可以检查 API 密钥限制是按服务设置的,还是按 IP、HTTP 引荐来源网址、应用程序、SDK 等设置的。

例如,如果测试人员找到 Google 地图 API 密钥,他们可以检查此 API 密钥是否受 IP 限制或仅根据 Google 地图 API 进行限制。如果Google API Key仅根据Google Map API受到限制,攻击者仍然可以使用该API密钥查询不受限制的Google Map API,并且应用程序所有者必须为此付费。


<script type="application/json">
...
{"GOOGLE_MAP_API_KEY":"AIzaSyDUEBnKgwiqMNpDplT6ozE4Z0XxuAbqDi4", "RECAPTCHA_KEY":"6LcPscEUiAAAAHOwwM3fGvIx9rsPYUq62uRhGjJ0"}
...
</script>

在某些情况下,测试人员可能会从 JavaScript 代码中找到敏感路由,例如指向内部或隐藏管理页面的链接。

<script type="application/json">
...
"runtimeConfig":{"BASE_URL_VOUCHER_API":"https://staging-voucher.victim.net/api", "BASE_BACKOFFICE_API":"https://10.10.10.2/api", "ADMIN_PAGE":"/hidden_administrator"}
...
</script>

标识源映射文件

源映射文件通常会在 DevTools 打开时加载。测试人员还可以通过在每个外部 JavaScript 文件的扩展名后添加“.map”扩展名来查找源映射文件。例如,如果测试人员看到一个/static/js/main.chunk.js 文件,他们可以通过访问 /static/js/main.chunk.js.map 来检查其源映射文件。

检查源映射文件以获取可帮助攻击者更深入地了解应用程序的任何敏感信息。例如:

{
  "version": 3,
  "file": "static/js/main.chunk.js",
  "sources": [
    "/home/sysadmin/cashsystem/src/actions/index.js",
    "/home/sysadmin/cashsystem/src/actions/reportAction.js",
    "/home/sysadmin/cashsystem/src/actions/cashoutAction.js",
    "/home/sysadmin/cashsystem/src/actions/userAction.js",
    "..."
  ],
  "..."
}

当站点加载源映射文件时,前端源代码将变得可读且更易于调试。

识别泄露信息的重定向响应

尽管重定向响应通常不会包含任何重要的 Web 内容,但不能保证它们不能包含内容。因此,虽然 300 系列(重定向)响应通常包含“重定向到 https://example.com/”类型的内容,但它们也可能泄漏内容。

考虑重定向响应是身份验证或授权检查的结果的情况,如果该检查失败,服务器可能会响应将用户重定向回“安全”或“默认”页面,但重定向响应本身可能仍包含未显示在浏览器中但确实传输到客户端的内容。这可以通过利用浏览器开发人员工具或通过个人代理(例如 ZAP、Burp、Fiddler 或 Charles)看到。

工具

引用

白皮书

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4.1.5-检查网页内容是否存在信息泄露 的相关文章

  • Docker部署node.js应用

    前言 什么是docker 通俗的理解 docker是创建和管理容器的一种技术 那什么是容器呢 容器的功能与虚拟机很近似 都是在一个物理主机上运行多个操作系统的技术 最大的不同之处在于 虚拟机技术是虚拟出一套硬件后 在其上运行一个完整操作系统
  • 某银行降低贷款拖欠率的逻辑回归建模

    代码 coding utf 8 Created on Sat Jul 15 17 48 35 2017 author Administrator 逻辑回归建模 import pandas as pd from sklearn linear
  • CA,证书,公钥,私钥,加密算法常识总结

    数据传输安全要满足的要求 发送方能够确定消息只有预期的接收方可以解密 不保证第三方无法获得 但保证第三方无法解密 接收方可以确定消息是由谁发送的 接收方可以确定消息的发送方 接收方可以确定消息在途中没有被篡改过 必须确认消息的完整性 加密和
  • M-estimator M估计法 用于几何模型建立

    M estimators是一类广泛估计函数 定义为所给数据上的最小和函数 最小平方估计和极大似然估计都是M估计法 M估计法由鲁棒的数据作为运行保证 一般地 一个M estimation定义为一个估计函数为0的情况 这个估计函数经常是一些统计
  • 剑指offer试题编程练习11(java) 位运算符的运用

    11 输入一个整数 输出该数二进制表示中1的个数 其中负数用补码表示 首先回顾原码 反码 补码的知识 来自https www jianshu com p 36ec7a047f29 在计算机底层均是以二进制表示的 数字也不例外 下面以8位bi
  • 14-数组与指针

    寻址运算符 指针运算符 寻址运算符与 指针运算符 具有相同的优先级 自右向左结合 int a Int p a a gt a p gt p int p a 指针的赋值 声明的时候 赋值int p a 先声明再赋值 int a int p p
  • Mac配置item2高亮颜色

    item2颜色生效配置 1 bash设置 在导入并应用完颜色方案之后 通过命令vim bash profile 或open bash profile编辑文件 添加以下内容 之后source bash profile来应用文件修改 CLICO

随机推荐

  • 数据技术之数据挖掘

    第7章 数据挖掘 1 什么是数据挖掘 数据挖掘 Data Mining 就是从大量的数据中 提取隐藏在其中的 事先不知道的 但潜在有用的信息的过程 数据挖掘的目标是建立一个决策模型 根据过去的行动数据来预测未来的行为 2 阿里数据挖掘平台
  • TypeScript笔记

    数据基础类型定义 let username string 管理员 username 系统管理员 模板字符串 使用反引号 let describe string 今天天气 weather sencence方式 let info string
  • Spring Cloud微服务项目实战笔记(二)是什么推动了单体应用到微服务架构的演进?

    首先对比的是单体应用 一个有问题 大家都完蛋 重新回滚到上一版本 开发测试沟通成本也大 微服务架构的优势 每个微服务是一个小的完整单位 独立的代码库数据库 自己去快速迭代功能 快速迭代 快速回滚 资源利用大大提高 大幅降低协作成本 高可用
  • 链表 -- 算法 -- leetcode

    翻转链表前n个节点 虚拟头结点的使用情况 链表的首节点可能发生改变 虚拟头结点 ret gt next head 力扣 力扣 力扣 力扣 力扣 力扣 力扣 力扣 力扣
  • 期望/方差/协方差/相关系数

    期望 在概率论和统计学中 数学期望 mean 或均值 亦简称期望 是试验中每次可能结果的概率乘以其结果的总和 是最基本的数学特征之一 它反映随机变量平均取值的大小 离散型随机变量的一切可能的取值Xi与对应的概率p xi 乘积之和称为该离散型
  • 会员ID查询测试用例设计

    检查点 默认值检查 异常输入 查询结果检查 正常输入 查询结果检查 测试用例设计 1 前提 存在会员ID abc abcd 1abc 会员id输入为字母abc 其它默认 点击 搜索 显示完全匹配该条件的数据 即只显示会员ID abc的记录
  • linux 线程

    1 线程概述 与进程的区别及线程的优势 什么是线程 在一个程序里的一个执行路线就叫做线程 thread 更准确的定义是 线程是 一个进程内部的控制序列 一切进程至少都有一个执行线程 线程是进程内部的一条执行序列或执行路径 即一个可调度的实体
  • 读书小记--<态度>

    前言 前段时间再读了吴军老师的 态度 分享的是和女儿的日常书信 觉得收获很多 同事推荐他的 浪潮之巅 数学之美 系列书籍 下面是个人的觉得认同或值得深入学习的一些点 特此记录一下 态度决定命运 文中写道撒切尔夫人的一句话 注意你的想法 因为
  • 前端调用高德地图的接口

  • 如何查看linux内核

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 如何查看linux内核版本 第一种 登录linux 在终端输入 cat proc
  • 【机器学习】几种常见的概率分布

    之前你已经了解概率的基础知识 如果还不知道概率能干啥 在生活中有哪些应用的例子 可以看我这个 人工智能时代 用概率思维发现人生机会 www zhihu com 今天我们来聊聊几种特殊的概率分布 这个知识目前来看 还没有人令我满意的答案 因为
  • 常用的shell脚本

    1 脚本之间传递参数 1 sh 的脚本 接受参数 如下 如果有一个参数则赋值个sourceFile这个变量 否则用默认值 Shell代码 bin bash LANG en US UTF 8 get parameters sourceFile
  • 关于SSM 项目 tomcat无休止启动的问题记录

    起初很懵逼 然后一想就知道了 可能是刚写的sql除了问题 原sql SELECT FROM A WHERE DATEDIFF add time NOW lt 0 改后sql SELECT FROM tb order WHERE DATEDI
  • SpringCloud Gateway + Nacos 多模块下整合swagger2

    前言 我们经常在springboot单体项目中 集成swagger来整合接口文档 但是在微服务springcloud项目下 业务模块众多 如果再像之前一样单独访问每个模块的 swagger ui html 则非常麻烦 怎么解决呢 既然我们已
  • 本周新出计算机视觉开源代码汇总(语义分割、目标检测、超分辨率、网络结构设计、训练策略等)

    CV君汇总了过去一周计算机视觉领域新出的开源代码 涉及到图像增广 医学图像分割 图像恢复 目标检测 语义分割 超分辨率 显著目标检测 轻量级网络结构设计 网络规范化 标注工具等 其中有多篇来自CVPR 2019与ICML 2019的论文代码
  • COBOL

    一 COBOL简介 COBOL Common Business Oriented Language 面向过程的高级程序设计语言 二 COBOL语法格式 COBOL程序的每行代码通常分为80列 有非标准的80列可以超过80列 写多少列都可以
  • 【1】python爬虫入门,利用bs4以及requests获取静态网页

    注 本文仅适用于爬虫初级入门者 并不涉及太多技术本质 感谢您阅读此文 最近放假在家 闲时无聊 开始入门了python爬虫 可以完成一些基本的数据爬取 对于一些反爬取例如JS渲染 接口加密等页面仍然处于学习之中 本文就是简单总结最近已熟练掌握
  • PHP实现 美化 打赏点 金额 换算

    方法 function PointConversion je jenum strlen je echo substr je 0 1 万 if jenum 5 jv1 substr je 0 1 jv2 je 1 str jv2 0 jv1
  • mysql workbench使用存储过程

    MySQL 使用存储过程 先来了解一下什么是mysql的存储过程 Mysql存储过程是一个可编程的函数 它在数据库中创建并保存 它可以有SQL语句和一些特殊的控制结构组成 当希望在不同的应用程序或平台上执行相同的函数 或者封装特定功能时 存
  • 4.1.5-检查网页内容是否存在信息泄露

    检查网页内容是否存在信息泄露 ID WSTG INFO 05 总结 程序员在他们的源代码中包含详细的注释和元数据是很常见的 甚至建议这样做 但是 HTML 代码中包含的注释和元数据可能会泄露潜在攻击者不应获得的内部信息 应进行注释和元数据审