快速找出网站中可能存在的XSS漏洞实践(一)

news/2024/4/28 15:07:15/文章来源:https://blog.csdn.net/weixin_33979745/article/details/88737628

一、背景

笔者最近在慕课录制了一套XSS跨站漏洞 加强Web安全视频教程,课程当中有讲到XSS的挖掘方式,所以在录制课程之前需要做大量实践案例,最近视频已经录制完成,准备将这些XSS漏洞的挖掘过程记录下来,方便自己也方便他人。

在本篇文章当中会一permeate生态测试系统为例,笔者此前写过一篇文章当中笔者已经讲解如何安装permeate渗透测试系统,因此这里不再重复讲解如何安装此渗透测试系统,参考文档:利用PHP扩展Taint找出网站的潜在安全漏洞实践

二、内容概要

  1. XSS漏洞原理
  2. 反射型挖掘
  3. 存储型挖掘

三、漏洞简介

在实践漏洞之前,笔者准备先简单介绍一下XSS漏洞,不过XSS的相关概念介绍并不是本文的重点,因此不会过多细讲;XSS的漏洞类型主要分为三类:反射型、存储型、DOM型

3.1 漏洞成因

XSS的漏洞主要成因是后端接收参数时未经过滤,导致参数改变了HTML的结构,如下图所示
image

在图中可以看到攻击者的参数被原样放到了HTML代码当中,导致原本的结构被改变,当这份代码被浏览器执行之后,将执行alert事件。

3.2 反射型

反射型XSS在笔者闹钟的定义是,如果URL地址当中的恶意参数会直接被输出到页面中,导致攻击代码被触发,便称之为反射型XSS,如下图所示
image

在图中可以看到,此处原本是输入一个名字,单实际传递了一个script标签,此标签也被原样放到了HTML结构当中,结果script标签代码中的代码被触发

3.3 存储型

存储型XSS,顾名思义便是恶意参数被存储起来了,通常存储在后端服务器当中,所以存储型XSS在URL地址当中不会包含恶意参数,对于受害者来说,很难发现已经被攻击了,如下图存储型XSS被触发

image

在图中笔者并没有在URL地址当中看到script代码,但是攻击代码依然被触发,说明攻击代码来自于服务器,而这个攻击代码确实是由攻击者传递到服务器当中去的。

一般情况下,当攻击者将攻击代码通过表单传递到服务器当中去,会得到一个新页面的地址,这个地址中URL并没有明显异常,比如如下URL地址

http://permeate.songboy.net/article/1

但当存在存储型XSS时,受害者打开此URL,攻击代码将会被触发,这种情况下笔者便称之为存储型XSS漏洞。

3.4 DOM型

DOM型XSS较为特殊,笔者前面反射型XSS和存储型XSS都是以传播方式来区分的,而DOM型XSS和传参方式无关,而是当开发者做了一些安全防护之后,任出现安全问题的一种现象,如下图所示

image

在图片中,可以看到参数name已经使用函数转义了,按理说此时将参数传递到前端页面是不会产生XSS漏洞的;但当JavaScript代码将参数进行DOM节点操作之后,原本被转义的代码又会被还原,因此还是会被触发,如下图所示

image

在图中看到XSS代码已经被触发,这种DOM型XSS相对来说更加隐蔽,所以防御XSS漏洞的不能仅仅依靠后端开发者,前端开发者也应当了解XSS漏洞。

四、反射型挖掘

经过上一节的原理介绍,笔者相信大家对XSS已经有一些了解,现在笔者需要进行手工XSS漏洞挖掘,在手工挖掘之前笔者需要先逛逛网站有哪些功能点,如下图是permeate的界面

image

4.1 思路分析

在知道反射型XSS,是通过URL地址传播的,那么笔者就需要思考那些地方会让URL地址的参数在页面中显示;相信读者都用过一些网站的站内搜索,在站内搜索的位置往往会将搜索的关键词展示在页面当中,如下图所示

image

而在首页笔者也看见此网站有搜索功能,因此可以从搜索位置着手,可以在搜索位置输入一个简单的payload,参考如下

<script>alert(123)</script>

当点击搜索后,会自动跳转到以下URL当中,此时浏览器的URL地址已经发生了变化,URL地址如下:

http://permeate.songboy.net/home/search.php?keywords=<script>alert(123)</script>

搜索的表单是使用了GET传参,满足了测试反射型的第一步要求

4.2 漏洞检验

接下来就需要看看笔者的payload有没有被触发,结果很意外,不但没有被触发还被浏览器所阻止了,如下图

image

这里就需要跟读者说明一下,谷歌内核浏览器自带XSS筛选器,所以对于反射型XSS测试,尽量不使用谷歌浏览器,笔者建议使用火狐浏览器进行测试;

4.3 结果分析

现在笔者将上面的URL地址复制下来,并粘贴到火狐浏览器当中,并按下回车,看到效果如下图

image

此时payload已经被触发,说明找到了一个反射型XSS的漏洞,这种漏洞相对来说非常初级,随着浏览器的XSS筛选器变得更加智能,这种漏洞也越来越少,在下面的内容当中笔者将会提到存储型XSS挖掘与绕过。

五、存储型挖掘

现在笔者来寻找存储型XSS,存储型的攻击代码是存储在服务端,因此需要找出一些会将表单内容存储到服务端的位置,笔者在之前已经对permeate做了一番了解,因此知道permeate拥有发帖和回帖功能,这些功能正是需要将参数存储起来并展示的地方。

5.1 发现漏洞

在首页点击XSS板块,进入到了板块列表当中,如下图

image

在右下角能看到有一个发帖按钮,点击发帖按钮后,即可进入发帖界面,如下图

image

在permeate渗透测试系统当中,笔者如果要发表帖子,那么就需要有账号,笔者这里随便注册一个账号,注册过程笔者就不详细讲解了

5.2 检验漏洞

在注册账号完成并登陆之后,笔者再次打开发帖页面,并在标题处和内容处都填写payload,参考内容如下:

<script>alert(123)</script>

在标题处和帖子内容中分别填写payload,填写好之后,应和与下图一致

image

填写好内容之后,笔者点击下方的发表按钮,即可进行发帖,发帖成功会弹出一个提示成功,如下图所示

image

点击确定之后,会跳转到发帖列表,并弹出一个123的提示框,如下图所示

image

如果看到这个弹框,说明笔者的payload已经被执行,点击确定就可以看到列表的内容,如下图所示

image

在列表中只显示标题,所以帖子内容中的payload并没有被执行;

5.3 抓包绕过

现在点击标题,进入帖子详情页面,在详情页笔者发现payload也只触发了一次,而且内容当中的标签被直接显示了出来,如下图

image

当标签被直接显示出来,这说明笔者的参数被转义了;转义分为两种,前端转义和后端转义,如果是后端转义通常笔者会放弃测试,如果是前端转义则可以绕过这个限制;在这里笔者发现标题没有被转义,而内容被转,猜测可能是前端做的转义,因此可以通过浏览器的审查工具将数据包拷贝下来;

首先重新打开发帖页面,然后在网页随便一个位置单击鼠标右键->选择审查元素->切换到network标签并勾选Preserve log,打开网络并勾选Preserve log的目的是让发表帖子之后,能在网络请求中找到该记录,现在笔者可以填写新的payload,如下图
image

点击发表按钮之后,笔者可以在控制台中找到刚才的post请求,从请求中可以看出,这个数据发出去就已经被转义了,如下图
image

5.4 编码替换

当确定这个地方存在前端做了转义处理,如果后端没有做处理,笔者就可以绕过它,现在笔者将请求复制出来,然后改变里面的数据,如下图
image

复制出来的数据如下

curl 'http://permeate.songboy.net/home/_fatie.php?bk=6&zt=0' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' -H 'Origin: http://permeate.songboy.net' -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_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 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://permeate.songboy.net/home/fatie.php?bk=6' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8' -H 'Cookie: __cfduid=defc970ef7081e30aedd761da5762b1891532003579; UM_distinctid=1655a61a23343c-03f0904540a333-34657908-1fa400-1655a61a234323; PHPSESSID=rufhm0741qfv55cpfnc80k1g4l' --data 'csrf_token=3908&bk=6&title=222%3Cscript+%3Ealert%28123%29%3C%2Fscript%3E&content=%3Cp%3E222%26lt%3Bscript+%26gt%3Balert%28123%29%26lt%3B%2Fscript%26gt%3B%3C%2Fp%3E' --compressed

笔者找到参数中的titlecontent参数值,将title的参数值复制下来,然后替换content的参数值,替换后的内容如下

curl 'http://permeate.songboy.net/home/_fatie.php?bk=6&zt=0' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' -H 'Origin: http://permeate.songboy.net' -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_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 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://permeate.songboy.net/home/fatie.php?bk=6' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8' -H 'Cookie: __cfduid=defc970ef7081e30aedd761da5762b1891532003579; UM_distinctid=1655a61a23343c-03f0904540a333-34657908-1fa400-1655a61a234323; PHPSESSID=rufhm0741qfv55cpfnc80k1g4l' --data 'csrf_token=3908&bk=6&title=222%3Cscript+%3Ealert%28123%29%3C%2Fscript%3E&content=222%3Cscript+%3Ealert%28123%29%3C%2Fscript%3E' --compressed

替换完成之后,笔者将此内容复制到终端当中(如果读者用的是windows操作系统,可以下载一个cmder),然后按下回车键,结果如下图

image

5.5 结果分析

在返回结果当中可以看到提示发帖成功,此时就笔者已经成功发布了一个新帖子,回到帖子列表当中看到有三条帖子,在最后面的帖子则是笔者新发布的,如下图

image

打开详情页,笔者被弹了两次提示框,说明标题和内容当中的payload都被触发,并且在控制台当中也可以看到script变成了DOM节点,而不是文本展现出来,如下图所示

image

看到此处说明笔者已经成功绕过前端XSS过滤器,晚一些在发表一篇工具盘,和防御篇,大家有兴趣也可以支持一下笔者的视频教程,URL地址如下

https://coding.imooc.com/class/242.html

Thanks♪(・ω・)ノ


作者:汤青松

微信:songboy8888

日期:2018-08-21

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_747341.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

干货满满:小团队(网站和APP)没有数据方面的预算,推广运营人员如何用数据提升业务?...

先说结论&#xff1a;没有钱&#xff0c;没有预算照样可以做好数字运营&#xff0c;数字营销。想解决这个棘手的问题&#xff0c;要么花钱&#xff0c;要么花时间咯。下文中会具体讲花时间&#xff08;精力&#xff09;的方法。 1.先从付费类的软件说起&#xff1a; 截止2018年…

知识问答网站---邮件发送失败--debug

发送邮件失败的原因&#xff1a;授权码过期 注意&#xff0c;邮箱设置的密码是授权码&#xff0c;并不是自己登录的时候用的账号密码。 转载于:https://www.cnblogs.com/lchzls/p/7072738.html

由 12306.cn 谈谈高并发+高负载网站性能技术

2019独角兽企业重金招聘Python工程师标准>>> 12306.cn 网站挂了&#xff0c;被全国人民骂了。我这两天也在思考这个事&#xff0c;我想以这个事来粗略地和大家讨论一下网站性能的问题。因为仓促&#xff0c;而且完全基于本人有限的经验和了解&#xff0c; 所以&…

忘记密码,如何在登陆过的网站查看加密后的密码

以谷歌浏览器为例&#xff0c;查看经过页面加密处理过的密码。 1、打开网站页面&#xff0c;按F12打开 开发者工具 2、点击开发者工具左上角的箭头图标&#xff0c;然后点击密码输入框 3、可以看到开发者工具的Elements里有淡蓝色标识的一行html代码 4、在这一行代码里有个 ty…

《网站开发基础与提高》studyNote

首先&#xff0c;你可以在豆瓣看到关于这本书的介绍&#xff1a;http://www.douban.com/subject/1970152 这本书因为一些事情和个人情感&#xff0c;拖了很长时间前天才看完。所谓个人情感&#xff0c;是因为书里所讲的内容对于我来说基本上都已经掌握&#xff0c;所以看得也不…

三.搭建安全

三. 搭建安全拓展 涉及知识: 常见搭建平台脚本启用 域名IP目录解析安全问题 常见文件后缀解析对应安全 常见安全测试中的安全防护 WEB后门与用户及文件权限 访问网站 &#xff1a;ip/域名。 域名扫描只能扫描出来域名文件&#xff0c;而域名文件只是占服务器资源的一小…

简易任务调度实现--可用于windows服务/asp.net网站执行后台计算

在项目开发中经常会遇到后台定时任务调度执行计算的需求&#xff0c;为此我实现了一个简易的任务调度框架。 首先&#xff0c;我只实现的简易调度框架&#xff0c;原则上在同一时间点只执行一个任务&#xff0c;实现在每天指定的时间段内执行一次或固定频率&#xff08;只是相对…

网站快照被劫持怎么解决?

网站安全服务 网站安全是重中之重对此我们Sinesafe对于网站被挂马被黑的防范意识,如何判断网站被黑,网站被挂马,网站快照被劫持,网站快照被篡改,导致被百度网址安全中心提醒您&#xff1a;该页面可能存在违法信息。 网站服务是否稳定&#xff0c;对用户、站方和搜索引擎来说都非…

网站开发最好用的画折线图、饼状图、柱状图方法

一、FusionChartsFree 是我用过最方便&#xff0c;最有效的网页开发中画统计图方案。完全免费而且开源。因基于FLASH&#xff0c;所以支持ASP/JS/ASP.NET/PHP/JSP...等等等等。下载地址&#xff1a;http://www.fusioncharts.com/free/download/ 【只需要简单注册一下就可以down…

30多个国外电子商务网站欣赏

30多个设计精良的电子商务网站。国外知名的开源网店程序有Magento、OSCommerce、Zen-cart、opencart等&#xff0c;国内的 有Ecshop和ShopEX等&#xff0c;在遵守相关的授权协议的情况下&#xff0c;你可以免费的使用这些程序搭建一个网店。一个设计精良的电子商务网站显然将给…

Piwik 1.9 发布,网站访问统计系统

Piwik 1.9 发布了&#xff0c;该版本包含三个主要功能&#xff1a;网页过渡、网站搜索分析和更简单的地理位置配置&#xff0c;详情请看 Piwik 1.9 release blog post 同时发布的还有 Piwik Mobile 1.9 Piwik是一套基于PhpMySQL技术构建的开源网站访问统计系统&#xff0c;前身…

服务器里如何查杀网站后门文件

收到阿里云的短信提醒说是网站存在后门&#xff0c;webshell恶意通信行为&#xff0c;紧急的安全情况&#xff0c;我第一时间登录阿里云查看详情&#xff0c;点开云盾动态感知&#xff0c;查看了网站木马的详细路径以及webshell的特征&#xff0c;网站从来没有出现过这种情况&a…

社交系统ThinkSNS+在研发过程中,如何做到 Laravel 配置可以网站后台配置

什么是ThinkSNS ThinkSNS(简称TS)&#xff0c;一款全平台综合性社交系统&#xff0c;为国内外大中小企业和创业者提供社会化软件研发及技术解决方案。 本文分享下利用 Laravel 的 Bootstrapping 达到网站后台设置 laravel 配置。 需求场景 首先&#xff0c;ThinkSNS 作为一个用…

大型网站技术架构(八)网站的安全架构

2019独角兽企业重金招聘Python工程师标准>>> 从互联网诞生起&#xff0c;安全威胁就一直伴随着网站的发展&#xff0c;各种Web攻击和信息泄露也从未停止。常见的攻击手段有XSS攻击、SQL注入、CSRF、Session劫持等。 1、XSS攻击 XSS攻击即跨站点脚本攻击&#xff08;…

创业团队如何保护自己的网站安全?

今天在知乎上有人邀请我回答一个问题&#xff1a;创业团队如何在低成本的情况下保护自己的网站安全&#xff1f; 简略答一下。 一般来说&#xff0c;很多安全专家都会告诉你没有绝对的安全&#xff0c;如果黑客一定要长期盯着你的公司有针对性的渗透&#xff0c;很少有可以幸免…

55个漂亮的蓝色风格网站设计作品欣赏(下篇)

蓝色非常纯净&#xff0c;通常让人联想到海洋、天空、水、宇宙。纯净的蓝色表现出一种美丽、冷静、理智、安详与广阔。今天&#xff0c;本文收集了30个漂亮的蓝色风格的网站设计作品与大家分享&#xff0c;一起欣赏。 icebrrg powerset Birdie designchuchi.ch StrawPoll lucin…

【转】https,https的本地测试环境搭建,asp.net结合https的代码实现,http网站转换成https网站之后遇到的问题...

正需要这个&#xff0c;写的很好&#xff0c;就转过来了 转自&#xff1a; http://www.cnblogs.com/naniannayue/ 一&#xff1a;什么是https SSL&#xff08;Security Socket Layer&#xff09;全称是加密套接字协议层&#xff0c;它位于HTTP协议层和TCP协议层之间&#x…

如何让你的网站支持 IE9 Pinned Site (Part 2 - 实战)

该如何展示 IE9 Pinned Site 呢&#xff1f;我可以写一个新的应用&#xff0c;完全是为了展示 Pinned Site 的特性&#xff0c;但这样就像是为了实现这些特性而利用这些特性。所以我想还是升级一个现有的网站好了&#xff0c;这样更能说明 Pinned Site 是如何起到优化用户体验的…

Jsoup开发网站客户端第二篇,图片轮播,ScrollView兼容ListView

最近一段日子忙的焦头烂额&#xff0c;代码重构&#xff0c;新项目编码&#xff0c;导致jsoup开发网站客户端也没时间继续下去&#xff0c;只能利用晚上时间去研究了。今天实现美食网首页图片轮播效果&#xff0c;网站效果图跟Android客户端实现如图&#xff1a; 从浏览器开发者…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…