Web安全系列(三):XSS 攻击进阶(挖掘漏洞)
前言
在前些章节 (web安全系列(一):XSS 攻击基础及原理)以及(Web安全系列(二):XSS 攻击进阶(初探 XSS Payload))中,我详细介绍了 XSS 形成的原理以及 XSS 攻击的分类,并且编写了一个小栗子来展示出 XSS Payload 的危害。
目前来说,XSS 的漏洞类型主要分为三类:反射型、存储型、DOM型,在本篇文章当中会以permeate生态测试系统为例,分析网站功能,引导攻击思路,帮助读者能够快速找出网站可能存在的漏洞。
反射型 XSS 挖掘
现在笔者需要进行手工XSS漏洞挖掘,在手工挖掘之前笔者需要先逛逛网站有哪些功能点,如下图是permeate的界面

思路分析
我们知道反射型 XSS ,大多是通过 URL 传播的,那么我就需要思考哪些地方会出现让 URL 地址的参数在页面中显示,我相信大部分读者脑中第一直觉就是搜索栏,尤其是一些大型网站的站内搜索,搜索的关键词会展示在当前的页面中。例如某搜索引擎:

而在我们测试的首页也有网站搜索功能,因此我们可以从搜索功能着手测试,尝试是否可以进行 XSS Payload,我们先输入一个简单的 Payload 进行测试,测试代码为<img onerror="alert(1)" src=1 />
当我们点击搜索按钮时,URL 应当自动改变为 http://localhost:8888/home/search.php?keywords=<img onerror="alert(1)" src=1 />
操作过程
我们进行尝试:
先输入搜索内容

再进行搜索

我们发现,Google Chrome 居然直接阻止了该事件,Payload 也没有进行触发,这里我就需要跟读者说一下了,Chrome 浏览器的内核自带 XSS 筛选器,对于反射型 XSS 会自动进行拦截,所以尽量不要用 Chrome 进行测试,我们改用火狐继续进行测试:

果然,直接触发了我们的 Payload 。
结果分析
此 Payload 被触发,说明我们找到了一个反射型 XSS 的漏洞,当然,这种漏洞非常初级,绝大部分网站都进行了过滤操作,再加上随着浏览器功能越来越强大,浏览器自带的 XSS 筛选器变得更加智能,这种漏洞会越来越少见,下面我将会测试更为常见的存储型 XSS 的挖掘与并介绍如何绕过。
存储型 XSS 挖掘
思路分析
存储型 XSS 的攻击代码是存在服务器端,因此,我们需要找到该网站将数据存储到后端的功能,我们对此网站有了一定了解,会发现 permeate 拥有发帖和回帖功能,这正是 Web 端和后台进行沟通的渠道,所有帖子信息都会存在服务端,有了这些信息,我们可以进入板块,进行发帖操作:

进入发帖界面:

检测漏洞
我们现在标题和内容里填上初级的 Payload :123<script>alert('123')</script>

我们进行发表操作:

页面直接执行了我们的 Payload,我们点完确定,查看列表:

我们进入帖子内部,会发现如下场景:

很明显,文章主体部分的 Payload 并没有执行,这到底是怎么一回事呢?
抓包
为什么标题内容可以 Payload,主体内容不能 Payload 呢,我们打开控制台,切到Network 再来发一篇帖子看看:

我们可以看到对应的内容已经经过转义,转义分为两种,前端转义和后端转义,如果是后端转义通常我们就不需要测试下去了,因为我们不知道服务端的内部代码,如果是前端转义则可以绕过这个限制。
那么该如何操作呢?

我们拷贝出 URL
curl 'http://localhost:8888/home/_fatie.php?bk=5&zt=0' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' -H 'Origin: http://localhost:8888' -H 'Upgrade-Insecure-Requests: 1' -H 'Content-Type: application/x-www-form-urlencoded' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Referer: http://localhost:8888/home/fatie.php?bk=5' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8' -H 'Cookie: PHPSESSID=7690435026da386df8a80e63f3da2089' --data 'csrf_token=9191&bk=5&title=123%3Cscript%3Econsole.log%28232%29%3C%2Fscript%3E&content=%3Cp%3E123%26lt%3Bscript%26gt%3Bconsole.log%28232%29%26lt%3B%2Fscript%26gt%3B%3C%2Fp%3E' --compressed
找到其中的 title 和 content,将 content 的内容替换为 title 的内容:
curl 'http://localhost:8888/home/_fatie.php?bk=5&zt=0' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' -H 'Origin: http://localhost:8888' -H 'Upgrade-Insecure-Requests: 1' -H 'Content-Type: application/x-www-form-urlencoded' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Referer: http://localhost:8888/home/fatie.php?bk=5' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8' -H 'Cookie: PHPSESSID=7690435026da386df8a80e63f3da2089' --data 'csrf_token=9191&bk=5&title=123%3Cscript%3Econsole.log%28232%29%3C%2Fscript%3E&content=123%3Cscript%3Econsole.log%28232%29%3C%2Fscript%3E' --compressed
替换完成之后,将此内容复制到终端进行运行:

回到主页面查看相关内容:

Payload 执行了两次,内容也被攻击了。
结果分析
看到此处说明我们已经成功绕过前端XSS过滤器,直接对内容进行修改,所以后端的转义有时候也很有必要。
总结
挖掘漏洞是一个复杂的过程,手工挖掘不失为一种可靠的方式,但是手动挖掘效率低下,有时还要看运气,目前已经出现很多自动检测 XSS 漏洞的工具以及平台,大大提高发现漏洞的效率,我将在稍后的章节中介绍一些工具以及如何防御 XSS。
Web安全系列(三):XSS 攻击进阶(挖掘漏洞)的更多相关文章
- 使用 PHP 构建的 Web 应用如何避免 XSS 攻击
		
本文首先简单介绍开发测试人员如何对 Web 应用进行 XSS 漏洞测试,如何借助工具绕过客户端 JavaScript 校验输入恶意数据:然后针对使用 PHP 语言构建的 Web 站点,从在输出端对动态 ...
 - Redis总结(五)缓存雪崩和缓存穿透等问题    Web API系列(三)统一异常处理    C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步)  C#总结(二)事件Event 介绍总结    C#总结(三)DataGridView增加全选列  Web API系列(二)接口安全和参数校验  RabbitMQ学习系列(六): RabbitMQ 高可用集群
		
Redis总结(五)缓存雪崩和缓存穿透等问题 前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...
 - Java Web使用过滤器防止Xss攻击,解决Xss漏洞
		
转: Java Web使用过滤器防止Xss攻击,解决Xss漏洞 2018年11月11日 10:41:27 我欲乘风,直上九天 阅读数:2687 版权声明:本文为博主原创文章,转载请注明出处!有时候 ...
 - WEB安全系列之如何挖掘任意用户登录漏洞
		
WEB安全系列之如何挖掘任意用户登录漏洞 0x01 前言 每周两篇文章打卡.坏蛋100块钱都不给我,好坏好坏的. 0x02 什么是任意用户登录漏洞 几乎每个网站都有自己的会员系统 ...
 - Web安全系列(二):XSS 攻击进阶(初探 XSS Payload)
		
什么是 XSS Payload 上一章我谈到了 XSS 攻击的几种分类以及形成的攻击的原理,并举了一些浅显的例子,接下来,我就阐述什么叫做 XSS Payload 以及从攻击者的角度来初探 XSS 攻 ...
 - Web API系列(三)统一异常处理
		
前面讲了webapi的安全验证和参数安全,不清楚的朋友,可以看看前面的文章,<Web API系列(二)接口安全和参数校验>,本文主要介绍Web API异常结果的处理.作为内部或者是对外提供 ...
 - 如何让Asp.net Web Api全局预防Xss攻击
		
一.概述 二.什么是XSS 三.预防方法 四.在WebApi中如何实现 在实现之前,需要了解ASP.NET WEB API的pipeline机制. 如上,可以采用多种方式进行参数的过滤 1.重写Del ...
 - web框架-(三)Django进阶
		
通过上节课的学习,我们已经对Django有了简单的了解,现在来深入了解下~ 1. 路由系统 1.1 单一路由对应 url(r'^index$', views.index), 1.2 基于正则的路由 u ...
 - Web Api全局预防Xss攻击
		
本文转载自https://www.cnblogs.com/ruanyifeng/p/4739807.html.对第二种过滤方法的代码进行了一些修改和注释,记录一下免得以后忘了.已经测试过,应该可以直接 ...
 
随机推荐
- BZOJ5302 [HAOI2018]奇怪的背包  【数论 + dp】
			
题目 小 CC 非常擅长背包问题,他有一个奇怪的背包,这个背包有一个参数 PP ,当他 向这个背包内放入若干个物品后,背包的重量是物品总体积对 PP 取模后的结果. 现在小 CC 有 nn 种体积不同 ...
 - iframe+json
			
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.PropertyFilter; impor ...
 - Codeforces Round #281 (Div. 2) A 模拟
			
A. Vasya and Football time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
 - BestCoder 2nd Anniversary/HDU 5718 高精度 模拟
			
Oracle Accepts: 599 Submissions: 2576 Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 262144/26 ...
 - react-router路由参数
			
react-router会自动为路由组件插入三个参数,但是不会主动为路由组件的子组件注入 子组件当中需要在属性当中传入 不是路由组件需要注入路由参数的话,也可以使用withRouter注入,而不是从属 ...
 - L#中 int.TryParse 有问题
			
今天发现了一个 L# 的异常..因此记录一下 List<string> strList = new List<string>(); ; i<; ++i) { ; j< ...
 - cmp 指令
			
(lldb) disassemble -n comp2 untitled6`comp2: 0x10d065f40 <+>: pushq %rbp 0x10d065f41 <+> ...
 - SQL游标的使用与语法
			
原文发布时间为:2010-08-07 -- 来源于本人的百度文章 [由搬家工具导入] 以[master].[dbo].[spt_values] 这个表为例子===declare @name nvarc ...
 - ef code first transform,add ef power tools add-in,add tangible t4 editor for enhancement.
			
use ef power tools, as to .edmx file,right click at view, choose generate database from model, then ...
 - spring一些总结
			
Spring中三种实例化bean的方法: 1)使用类构造器 <bean id="orderService" class="cn.itcast.OrderServ ...