xss跨站脚本【反射型---Reflected Cross Site Scripting (XSS)】

2023-10-25 11:10

本文主要是介绍xss跨站脚本【反射型---Reflected Cross Site Scripting (XSS)】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍:

跨网站脚本(Cross-site scripting,XSS) 又称为跨站脚本攻击,是一种经常出现在Web应用程序的安全漏洞攻击,也是代码注入的一种。XSS是由于Web应用程序对用户的输入过滤不足而产生的,攻击者利用网站漏洞把恶意的脚本代码注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害者用户可能采取Cookie窃取、会话劫持、钓鱼欺骗等各种攻击。这类攻击通常包含了HTML以及用户端脚本语言。

  • 反射型 XSS:恶意脚本来自当前的 HTTP 请求;
  • 存储型 XSS:恶意脚本来自站点数据库;
  • DOM 型 XSS:漏洞存在于客户端代码而不是服务端代码

反射型---Reflected Cross Site Scripting (XSS)

LOW 

服务端核心代码:

<?phpheader ("X-XSS-Protection: 0");// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// Feedback for end user$html .= '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}?>

可以看到没有做防护。

查看源代码:

<div class="vulnerable_code_area"><form name="XSS" action="#" method="GET"><p>What's your name?<input type="text" name="name"><input type="submit" value="Submit"></p></form><pre>Hello 1</pre>
</div>

可以看到, 服务端只是判断是否存在name参数值,  存在就直接执行写入pre标签。

所以直接输入<script>alert(111)</script>

 Medium

服务端核心代码:

<?phpheader ("X-XSS-Protection: 0");// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// Get input$name = str_replace( '<script>', '', $_GET[ 'name' ] );// Feedback for end user$html .= "<pre>Hello ${name}</pre>";
}?>

Medium级别的服务端将script标签过滤了,  但是他没有不区分大写地过滤 ($name = str_replace( '<script>', '', $_GET[ 'name' ] );)。大小写、双写、换标签等都可以绕过。

可以尝试输入<script>alert(111)</script>

没有弹框,查看源代码


<div class="vulnerable_code_area"><form name="XSS" action="#" method="GET"><p>What's your name?<input type="text" name="name"><input type="submit" value="Submit"></p></form><pre>Hello alert(111)</script></pre>
</div>

 可以看到<pre>Hello alert(111)</script></pre>前面的<script>标签过滤了,后面的</script>没过滤,这明显就是黑名单了。那我就可以只改变前面的<script>标签,<Script>alert(111)</script>

 High

服务端核心代码:

<?phpheader ("X-XSS-Protection: 0");// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// Get input$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );// Feedback for end user$html .= "<pre>Hello ${name}</pre>";
}?>

服务端用了正则式并且不区分大小写地过滤所有script标签$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );

这个要换标签了<img src="" οnerrοr="alert(111)">

先尝试一下<script>alert(111)</script>

可以看到肯定过滤了,尝试输入alert(111)

 可以看到弹框代码没过滤,那就是<script>和</script>都被过滤了,尝试了大小写双写都没用,试试换标签<img src="" οnerrοr="alert(111)">

 Impossible

服务端核心代码:

<?php// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// Get input$name = htmlspecialchars( $_GET[ 'name' ] );// Feedback for end user$html .= "<pre>Hello ${name}</pre>";
}// Generate Anti-CSRF token
generateSessionToken();?>
  • htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。
  • 预定义的字符是:

    & (和号) 成为 &

    " (双引号) 成为 "

    ' (单引号) 成为 '

    < (小于) 成为 <

    > (大于) 成为 >

  • 使用htmlspecialchars函数把预定义的字符&、”、 ’、<、>转换为HTML实体,防止浏览器将其作为HTML元素。

  • 让我们先来看看官方对于impossible难度的介绍

    Impossible - This level should besecure against all vulnerabilities. It is used to compare the vulnerable source code to the secure source code.
    Prior to DVWA v1.9, this level was known as ‘high’.

    译:

    不可能-此级别应针对所有漏洞进行保护。它用于比较易受攻击的源代码和安全的源代码。在dvwav1.9之前,这个级别被称为“高”。

  • 所以我们不要求去攻破它,但是我们可以学习它是如何去进行防范的。

这篇关于xss跨站脚本【反射型---Reflected Cross Site Scripting (XSS)】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/282172

相关文章

Java通过反射获取方法参数名的方式小结

《Java通过反射获取方法参数名的方式小结》这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、解决方式方式2.1: 添加编译参数配置 -parameters方式2.2: 使用Spring的内部工具类 -

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

python写个唤醒睡眠电脑的脚本

《python写个唤醒睡眠电脑的脚本》这篇文章主要为大家详细介绍了如何使用python写个唤醒睡眠电脑的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 环境:win10python3.12问题描述:怎么用python写个唤醒睡眠电脑的脚本?解决方案:1.唤醒处于睡眠状