2 XSS

XSS的原理

XSS(跨站脚本攻击)原理

1. 核心机制

XSS攻击的本质是恶意脚本在用户浏览器中执行。攻击者通过向网页注入恶意代码,当其他用户访问该页面时,浏览器会执行这些代码(没有对用户的输入进行过滤导致用户输入的恶意JS代码输入到页面中产生漏洞的),导致:

  • 会话劫持(窃取Cookie)
  • 页面篡改
  • 敏感数据窃取
  • 恶意重定向
2. 攻击流程
graph LR
A[攻击者构造恶意脚本] --> B[注入目标网站]
B --> C[用户访问被篡改页面]
C --> D[浏览器执行恶意脚本]
D --> E[攻击达成]

3. 三种主要类型

(1) 反射型XSS

  • 攻击方式:恶意脚本通过URL参数传递
  • 触发条件:服务器未过滤输入,直接返回参数内容
  • 示例:
    http://example.com/search?keyword=<script>stealCookie()</script>
    

    服务器返回页面包含:<p>您搜索了: <script>stealCookie()</script></p>

(2) 存储型XSS(危害最大)

  • 攻击方式:恶意脚本存储到数据库
  • 触发条件:用户访问包含恶意内容的页面(如评论区)
  • 危害性:长期存在,影响所有访问者
  • 攻击链: $$ \text{攻击者提交} \rightarrow \text{服务器存储} \rightarrow \text{用户加载} \rightarrow \text{脚本执行} $$

(3) DOM型XSS

  • 特点:完全在客户端发生,不经过服务器
  • 原理:前端JavaScript不安全地操作DOM
  • 示例漏洞代码:
    document.getElementById("output").innerHTML = "欢迎, " + location.hash.substring(1);  // 从URL#后取值
    

    攻击URL:http://example.com#<img src=x onerror=alert(1)>
4. 关键漏洞点
  • 输入未过滤:用户输入直接拼接到HTML/JS中
  • 输出未转义:特殊字符如 < > " ' 未转换为实体字符
  • 不安全API使用:如 innerHTMLeval()document.write()
5. 数学表达攻击场景

设合法输入为 $A$,恶意载荷为 $M$,漏洞函数为 $f$,则攻击成功条件: $$ f(A + M) \neq f(A) + f(M) $$ 当过滤函数 $f$ 非幂等或不完备时,存在: $$ \exists M \text{ 使得 } f(M) = M \quad \text{(绕过过滤)} $$

6. 防御原则
  • 输入过滤:删除或编码 < > & " ' 等危险字符
  • 输出转义:根据上下文使用不同编码规则
    • HTML上下文:< → &lt;
    • JavaScript上下文:" → \u0022
  • 内容安全策略(CSP):通过HTTP头限制脚本来源
    Content-Security-Policy: script-src 'self'
    

总结:XSS本质是信任链断裂——浏览器信任服务器返回的内容,而服务器未充分验证用户输入。防御关键在于严格实施数据与代码分离原则

 编码

地址栏urlcode

英文数字一般不会进行编码,一般对特殊字符进行编码

ASCII转16进制就是urlcode编码规范

JS unicode

\u开始的

先转ASCLL,再转16进制---》\u00

html实体编码

有三种形式:

十进制编码:直接转ASCII,如果是16进制编码,再转一个16进制就行了

&#60;---->不要忘记分号

解析顺序

html实体编码---》urlcode----》js unicode

 XSS-Lab 靶场过关

level 1 无任何过滤

http://127.0.0.1/xss-labs-master/level1.php?name=t1
<?php 
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>";
?>

get传参,这里可以看到这关并没有做任何的过滤,导致我name=什么就会输出什么,直接将name=的结果输出到页面上来,但是我们要了解到到底什么样的标签可以嵌套解析,不然我们没办法解析我的恶意代码

payload:

http://127.0.0.1/xss-labs-master/level1.php?name=%3Cimg%20src=1%20onerror=alert(1)%3E
http://127.0.0.1/xss-labs-master/level1.php?name=%3Cscript%3Ealert(1)%3C/script%3E

说明<h>这个标签是可以嵌套解析标签和script代码的,那具体我们有那些可以,那些不行呢?

level 2 input表单

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level2.php method=GET>
<input name=keyword  value="'.$str.'">
<input type=submit name=submit value="搜索"/>
</form>
</center>';
?>

 .htmlspecialchars函数

详解:https://www.php.net/manual/zh/function.htmlspecialchars.php

 可以看到这个函数当我们再像前面那关那样输入js代码,发现它并不能解析,这是因为此过滤函数进行了html的实体编码,将<>转换成了如下实体编码,这样就会认为解析过后的<>是普通字符而无法解析

执行转换
字符替换后
& (& 符号)&amp;
" (双引号)&quot;,除非设置了 ENT_NOQUOTES
' (单引号)设置了 ENT_QUOTES 后, &#039; (如果是 ENT_HTML401) ,或者 &apos; (如果是 ENT_XML1、 ENT_XHTML 或 ENT_HTML5)。
< (小于)&lt;
> (大于)&gt;

绕过标签和属性value:

分析源码可以看出它并没有对input进行过滤,只对get传参进行了过滤,那我们就需要绕过input

1 绕过value

“”闭合

aaaa" οnclick="alert(1)

2 闭合input标签

aaa"> <script>alert(1)</script>

XSS cookie

1 进入登录页面,查看登录的cookie

2 删除页面的cookie

3 进入服务器的后台复制cookie,修改后台的index.php

4 成功进入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97907.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GitHub每日最火火火项目(9.3)

1. pedroslopez / whatsapp-web.js 项目名称&#xff1a;whatsapp-web.js项目介绍&#xff1a;基于 JavaScript 开发&#xff0c;是一个用于 Node.js 的 WhatsApp 客户端库&#xff0c;通过 WhatsApp Web 浏览器应用进行连接&#xff08;A WhatsApp client library for NodeJS …

Ansible变量

Ansible变量定义变量规则&#xff1a;由字母/数字/下划线组成&#xff0c;变量需要以字母开头&#xff0c;ansible内置的关键字不能作为变量。ansible中&#xff0c;可以将变量简化为三个范围&#xff1a;Global范围&#xff08;高&#xff09;&#xff1a;从命令行和ansible配…

Elasticsearch 核心特性与应用指南

最近在准备面试&#xff0c;正把平时积累的笔记、项目中遇到的问题与解决方案、对核心原理的理解&#xff0c;以及高频业务场景的应对策略系统梳理一遍&#xff0c;既能加深记忆&#xff0c;也能让知识体系更扎实&#xff0c;供大家参考&#xff0c;欢迎讨论。一、核心优势 Ela…

力扣115:不同的子序列

力扣115:不同的子序列题目思路代码题目 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数。 测试用例保证结果在 32 位有符号整数范围内。 思路 首先我们来考虑特殊情况&#xff0c;当s串的长度小于t串时s串肯定就没有t串了。其他情况我们就需…

2004-2023年各省生活垃圾无害化处理率数据(无缺失)

2004-2023年各省生活垃圾无害化处理率数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;2004-2023年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;生活垃圾无害化处理率 4、范围&#xff1a;30省 5、指标解释&#xff1a;生活垃圾无害化处理率指报…

【Python练习题】Python小白必练100题答案-第21-40题

练习题直达链接Python小白必练100题答案-第1-20题点我直达Python小白必练100题答案-第21-40题点我直达Python小白必练100题答案-第41-60题点我直达Python小白必练100题答案-第61-80题点我直达Python小白必练100题答案-第81-97题点我直达目录专栏导读循环结构 字符串操作第三部…

添加⽂件--场景⼆

添加⽂件–场景⼆ 学习到这⾥&#xff0c;我们已经清楚了如何向仓库中添加⽂件&#xff0c;并且对于⼯作区、暂存区、版本库也有了⼀定的认识。那么我们再展⽰⼀种添加⽂件的场景&#xff0c;能加深对⼯作区、暂存区、版本库的理解&#xff0c;⽰例如下&#xff1a; roothcss-e…

华为网路设备学习-31(BGP协议 六)

BGP路由属性的几种常见使用方法&#xff1a; 29章是 BGP路由汇总 与 as-path-filter&#xff08;正则表达式&#xff09; 30章是 Community 的使用方法 本章是 ip前缀列表ip-prefix 、 路由过滤 filter-policy 和路由策略 route-policy 一、在BGP中的 ip前缀列表&#xf…

Windows PostgreSQL JDBC驱动安装包位置

要在Windows系统上获取PostgreSQL JDBC驱动安装包&#xff08;后缀为.jar的文件&#xff09;&#xff0c;可通过以下官方及常用渠道获取&#xff0c;具体位置如下&#xff1a; ###&#x1f527; 1. 官方网站下载&#xff08;推荐&#xff09; 下载地址&#xff1a;https://jdb…

机器学习从入门到精通 - 聚类算法大比拼:K-Means、DBSCAN实战与评估陷阱

机器学习从入门到精通 - 聚类算法大比拼&#xff1a;K-Means、DBSCAN实战与评估陷阱 开场白&#xff1a;推开无监督学习的大门 朋友们&#xff0c;不知道你们有没有对着堆积如山、没有标签的数据发过愁&#xff1f;想从里面找出点规律&#xff0c;分组什么的&#xff0c;结果发…

AI 重构内容创作:从文案生成到视频剪辑,创作者该如何与 AI 协同共生?

一、引言&#xff1a;AI 掀起内容创作的 “重构浪潮”​行业现象引入&#xff1a;列举 AI 在内容创作领域的爆发式应用案例&#xff08;如某平台 AI 文案工具日生成量破百万、AI 视频剪辑软件用户增长超 300%&#xff09;​创作者需求变化&#xff1a;通过调研数据说明创作者对…

后端一次性返回十万条数据时,前端需要采用多种性能优化策略来避免页面卡顿

当后端一次性返回十万条数据时&#xff0c;前端需要采用多种性能优化策略来避免页面卡顿。以下是主要的优化方案&#xff1a; 分页加载 - 将数据分批次加载显示虚拟滚动 - 只渲染可视区域内的数据数据懒加载 - 按需加载数据Web Workers - 在后台线程处理数据时间切片 - 分散渲染…

基于-轻量级文档搜索系统的测试报告

文章目录一、项目背景二、项目功能三、测试计划&#xff08;一&#xff09;测试用例设计&#xff08;二&#xff09;测试用例实现1.功能测试2.界面测试3.兼容性测试4.易用性测试5.安全性测试一、项目背景 1.基于轻量级文档检索系统采用C技术栈来实现&#xff0c;同时使用了本地…

编辑器vim(Linux)

Linux下开发工具是独立的写代码——编辑器 vim编译代码——gcc/g调试——gdb、cgdb构建工具——makefile、make、cmakevim只用来写代码注意&#xff1a;直接用vim打开一个不存在的文件并保存退出&#xff0c;就会自动生成该文件vim有多种模式命令模式&#xff08;Normal Mode&a…

GitLab,2025最新如何配置中的SSH key步骤

电脑右键先检查&#xff0c;是否有公钥 git cat ~/.ssh/id_rsa.pub下面是有&#xff0c;不用生成公钥&#xff0c;没有就要生成生成本地电脑公钥, 建议用第二种 //第一种ssh-keygen -t rsa//第二种------- 1.打开git bash,输入&#xff1a;ssh-keygen -t rsa -C “你的邮箱”ss…

华为HCIE证书多久续一次费?费用多少?

根据华为官方政策&#xff0c;华为认证HCIE的有效期为3年&#xff0c;有效期自证书正式发放之日起计算&#xff0c;考生可通过华为人才在线官网登录个人账号&#xff0c;在“我的证书”栏目中查询具体有效期起止时间。一、HCIE证书到期后的续证方式 1.重考对应HCIE的认证考试&a…

提升文本到图像强化学习稳定性:Pref - GRPO算法如何革新图像生成?

提升文本到图像强化学习稳定性&#xff1a;Pref - GRPO算法如何革新图像生成&#xff1f; 在文本到图像生成领域&#xff0c;强化学习正重塑着模型与人类偏好的对齐方式。本文聚焦于一种创新的基于成对偏好奖励的GRPO方法&#xff08;Pref - GRPO&#xff09;&#xff0c;它通…

Linux UDisks守护进程曝本地提权漏洞CVE-2025-8067,PoC已发布

漏洞概述安全研究人员在Linux环境中广泛使用的磁盘管理组件UDisks守护进程中&#xff0c;发现了一个严重漏洞&#xff08;编号CVE-2025-8067&#xff0c;CVSS评分8.5&#xff09;。该漏洞已报告给红帽产品安全团队&#xff0c;并在UDisks更新版本中得到修复。技术细节该漏洞存在…

uniapp 开发上架 iOS App全流程

操作文档网址&#xff1a;https://ask.dcloud.net.cn/article/152 操作学习视频地址&#xff1a;uniapp打包上线微信小程序、安卓、IOS流程_哔哩哔哩_bilibili 第一步&#xff1a;注册苹果 iOS 个人开发者账号 费用说明 ‌个人开发者账号‌&#xff1a;适用于独立开发者或小…

Sqlsugar补充自定义模板

DBFirst默认创建所有实体CreateClassFile()的第二个参数为生成实体类命名空间//.net6以下 db.DbFirst.IsCreateAttribute().CreateClassFile("c:\\Demo\\1", "Models"); //.net6以上 string加? db.DbFirst.IsCreateAttribute().StringNullable().CreateCl…