我是靠谱客的博主 感动小蝴蝶,最近开发中收集的这篇文章主要介绍WEB安全-XSS,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、XSS概述

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

到底什么是XSS呢?我们直接来看一个例子。
我们先写一个前端页面,要求用户输入用户名,并传给后端处理:
在这里插入图片描述
后端处理页面,网页将接收到的用户名直接输出到页面上:
在这里插入图片描述
访问前端页面,输入用户名Monster:
在这里插入图片描述
点击提交,页面返回后端处理结果:
在这里插入图片描述
如果我们提交一段HTML恶意代码,就会发现代码在当前页面执行了。

例如提交<script>alert('hacker')</script>,页面出现弹窗:
在这里插入图片描述
查看网页源代码,会发现恶意代码被插入到当前页面中了:
在这里插入图片描述
这就是一个简单的反射型XSS,虽然这里看上去没有什么大的危害,但其实XSS攻击可以做到更多事,例如盗取用户cookie,修改网页内容,恶意挂载木马等等。

二、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的成因。

反射型XSS

本页面要求我们输入用户名:
在这里插入图片描述
前端代码,通过GET方法将name参数传递给后端:
在这里插入图片描述
后端代码,接收$_GET传递的参数后,不做任何过滤,直接输出到页面:
在这里插入图片描述
输入<script>alert('hacker')</script>

js代码执行,页面出现弹窗:在这里插入图片描述
和前面举的例子一样,可以看出XSS产生的原因有两点:

  • 用户能够控制显示点
  • 对输入输出内容过滤不严

存储型XSS

该页面是一个留言板
在这里插入图片描述
输入姓名和信息即可留言,例如输入Name为Monster,Message为Hello,world!
每次访问该页面,都会加载留言信息,如下:
在这里插入图片描述
如果在此处插入一个js恶意脚本,每次有人访问该页面,都会加载这个恶意脚本,这就是存储型XSS。
查看后端源代码:

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

  • trim():函数移除字符串两侧的空白字符或其他预定义字符。
  • stripslashes():删除反斜杠
  • mysqlrealescape_string(string,connection):函数会对字符串中的特殊符号(x00,n,r,,‘,“,x1a)进行转义,用于防SQL注入。

由代码可知,并未对输入做过多限制,name和message栏都存在XSS注入漏洞。
直接在message栏输入<script>alert('hacker')</script>,之后每次访问该页面都会弹窗:
在这里插入图片描述

DOM型XSS

注入页面如下,需要我们选择语言:
在这里插入图片描述
后端源代码如下:
在这里插入图片描述
我们选择French,会发现URL变成了:

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

修改url中default=88888888,当前页面随之修改:
在这里插入图片描述
直接查看网页源代码,会发现有一段js代码:
在这里插入图片描述
修改了页面的DOM节点,将我们输入的内容直接插入到了HTML页面中:
在这里插入图片描述
修改url中default=<script>alert(1)</script>,出现弹窗:
在这里插入图片描述
查看网页源代码,恶意代码被插入网页中:
在这里插入图片描述
这就是一个简单的DOM型XSS的成因,效果和反射型XSS相似。

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

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

通关指南,直接搬运如下:

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

三、XSS的利用

1、利用XSS盗取用户cookie

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

2、利用XSS进行网页挂马

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

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

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

4、利用XSS进行网页钓鱼

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

四、XSS挖掘技巧

1、利用字符编码

一些网站会对我们输入的特殊字符加“”进行转义,例如php在magicquotesgpc = On的情况下,如果输入的数据有
单引号(’)、双引号(”)、反斜线()NULL(NULL 字符)等字符都会被加上反斜线。
我们来看一个例子:
在这里插入图片描述
magic_quotes_gpc =Off 时,输入
?x=1";alert(1)// 即可弹窗:
在这里插入图片描述
现在我们开启magic_quotes_gpc=On,输入

?x=1";alert(1)//
在这里插入图片描述
会发现双引号被转义,无法弹窗。

但是,如果返回页面像本网页一样是GBK/GB2312编码的话,我们也可以使用宽字节进行逃逸。
当网页使用了GBK编码时,会认为两个字符为一个汉字,例如%df%5c就是一个汉字(前一个ascii码大于128才能到汉字的范围),因此经过转义后,%df%5c(%5c为 )就会变成一个汉字,把转义符吃掉。
输入?x=1%df";alert(1)// ,成功弹窗:
在这里插入图片描述

2、不完整的黑名单

有些网站会使用黑名单的方式,过滤掉一些敏感js标签,例如:
在这里插入图片描述
过滤掉了大多数js标签,输入alert(1)试试:
在这里插入图片描述
但这里的黑名单漏掉了eval()函数,这就是黑名单不如白名单安全的原因,黑名单会出现遗漏的情况。
为了避免被过滤,将alert(1)转换为ASCII码形式:
在这里插入图片描述
在这里插入图片描述

五、XSS的防护

1、开启HttpOnly

JS 原生的 API提供了获取cookie的方法:document.cookie,在XSS攻击中,常常被用于盗取用户的cookie。
如果能够盗取网站管理员的cookie,那么就可以用管理员的身份直接登录网站后台,而不必非要去获得管理员账号和密码。
在正常网页通过document.cookie可以获取当前页面cookie,例如在以下页面插入js代码:
在这里插入图片描述
访问该页面,弹窗用户cookie值:
在这里插入图片描述
通过以下恶意脚本,可以将用户cookie发送至远端服务器,完成窃取。
在这里插入图片描述
但是一旦我们给该页面cookie添加上HttpOnly属性,就可以防止这种恶意行为,修改代码如下:
在这里插入图片描述
HttpOnly属性用来设置cookie是否能通过 js去访问,默认情况下该选项为空,客户端可以通过js代码去访问(包括读取、修改、删除等)cookie。
当cookie带httpOnly选项时,客户端则无法通过js代码去访问了,是防御XSS攻击的常用手段之一。
再次访问该页面,无法获取到该页面的cookie:
在这里插入图片描述

2、输入输出检查

防护XSS首先可以从输入入手,因为我们默认所有用户的输入都是不可信的,因此需要过滤掉输入中的敏感字符,有时候也需要检查输入内容格式是否合规。
当我们需要将内容输出到网页时,为了确保即使包含XSS特殊字符,也不会被执行,我们可以对输出内容编码后再进行输出。
可以从以下几个角度来考虑:
(1)黑名单、白名单
通过黑名单匹配XSS特征,例如、javascript等敏感字符,但是可能出现遗漏而被绕过的情况。相较而言白名单则更加安全,匹配成功则放行。
(2)电话、邮件、日期等格式要求
比如电话号码使用is_numeric()函数进行检查,必须是纯数字才行。邮件、日期也都有其相应的格式,输入的字符串是否超过最大长度等,这种方法类似白名单。
(3)利用编码函数
、'、"等特殊字符,进行过滤或者编码。
使用编码函数可以有效防止XSS攻击,以php为例。
addslashes():
在这里插入图片描述
strip_tags():在这里插入图片描述
htmlentities():在这里插入图片描述
htmlspecialchars():
在这里插入图片描述

最后

以上就是感动小蝴蝶为你收集整理的WEB安全-XSS的全部内容,希望文章能够帮你解决WEB安全-XSS所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部