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

Hello,各位小伙伴周五晚上好~

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

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

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

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攻击排行第七,破坏力强大,如下图所示:

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

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

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

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

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

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

例如提交

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

这就是一个简单的反射型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的成因。

反射型XSS

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

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

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

输入

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

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

  • 用户能够控制显示点

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

存储型XSS

该页面是一个留言板

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

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

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

查看后端源代码:

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

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

  2. stripslashes():删除反斜杠

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

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

直接在message栏输入

DOM型XSS

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

后端源代码如下:

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

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

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

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

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

修改url中default=

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

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

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 字符)等字符都会被加上反斜线。

我们来看一个例子:

在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)// ,成功弹窗:

XSS注入点分析

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

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

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

不完整的黑名单

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

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

alert被替换成了****

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

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

构造payload如下,成功弹窗:

Part.5

XSS的防护

开启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:

输入输出检查

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

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

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

(1)黑名单、白名单

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

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

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

(3)利用编码函数

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

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

addslashes():

strip_tags():

htmlentities():

htmlspecialchars():

Part.6

结束语

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

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

Peace !

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

  1. url存在宽字节跨站漏洞_利用WebSocket跨站劫持(CSWH)漏洞接管帐户

    在一次漏洞悬赏活动中,我发现了一个使用WebSocket连接的应用,所以我检查了WebSocket URL,发现它很容易受到CSWH的攻击(WebSocket跨站劫持) 有关CSWH的更多详细信息,可 ...

  2. url存在宽字节跨站漏洞_5分钟速览丨常见的Web安全漏洞及测试方法

    中秋小长假 "余额"就剩半天了 尽管心里有太多不舍 也要调整自己 毕竟假期都是短暂的 工作才是职场人生的常态 为了尽快消除"假日综合症" e小安贴心送上小文一篇 ...

  3. rc4算法安全漏洞_(转)SSL/TLS 漏洞“受戒礼”,RC4算法关闭

    原文:https://blog.csdn.net/Nedved_L/article/details/81110603 SSL/TLS 漏洞"受戒礼" 一.漏洞分析 事件起因 201 ...

  4. thinkphp日志泄漏漏洞_【Windows高危漏洞预警】CVE20200601,影响关键加密功能

    一.事件报告 2020年伊始,NSA发现了一个影响Microsoft Windows加密功能的严重漏洞(CVE-2020-0601).证书验证漏洞允许攻击者破坏Windows验证加密信任的方式,并且可 ...

  5. java 文件上传漏洞_文件上传漏洞(绕过姿势)

    文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接.但是想真正把这个漏洞利用好却不那么容易,其中有很多技巧,也有很多需要掌握的知识.俗话说,知己知彼方能百战不殆,因此 ...

  6. nginx 上传文件漏洞_文件上传漏洞小结

    1 概念 上传文件时,服务器端脚本语言,未对上传的文件进行严格的验证和过滤,就有可能上传恶意的脚本文件,从而控制整个网站,甚至是服务器. 2 危害 • 网站被控制,对文件增删改查,执行命令,链接数据库 ...

  7. nginx 上传文件漏洞_文件上传漏洞,解析漏洞总结

    文件上传漏洞.解析漏洞总结 1.文件上传漏洞是什么 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力.常见场景是web服务器允许用户上传图片或者普通文本文件 ...

  8. java 文件包含漏洞_远程文件包含漏洞(pikachu)

    漏洞介绍 File Inclusion(文件包含漏洞)概述 文件包含,是一个功能.在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件. 比如 ...

  9. msf win10漏洞_【CVE20200796】漏洞复现

    一.漏洞简介 该漏洞是服务器消息块3.1.1(SMBv3)协议中处理压缩消息时,对数据没有经过安全检查,直接使用会引发内存破坏,成功利用针对此漏洞的攻击者可以获得在目标服务器或客户端上执行代码的能力. ...

最新文章

  1. CFLAGS,CPPFLAGS,CXXFLAGS in Makefile
  2. JAVA相关基础知识(一)
  3. 工具_HBuilder使用快捷方式
  4. C++(STL):26 ---关联式容器set用法
  5. 在Go中使用Protobuf
  6. 听说你不会用datetime处理时间?
  7. MVC3中输出Html标签的方法
  8. Fluent 安装过程
  9. PLC编程时三个注意事项
  10. Python学习笔记(15) 网络爬虫使用proxy实现自动换IP防封锁
  11. 【电子技术实验设计】简易水位控制器设计报告
  12. 【干货分享】制作一款清新的二次元风格字体
  13. smb协议讲解_SMB/CIFS协议解析一概述
  14. python英文单词记忆游戏单词爆破机
  15. 影响力最大化概述——《社会网络节点影响力分析研究》内容简述
  16. 未找到beta版怎么解决_你要的直播解决方案来了!无需采集卡!
  17. GSMA TAC核发及IMEI编码规则
  18. Android程序员必看,资深Android面试题
  19. SPA与MPA之间的区别
  20. 基础SQL Server 操作问题——仅当使用了列表并且IDENTITY_INSERT为ON时,才能为表中的标识列制定显示值

热门文章

  1. 微信公众开放平台开发08---纯java 实现微信开发:编写自定义菜单
  2. 将connection存放在Threadlocal里和数据库连接池的区别
  3. LCS 最大子段和,最大子段和在原数组的首末地址
  4. readline安装
  5. linux的用户及权限管理,Linux 用户及权限管理.doc
  6. 随想录(ros学习笔记)
  7. 随想录(python编写的计算器和贪吃蛇游戏)
  8. html定义最小宽度,line-block的运用:最小宽度的设置
  9. oracle时分秒修改值_Oracle SQL Developer显示的时间包含时分秒的设置方法
  10. jsp大作业_Servlet与JSP配合使用基本案例