小迪Web自用笔记52
XSS跨站
这个漏洞是要引诱用户点击的。
浏览器js执行机制,会执行载入页面的js代码。
这玩意我在看其他课程的时候听说过,就是搞个透明网站钓鱼你的信息,你打开的是这个网站,但实际上跳转的是另一个网站,另一个网站就是我的钓鱼网站。
反射型顾名思义就是利用浏览器接受js的机制,来执行恶意代码(因为原本只是把内容显示在网页上,但是传了恶意代码之后却不是如此。)
这玩意是你自己构造出来的,但是你得诱导别人访问这个东西,有点偏向于社工。
存储型(顾名思义就是被数据库存储的地方):
假设我在名字之中写入了恶意的弹窗代码,由于这个东西已经存入了数据库中,而每当别人再次访问这个页面的时候,浏览器就会自动加载,导致别人每进入一次这个鬼页面(存有我恶意代码的页面)就会弹窗一下。
我感觉这个漏洞是访问这个页面的人越多危害越大。
还有就是可以套管理员的信息,比如给客服给站长提交建议什么的,你搞一个恶意代码,然后就可以套他的信息了,盗取cookie。
Dom操作:
你网址上的信息一旦发生更改就会跳转过去。
这个功能取的是你浏览器上的值。
取表单里面的值进行数据操作,取URL里面的值进行功能上的操作。
是的,你这个判断基本正确,这是功能实现代码里的逻辑漏洞,属于 DOM XSS 漏洞的一种典型场景。
1. 为什么说是“功能点的漏洞”?
- 功能本身没问题:你要做的是“通过 URL 跳转到其他网站”,这个功能是合理的。
- 漏洞出在实现方式:问题不在功能设计,而在代码逻辑对用户输入( location.hash )的处理不安全,导致攻击者可以构造恶意 URL 执行脚本。
这种情况也可以理解为功能点的安全缺陷——功能存在,但实现代码有漏洞。
2. DOM XSS 的本质
- 不是“注入源代码”:传统 XSS 是把恶意代码注入到服务器返回的 HTML 里,而 DOM XSS 是直接在客户端通过 JS 操作 DOM 触发的。
- 核心是“用户输入被当作代码执行”:你的代码把 location.hash 直接当作 URL 跳转,而 javascript: 伪协议允许在 URL 里写脚本,这就相当于把用户输入当作代码执行了。
3. 如何修复?
- 过滤输入:只允许合法的 URL 格式(比如以 http:// 或 https:// 开头)。
- 示例修复代码:
javascript
var hash = location.hash;
if (hash) {
var url = hash.substring(1);
// 只允许 http/https 开头的 URL
if (url.startsWith('http://') || url.startsWith('https://')) {
location.href = url;
} else {
// 非法 URL,跳转到默认页面
location.href = '/';
}
}
4. 总结
- 你的代码问题属于 DOM XSS 漏洞,是功能实现代码的逻辑缺陷。
- 修复的关键是对用户可控的输入进行严格验证和过滤,而不是直接使用。
按照我的理解,就是功能点的漏洞。
直接写代码是有问题的,因为它接收的时候写到了标签里面,得闭合。
利用错误信息弹窗,闭合。
例子:
了解漏洞的本质输入与输出
他是接收数据包,然后显示给我们看。
如果不能成功,你就看是不是有符号闭合干扰。
这个XSs得要用户自定义。
闭合:让前后符号进行1对1的关系,就很像那个注入。
因为它这个东西会存入后面的日志,所以可以载入。
这应该是属于重定向跳转的漏洞吧,解析后面的地址代码并跳转。不过他首先应该是会在页面中解析。
DOM漏洞并非仅属于重定向跳转漏洞,重定向只是其常见表现之一,核心是客户端对DOM(文档对象模型)操作时,未过滤用户可控输入导致的安全风险。
- 本质差异:DOM漏洞是纯客户端漏洞,根源是JavaScript操作DOM树时,直接使用/拼接用户可控数据(如URL参数、输入框内容),未做安全过滤,导致恶意代码执行或非预期行为。
- 常见场景:除了你说的“解析地址并跳转”(如通过 window.location.href 拼接恶意URL实现跳转),更典型的是DOM-based XSS(跨站脚本),比如将用户输入直接插入页面DOM(如 document.write ),触发恶意脚本执行,而非单纯跳转。
- 解析特点:你提到的“先在页面中解析”是准确的——DOM漏洞的触发完全在浏览器端,不依赖服务器解析,仅由客户端JS处理DOM数据时的逻辑缺陷导致。
所以它俩最大的区别就是一个经过服务器,一个不经过服务器js中执行。
这个是通过拼接session里面的东西,来完成的XSS。
是的,这段代码展示了一个通过拼接 session 数据实现 DOM 型 XSS的典型场景,核心风险点在于:
1. 漏洞本质
代码中 s_session 对象的 seqId 属性值为:
javascript
seqId: " - alert(1) - "
如果这段代码是客户端 JavaScript的一部分(比如嵌入在页面中或通过 script 标签加载),并且 s_session 中的数据来自不可信来源(如 URL 参数、 localStorage 、用户输入等),同时被直接用于 DOM 操作(如 innerHTML 、 document.write ),就会触发 XSS。
2. 攻击链路分析
假设代码执行流程如下(常见场景):
javascript
// 1. 不可信数据来源(示例:从 URL 参数读取)
const userInput = new URLSearchParams(location.search).get('seqId');
// 2. 拼接进 session 数据(此处模拟代码,实际可能由服务器返回或客户端生成)
const s_session = {
logId: "3091716699",
seqId: userInput, // 攻击者构造的 payload:" - alert(1) - "
debug: false
};
// 3. 危险 DOM 操作(直接将 session 数据插入页面)
document.getElementById('seqId').innerHTML = s_session.seqId;
此时, alert(1) 会被浏览器当作 JavaScript 代码执行,触发弹窗。
3. 关键风险点
- 数据来源不可信: s_session 中的 seqId 可能来自用户可控的输入(如 URL 参数、表单、 localStorage 等),攻击者可注入恶意代码。
- DOM 操作无过滤:直接使用 innerHTML 、 document.write 等危险 API 插入不可信数据,未进行 HTML 转义或 XSS 过滤。
4. 修复建议
- 输入过滤:对 s_session 中不可信数据使用 XSS 过滤库(如 DOMPurify)净化:
javascript
import DOMPurify from 'dompurify';
const safeSeqId = DOMPurify.sanitize(s_session.seqId);
- 安全渲染:优先使用 textContent (仅渲染文本,不解析 HTML)替代 innerHTML :
javascript
document.getElementById('seqId').textContent = s_session.seqId;
总结
这段代码的风险在于将不可信数据(如用户输入)拼接进 session 后,直接用于 DOM 操作,属于典型的 DOM 型 XSS 漏洞。修复需在客户端 JavaScript 中对不可信数据进行过滤,并使用安全的 DOM 操作 API。