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

web安全漏洞之xss(1)

                   什么是xss

跨站脚本的缩写,是一种网站应用程序的安全漏洞,代码注入的一种,允许将代码注入网页,通常包含HTML和用户端脚本语言

 

xss通常指利用网站开发时留下的漏洞,巧妙注入恶意指令代码到网页,这些恶意的网页程序通常是Javascript,但实际上可以包含Java ,普通的HTML等。成功后,可能得到更高的权限,私密的网页内容等

 

                  xss有几类

 

根据xss漏洞的触发特征,xss可以分为反射型xss,存储型xss,和DOM xss

 

 

 

一, 反射型xss是指恶意代码未被服务器储存,每次触发漏洞时通过GET或POST的方式提交,用户输入的内容被直接输出在HTML中,然后触发漏洞,

 

<?php

    

$name=$_GET['name']

echo "hello! $name";

 

以上代码会接受一个name参数,并直接输出在HTML网页中,当我们提交name=<script>alert('xss')</script>时,就实施了一次xss注入,查看源代码我们可以看到我们在URL中输入的script标签被嵌在HTML中,被浏览器识别,然后执行,弹窗xss

 

<html>

    <body>

        <script>

        var name='<?=$_GET['name']?>';

        document.write('hello'+name);

        </script>

    </body>

</html>

 

还有一种情况是注入点在标签内部,这样就不需要在注入的时候插入标签了,如果是script标签内部,可以直接插入JavaScript语句即可,这种情况下的xss跟sql注入很像,需要先闭合引号,然后写入代码,再将后面的引号注释掉。

 

如果是在其他标签的属性字段内,可以采用先闭合引号,再插入可以执行JavaScript代码的属性进行xss。(var就是一个属性)

 

比如输入name=';alert('xss');//

 

查看HTML源码,先用一个单引号闭合了前面的字符串,然后用分号结束该语句,alert('xss')用于弹窗,最后用双斜杠注释掉了最后剩余的单引号

<html>

    <body>

        <script>

        var name='';alert('xss');//';

        document.write('hello'+name);

        </script>

    </body>

</html>

 

 二,存储型xss,存储型xss与反射型xss基本思路相同,都是在后端未对用户输入进行过滤所导致的漏洞,但存储型xss是将用户输入保存在数据库或者其他的服务器存储中,这样只要服务器保存了xss代码,便可造成持续性的影响,比反射型xss更具威胁

 

<?php

    

    $name=$_GET['name']??'';

if($name !='')

    file_put_content('date.txt',$name);

$name=file_get_contents('date.txt');

echo"hello $name";

 

这样一来,用户的输入被保存了起来,每次访问这个页面时,都会读取之前输入过的name

 

意味着其他用户在访问时不用输入name,也会从文件中读取。

 

在实际的环境中,这种存储型xss最常见于用户发的帖子,用户的个人信息等页面,这种数据会被存储在服务器中,当其他用户访问到含有恶意代码的帖子或个人信息页面时,便受到了xss

 

三,DOM型xss,这种xss相比于前两种的最大不同是,漏洞发生在前端而不是后端,前端将用户输入直接写入到了HTML中

 

<!DOCTYPE html>

<html>

    <body>

        <script>

        var url=new URL(window.location.href);

        var name=url.searchParams.get("name");

        document.write('hello!'+name);

        </script>

    </body>

</html>

 

 

javascript具有操作DOM的功能,可以提取用户的输入,然后直接插入到DOM中,造成xss

 

 

 

payload与反射/存储型xss无异

 

需要注意的是,只有document.write()函数才会执行script标签内的代码,而通过修改DOM属性innerHTML来插入HTML内容,是不会执行其中的script标签内代码。但是可以通过插入< img src=x  οnerrοr=alert(1)>的方法来执行类似onerror属性中的javascript代码。

 

 

 

 

 


http://www.kler.cn/a/390662.html

相关文章:

  • FatLab:我的编程课程系列
  • 并发基础:(淘宝笔试题)三个线程分别打印 A,B,C,要求这三个线程一起运行,打印 n 次,输出形如“ABCABCABC....”的字符串【举一反三】
  • springboot 之 整合springdoc2.6 (swagger 3)
  • Linux第四讲:Git gdb
  • 笔记 | image may have poor performance,or fail,if run via emulation
  • 【Qt-ROS开发】使用 Qt Creator 构建和编译含 ROS 库的 Qt 项目
  • vue常见题型(10-15)
  • 在AutoDL上部署一个自定义的Python环境并在pycharm上使用
  • Java面试要点06 - static关键字、静态属性与静态方法
  • JavaScript如何操作HTML:动态网页构建指南
  • 数据结构---排序总结
  • Rust实战项目与未来发展——跨平台应用开发项目实践
  • SpringMVC学习记录(三)之响应数据
  • Webserver(5.6)服务器压力测试
  • Cross Modal Transformer: Towards Fast and Robust 3D Object Detection
  • Linux - 弯路系列1:xshell能够连接上linux,但xftp连不上(子账号可以连接,但不能上传数据)
  • 工位管理智能化:Spring Boot企业级平台
  • 如何自己实现事件的订阅和发布呢?
  • IP、网关、子网掩码的验证逻辑及程序(.Net)
  • 亚信安全新一代WAF:抵御勒索攻击的坚固防线
  • perf抓取compass能解析的日志
  • 深入了解区块链:Web3的基础架构与发展
  • 【Android、IOS、Flutter、鸿蒙、ReactNative 】文本Text显示
  • Pytorch如何精准记录函数运行时间
  • 2024下半年软考中项考试成绩多久出来?成绩合格标准是多少?
  • MySQL的ibtmp1文件详解及过大处理策略