当前位置: 首页 > news >正文

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.xdnf.cn/news/1440559.html

相关文章:

  • 深入掌握sed:Linux文本处理的流式编辑器利器
  • PHP如何解决使用国密SM4解密Base64数据错误问题?(基于lpilp/guomi)
  • 协议分析基础
  • 以技术共享点燃全球能源变革新引擎的智慧能源开源了
  • 低代码革命遇瓶颈?这个“套娃神技“才是破局关键!
  • 在Excel和WPS表格中隔多行插入一个空白行
  • 多场景对练数据的 Excel 横向导出方案(EasyExcel 动态表头实践)
  • 【XR硬件系列】Vivo Vision 与 Apple VisionPro 深度技术对比:MR 时代的轻量化革命与生态霸权
  • 单元测试数据库回滚问题
  • Android音频学习(十六)——CreateTrack
  • 资产管理还靠Excel?深度体验系统如何让企业高效数字化升级!
  • 自然语言处理深层语义分析中公理化体系的可行性、挑战与前沿进展
  • php:PHP 8 新特性深度解析与实战应用:提升开发效率的关键技巧
  • 为何 React JSX 循环需要使用 key
  • 一文弄懂C/C++不定参数底层原理
  • Zygote 进程启动流程
  • 视频判重需求:别为同一内容花两次钱!
  • 涨了一倍多的顺丰同城,还能继续做大即时零售基建的蛋糕吗?
  • HTML5 标题标签、段落、换行和水平线
  • 光谱相机的探测器类型
  • 相机在两个机械臂上安装方式比较
  • 字节跳动后端 一面凉经
  • 单片机:GPIO、按键、中断、定时器、蜂鸣器
  • 知微传感Dkam系列3D相机SDK例程篇:CSharp连接相机及保存数据
  • Debezium日常分享系列之:Debezium 3.3.0.Alpha2发布
  • Gemini CLI源码解析:Agent与上下文管理实现细节
  • Airsim 笔记:Python API 总结
  • ESXI8多网卡链路聚合
  • 渗透测试中的常见误区与最佳实践
  • 【LeetCode 热题 100】72. 编辑距离——(解法一)记忆化搜索