url存在宽字节跨站漏洞_【XSS漏洞】XSS漏洞相关总结v1.0

b7e2f57cc8c1a1228de2aa2872ed9258.png点击上方 “公众号” 可以订阅哦!

Hello,各位小伙伴周五晚上好~5a633266b57e15132308f189f5794bf7.png5a633266b57e15132308f189f5794bf7.png

b3bbe66ecc97ea6320edf4282670bf2d.png

终于到了XSS漏洞的完结篇啦~~

b7146da9cc4536b28fc84d73f703d12b.png

感觉本公众号写的最多的就是XSS,现在可以告一段落了...

c2574e197e38bb48d043f7aae400ac88.png

让我们来看看第一版XSS漏洞总结吧!

c73c8bb0a03a8d91a12ccba121cfa440.png

Part.0

目录

目录

一、XSS概述

  1. 什么是XSS?

二、XSS的分类

  1. XSS的三种类型

  2. 反射型XSS

  3. 存储型XSS

  4. DOM型XSS

  5. DVWA平台通关

三、XSS的利用

  1. 利用XSS盗取用户cookie

  2. 利用XSS进行网页挂马

  3. 配合CSRF攻击完成恶意请求

  4. 利用XSS进行网页钓鱼

四、XSS挖掘技巧

  1. 利用字符编码

  2. XSS注入点分析

  3. 不完整的黑名单

五、XSS的防护

  1. 开启HttpOnly

  2. 输入输出检查

Part.1

XSS概述

什么是XSS ?

XSS全称Cross Site Script,跨站脚本攻击。

通常指攻击者通过“HTML注入”篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击手段 。

在2017年的OWASP TOP10中,XSS攻击排行第七,破坏力强大,如下图所示:

111b6db93e5b9004a26bde5298372560.png

到底什么是XSS呢?我们直接来看一个例子。

我们先写一个前端页面,要求用户输入用户名,并传给后端处理:

4a3491c8ce7636f0a22a576935e42dd2.png

后端处理页面,网页将接收到的用户名直接输出到页面上:

edf1a14dc70f0b2fcc3abc12fdb9e57f.png

访问前端页面,输入用户名Monster:

5fe81fe4037ea42618a2e1736e961185.png

点击提交,页面返回后端处理结果:

ef8bdf8a82468566874a217d11ac567a.png

如果我们提交一段HTML恶意代码,就会发现代码在当前页面执行了。

例如提交

7f07ddefe8a418735d5c3e801d7c01a2.png

查看网页源代码,会发现恶意代码被插入到当前页面中了:

a489e1150a8e74a321f7196f21373299.png

这就是一个简单的反射型XSS,虽然这里看上去没有什么大的危害,但其实XSS攻击可以做到更多事,例如盗取用户cookie,修改网页内容,恶意挂载木马等等。

Part.2

XSS的分类

XSS的三种类型

XSS一共有三种类型,分别是反射型XSS、存储型XSS以及DOM型XSS。

(1)反射型XSS:

反射型XSS也称为非持久性XSS,正如上面的例子,这种攻击方式只是简单的把用户输入的数据“反射”给浏览器,只对当前URL链接生效。因而攻击者需要引诱用户点击恶意链接才行。

(2)存储型XSS

存储型XSS又称为持久性XSS,会把恶意代码存储在服务器端,危害性极强。例如攻击者发表了一篇带有恶意js代码的文章,那么所有访问该文章的用户都会中招。

(3)DOM型XSS

DOM型XSS也是一种反射型XSS,需要向服务器输入数据,与常规的反射型XSS不同,DOM型XSS需要通过修改页面的DOM节点来形成XSS。

接下来我们先通过DVWA平台low等级看看这三种XSS的成因。

0edf93bf325de977b3c71adba0bd0f78.gif

反射型XSS

本页面要求我们输入用户名:

8ea36e69122b27732cea813bb8a1cd78.png

前端代码,通过GET方法将name参数传递给后端:

863302de38b1908e37b86dd8c1eb6616.png

后端代码,接收$_GET传递的参数后,不做任何过滤,直接输出到页面:

ee008086d6f085f36202f3741d8bb566.png

输入

js代码执行,页面出现弹窗:

52d0cb43f68ccea6700ac5b019cf9a59.png

和前面举的例子一样,可以看出XSS产生的原因有两点:

  • 用户能够控制显示点

  • 对输入输出内容过滤不严

0edf93bf325de977b3c71adba0bd0f78.gif

存储型XSS

该页面是一个留言板

b072e228431f36eae357b0d60ac2a182.png

输入姓名和信息即可留言,例如输入Name为Monster,Message为Hello,world!

每次访问该页面,都会加载留言信息,如下:

bd9f9ba77cb136d3474d0299028b67b1.png

如果在此处插入一个js恶意脚本,每次有人访问该页面,都会加载这个恶意脚本,这就是存储型XSS。

查看后端源代码:

cd0e9ddb74fa8f7544196e4f4f305905.png

我们来对其中一些函数进行解释:

  1. trim():函数移除字符串两侧的空白字符或其他预定义字符。

  2. stripslashes():删除反斜杠

  3. mysqlrealescape_string(string,connection):函数会对字符串中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义,用于防SQL注入。

由代码可知,并未对输入做过多限制,name和message栏都存在XSS注入漏洞。

直接在message栏输入

343ff893907692b779e680a8a5e42992.png 0edf93bf325de977b3c71adba0bd0f78.gif

DOM型XSS

注入页面如下,需要我们选择语言:

d1533e335237f5c570b679e050bb5312.png

后端源代码如下:

a98abb24b1a6508d0b74afa34df59ece.png

我们选择French,会发现URL变成了:

http://192.168.211.151/vulnerabilities/xss_d/?default=French

修改url中default=88888888,当前页面随之修改:

224bae8c764519483d5cc4815f1218b7.png

直接查看网页源代码,会发现有一段js代码:

665c8208491c3e6fd080de52fe442e5a.png

修改了页面的DOM节点,将我们输入的内容直接插入到了HTML页面中:

afd755bbdc6a71f31d5754e962710e06.png

修改url中default=

2ade5415e15225dbd227a6e24faf6201.png

查看网页源代码,恶意代码被插入网页中:

e00c30b74e101d706d05983035e83cfa.png

这就是一个简单的DOM型XSS的成因,效果和反射型XSS相似。

0edf93bf325de977b3c71adba0bd0f78.gif

DVWA平台通关

DVWA平台XSS页面分为4种安全等级,从low等级到impossible等级。

low安全等级主要是展示漏洞成因,安全等级往上递增,会增加不同的防御手段,impossible等级不存在漏洞。

之前写过一期通关指南,直接搬运如下:

【XSS漏洞】一步步教你通关DVWA

Part.3

XSS的利用

XSS的利用

1、利用XSS盗取用户cookie

【XSS漏洞】利用XSS窃取用户Cookie

2、利用XSS进行网页挂马

【XSS漏洞】通过XSS实现网页挂马

3、配合 CSRF 攻击完成恶意请求

【CSRF漏洞】通过实验教你学会CSRF攻击 Part3

4、利用XSS进行网页钓鱼

【XSS漏洞】利用XSS进行网页钓鱼

Part.4

XSS挖掘技巧

利用字符编码

一些网站会对我们输入的特殊字符加“\”进行转义,例如php在magicquotesgpc = On的情况下,如果输入的数据有:

单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符都会被加上反斜线。

我们来看一个例子:

74ea41671c019e529aa3a5590dd21540.png

在magic_quotes_gpc =Off 时,输入

?x=1";alert(1)// 即可弹窗:

0c3de11d48a4f1bbb7a5291930e70217.png

现在我们开启magic_quotes_gpc=On,输入

?x=1";alert(1)// :

77e565fa86c335fc16cb915868aa58a1.png

会发现双引号被转义,无法弹窗。

但是,如果返回页面像本网页一样是GBK/GB2312编码的话,我们也可以使用宽字节进行逃逸。

当网页使用了GBK编码时,会认为两个字符为一个汉字,例如%df%5c就是一个汉字(前一个ascii码大于128才能到汉字的范围),因此经过转义后,%df%5c(%5c为 \)就会变成一个汉字,把转义符吃掉。

输入?x=1%df";alert(1)// ,成功弹窗:

5a4486c56d4152b866e80e87f12b85e2.png 0edf93bf325de977b3c71adba0bd0f78.gif

XSS注入点分析

XSS有可能发生在HTML标签中、HTML属性中、在标签中、在事件中等。

之前写过一次分析,没看过的小伙伴可以看一下:

【XSS漏洞】浅析XSS脚本注入点

0edf93bf325de977b3c71adba0bd0f78.gif

不完整的黑名单

有些网站会使用黑名单的方式,过滤掉一些敏感js标签,例如:

417330bf402ce843115cb56cdf243f4a.png

过滤掉了大多数js标签,输入a\lert(1)试试:

c75ea2bf8770dcb0aa35779a5af88825.png

alert被替换成了****

但这里的黑名单漏掉了eval()函数,这就是黑名单不如白名单安全的原因,黑名单会出现遗漏的情况。

为了避免被过滤,将alert(1)转换为ASCII码形式:

a236365d43a77e1e0825c5e2bcab0b25.png

构造payload如下,成功弹窗:

591a325fcff21fa1a40af4ff75ed176d.png

Part.5

XSS的防护

开启HttpOnly

JS 原生的 API提供了获取cookie的方法:document.cookie,在XSS攻击中,常常被用于盗取用户的cookie。

如果能够盗取网站管理员的cookie,那么就可以用管理员的身份直接登录网站后台,而不必非要去获得管理员账号和密码。

在正常网页通过document.cookie可以获取当前页面cookie,例如在以下页面插入js代码:

2124b387c2e326dc3cc8e2f3e657b376.png

访问该页面,弹窗用户cookie值:

7a143bbf0b9e2b686122cceffb1b0d86.png

通过以下恶意脚本,可以将用户cookie发送至远端服务器,完成窃取。

b5945c2c9a67db9cd9b7de9104965694.png

但是一旦我们给该页面cookie添加上HttpOnly属性,就可以防止这种恶意行为,修改代码如下:

7920360e0792997535caec0e5e918056.png

HttpOnly属性用来设置cookie是否能通过 js去访问,默认情况下该选项为空,客户端可以通过js代码去访问(包括读取、修改、删除等)cookie。

当cookie带httpOnly选项时,客户端则无法通过js代码去访问了,是防御XSS攻击的常用手段之一。

再次访问该页面,无法获取到该页面的cookie:

bdab8dd69cf49eee5fede8e8d1210a20.png 0edf93bf325de977b3c71adba0bd0f78.gif

输入输出检查

防护XSS首先可以从输入入手,因为我们默认所有用户的输入都是不可信的,因此需要过滤掉输入中的敏感字符,有时候也需要检查输入内容格式是否合规。

当我们需要将内容输出到网页时,为了确保即使包含XSS特殊字符,也不会被执行,我们可以对输出内容编码后再进行输出。

可以从以下几个角度来考虑:

(1)黑名单、白名单

通过黑名单匹配XSS特征,例如、javascript等敏感字符,但是可能出现遗漏而被绕过的情况。相较而言白名单则更加安全,匹配成功则放行。

(2)电话、邮件、日期等格式要求

比如电话号码使用is_numeric()函数进行检查,必须是纯数字才行。邮件、日期也都有其相应的格式,输入的字符串是否超过最大长度等,这种方法类似白名单。

(3)利用编码函数

对、'、"等特殊字符,进行过滤或者编码。

使用编码函数可以有效防止XSS攻击,以php为例。

addslashes():

2cf6c4643699c1a543efd0b98b1e6fc4.png

strip_tags():

e5586013b2c513a8cd655623b49f8657.png

htmlentities():

57441cb308ea28c8897824b4953a6dfe.png

htmlspecialchars():

6b0e711bdc5e8f1ad9c12668aaa4fa21.png

Part.6

结束语

这就是今天的全部内容了,大家都明白了吗?

最后,欢迎关注我的个人微信公众号哦~

2a4a5e01a585b771b0e91420aa8ef884.png

Peace !2a86b4d8f484140e4701cbcbb08802be.png

aea5e0ed4e8111f335e7dc259e987dd7.png
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值