反射型 XSS 攻击演示(附链接)

简介: 反射型 XSS 攻击演示(附链接)

一、介绍:

反射型 XSS(Cross-Site Scripting)是一种 Web 应用程序中常见的安全漏洞,它允许攻击者将恶意脚本注入到网页中,以便在用户浏览页面时执行这些恶意脚本。下面是对反射型 XSS 的解释和分析:

  1. 定义:
  • 反射型 XSS 是一种攻击方式,其中恶意脚本通过用户输入传递到应用程序,然后由应用程序在返回的网页内容中执行。攻击者通常通过构造包含恶意脚本的链接,诱使用户点击,从而触发 XSS 漏洞。

攻击过程:

  • 攻击者构建包含恶意脚本的 URL,并将其发送给目标用户。
  • 用户点击链接,触发了应用程序对 URL 参数的处理。
  • 应用程序未正确过滤或转义用户输入,导致恶意脚本被插入到返回的网页中。
  • 用户的浏览器执行了这些恶意脚本,从而使攻击者能够执行恶意操作,如窃取用户信息、劫持会话等。
  1. 危害:
  • 攻击者可以利用反射型 XSS 窃取用户的敏感信息,如登录凭据、会话标识等。
  • 用户可能会在不知情的情况下执行恶意操作,如改变账户设置、提交恶意表单等。

防御措施:

  • 输入验证:应用程序应该对用户输入进行验证,确保只允许合法和预期的输入。
  • 输出转义:在将用户输入嵌入到 HTML 页面之前,应该对其进行适当的输出编码,以防止执行恶意脚本。
  • 使用安全框架:使用 Web 应用程序防火墙(WAF)等安全框架来检测和阻止 XSS 攻击。

总体而言,理解和防范反射型 XSS 是确保 Web 应用程序安全性的重要步骤。通过有效的输入验证和输出转义,可以减少 XSS 漏洞的风险。

二、实操演示

环境准备:

Get 型:

测试:

打开咱们已经安装好了的 Pikachu 靶场,找到反射型 xss(get) 这一页面

可以看到有个输入框,我们先尝试输入一些值,如 Moant,点击 submit 提交

在搜索框看到我们提交的参数并没有做任何处理

咱们直接打开 F12 查看元素

这里跟大家讲解下 HTML 标签

<input> 标签详解:

HTML表示:

在HTML中,可以使用<input>元素创建输入框。<input>元素的type属性指定输入框的类型,其中常见的类型包括:

  • text: 用于单行文本输入。
  • password: 用于密码输入,字符会被隐藏。
  • number: 用于数值输入。
  • email: 用于电子邮件地址输入。
  • 等等。
<!-- 例子:单行文本输入框 -->
<input type="text" name="username" id="usernameInput" placeholder="Enter your username">
属性和特性:
  • name: 用于标识输入框的名称,通常在提交表单时用于识别输入的数据。
  • id: 为输入框定义唯一的标识符,通常用于JavaScript和CSS中的操作和样式。
  • value: 设置或获取输入框的默认值。
  • placeholder: 在输入框为空时显示的灰色提示文本,提供用户输入的建议。
  • disabled: 禁用输入框,使其不可编辑。
  • readonly: 设置输入框为只读,用户不能修改其中的内容。
表单关联:
  • 输入框通常嵌套在HTML表单中,用户可以在表单中输入数据后提交给服务器进行处理。
  • 表单中的action属性指定了数据提交的目标地址,而method属性定义了提交数据的HTTP方法(通常是GET或POST)。
<form action="/submit" method="post">
    <input type="text" name="username">
    <input type="submit" value="Submit">
</form>
事件与JavaScript交互:
  • 通过JavaScript,可以监听输入框的事件,如onchange、onfocus、onblur等,以便在用户与输入框交互时执行相应的操作。
  • JavaScript也可用于动态修改输入框的属性、值或样式。
<input type="text" id="myInput" onchange="handleInputChange()">
<script>
    function handleInputChange() {
        // 处理输入框变化的逻辑
        var inputValue = document.getElementById("myInput").value;
        console.log("Input value changed: " + inputValue);
    }
</script>
安全性考虑:
  • 输入框是Web应用程序中的用户交互点,因此需要谨慎处理用户输入,防范安全漏洞,如XSS(跨站脚本攻击)和CSRF(跨站请求伪造)。
  • 对用户输入进行验证和转义是确保输入框安全的关键步骤。

测试完后我们就开始准备攻击了,因为这里主要讲解 XSS 攻击所以就直接带大家看源码了,如果读者想要追求真实性可以用工具扫描后台根据 URL 路径 来找到这个文件

源码分析:

根据路径查找到源码

咱们主要来看这段代码

$html = "        定义一个空字符串变量 $html,用于存储生成的HTML响应

if(isset($_GET['submit'])){}        检查是否存在名为 'submit' 的 GET 参数。如果存在,进入条件语句块,否则跳过整个处理过程

if(empty($_GET['message'])){}        在 'submit' 存在的情况下,检查是否存在名为 'message' 的 GET 参数并且是否为空。如果为空,说明用户没有输入消息,生成一个提示信息

$html.="<p class='notice'>输入'kobe'试试-_-</p >";

如果 'message' 不为空,则进入下一层嵌套的条件语句

if($_GET['message']=='kobe'){
    $html.="<p class='notice'>愿你和{$_GET['message']}一样,永远年轻,永远热血沸腾!</p >< img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/kobe.png' />";
}else{
    $html.="<p class='notice'>who is {$_GET['message']},i don't care!</p >";
}

如果 'message' 的值等于 'kobe',生成一个包含 'kobe' 的祝福消息和一张 Kobe 的图片的HTML响应

如果 'message' 的值不等于 'kobe',生成一个提示信息,显示用户输入的 'message'

到这里可以看到他的后端并没有对 message 做任何处理,所以咱们直接上手

攻击:

因为 JavaScript 代码是可以直接在浏览器执行,所以咱们用 JavaScript 来实施攻击,首页咱们得先了解 PHP。在 PHP 中,语句的参数可以使用双引号或单引号来闭合

先用一个 " 闭合掉前面的语句

"

再接上咱们想执行的 JavaScript 代码

"<script>alert(/XSS 攻击成功/)</script>

最后再闭合掉后面的语句

"<script>alert(/XSS 攻击成功/)</script> "

尝试输入到搜索框中

可以看到这里并没有输入完整,因为他前端做了长度限制,咱们直接在前端更改即可

将这个 20 更改为任何数字,只要能完整输入你的代码即可

最后在输入框中输入代码,按 submit 提交就会看到这个页面

这就说明我们的代码可以成功执行,XSS 攻击成功!!

接下来就是 Post 型了

Post 型:

测试:

打开咱们已经安装好了的 Pikachu 靶场,找到反射型 xss(post) 这一页面

页面中是一个登录表单,如果不知道该怎么办咱们可以点击右边提示

提示让咱们先登录

读者可能有疑惑为什么不直接攻击而是先登录,因为靶场作者原意是想让咱们去盗取 Cookie,你都不登录你哪来的 Cookie 可盗

源码分析:

可以看到代码是差不多的,所以咱们直接上手

攻击:

还是先闭合前面语句

"

接上获取 Cookie 的语句

"<script>alert(document.cookie)</script>

最后闭合后面的语句

"<script>alert(document.cookie)</script>"

发现没有做任何限制

直接在输入框中输入代码

代码执行成功,弹出了 Cookie

到这里就已经演示完毕啦,如果读者觉得对您有帮助麻烦动动小手评论点点赞收藏或关注,谢谢支持!!


相关文章
|
1月前
|
JavaScript 安全 前端开发
同源策略如何防止 XSS 攻击?
【10月更文挑战第31天】同源策略通过对 DOM 访问、Cookie 访问、脚本执行环境和跨源网络请求等多方面的严格限制,构建了一道坚实的安全防线,有效地防止了 XSS 攻击,保护了用户在网络浏览过程中的数据安全和隐私。
99 49
|
1月前
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
87 4
|
1月前
|
安全 Go PHP
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
70 2
|
1月前
|
存储 安全 Go
Web安全基础:防范XSS与CSRF攻击的方法
【10月更文挑战第25天】Web安全是互联网应用开发中的重要环节。本文通过具体案例分析了跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的原理及防范方法,包括服务器端数据过滤、使用Content Security Policy (CSP)、添加CSRF令牌等措施,帮助开发者构建更安全的Web应用。
92 3
|
1月前
|
SQL 存储 安全
什么是XSS攻击?什么是SQL注入攻击?什么是CSRF攻击?
理解并防范XSS、SQL注入和CSRF攻击是Web应用安全的基础。通过采用严格的输入验证、使用安全编码实践以及实现适当的身份验证和授权机制,可以有效防止这些常见的Web攻击,保障应用程序和用户的数据安全。
40 0
|
3月前
|
存储 安全 JavaScript
XSS跨站脚本攻击详解(包括攻击方式和防御方式)
这篇文章详细解释了XSS跨站脚本攻击的概念、原理、特点、类型,并提供了攻击方式和防御方法。
554 1
|
2月前
|
存储 JavaScript 安全
|
2月前
|
存储 JavaScript 前端开发
Xss跨站脚本攻击(Cross Site Script)
Xss跨站脚本攻击(Cross Site Script)
|
4月前
|
存储 安全 JavaScript
解释 XSS 攻击及其预防措施
【8月更文挑战第31天】
340 0
|
4月前
|
SQL 监控 安全
在Linux中,如何检测和防止SQL注入和跨站脚本(XSS)攻击?
在Linux中,如何检测和防止SQL注入和跨站脚本(XSS)攻击?