漏洞重温之XSS(上)
漏洞简介
跨站脚本攻击(XSS)是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览页面之时,嵌入web网页中的script代码会被执行,从而达到恶意攻击用户的目的。
XSS漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
常见的输出函数有:echo printf print print_r sprintf die var-dump var_export
xss漏洞最常见的验证方法为先插入一段恶意代码,完成在网站上的弹窗操作,利用恶意代码攻击自己,如果再重复访问网页时发现弹窗,则可以证明该位置存在xss漏洞。
xss漏洞的危害:
(1)窃取管理员账号或cookie,入侵者可以冒充管理员的身份登录后台,使入侵者具有恶意操控后台数据的能力,包括增删改查信息等。
(2)窃取用户的个人信息或者登录账号,对网站用户的安全产生巨大威胁。例如冒充用户身份进行各种操作。
(3)网站挂马。先将恶意攻击代码嵌入到web应用程序之中。当用户浏览该挂马页面时,用户的计算机会被植入木马。
(4)发送广告或垃圾信息。攻击者可以利用xss漏洞植入广告,或者发送垃圾信息,严重影响到用户的正常使用。
常见的xss漏洞分为存储型 反射型、DOM型三种。
(1)反射型xss
用户在请求某条URL地址的地时候,会携带一部分数据。当客户端进行访问某条连接时,攻击者可以将恶意代码植入到url,如果服务端未对url携带的参数做判断或者过滤处理,直接返回相应页面,那么xss攻击代码就会一起被传输到用户的浏览器,从而出发反射型xss。例如,当用户进行搜索时,返回结果通常会包括用户原始的搜索内容,如果攻击者精心构造包含xss恶意代码的链接,诱导用户点击并成功执行后,用户的信息就可以被窃取,甚至可以模仿用户进行一些操作。
反射型xss不会永久存储用户的数据;仅发生在用户的一次访问过程之后。这个过程就像一次反射,因此得名反射型xss。反射型xss的触发条件比较苛刻,需要攻击者想法设法的引导用户点击链接,但产生的危害不容忽视。
(2)存储型xss
存储型xss又叫持久性。一般而言,它是三种xss里危害最大的一种。此类型的xss漏洞是犹豫而已攻击代码被持久化保存到服务器上,然后被显示到html页面之中。这类漏洞经常出现在用户评论的页面,攻击者精心构造xss代码,保存到数据库中,当其他用户再次访问这个页面时,就会触发并执行恶意的xss代码,从而窃取用户的敏感信息。
(3)DOM型xss
DOM-basedXSS漏洞是基于文档对象模型(Document Object Model)的一种漏洞。这种xss与反射型xss、存储型xss在原理上有本质区别,它的攻击代码并不需要服务器解析响应,触发xss靠的是浏览器端的DOM解析。客户端上的javascript脚本可以访问浏览器的DOM并修改页面内容,不依赖服务器的数据,直接从浏览器端获取数据并执行。
XSS挑战之旅level1-level7
level1
进入主页,发现只有一张图片,没有任何文本框可以尝试插入。

但发现网站url用name参数传参,并且更改name会改变页面显示。

直接尝试在name参数后面写入测试代码
<script>alert(1)</script>

第一关,通过

level2
第二关开头,发现了xss最熟悉的文本框,本着最基本的见框就插原则,使用测试代码尝试。
<script>alert(1)</script>

根据网页反馈,发现代码并没有被执行。

右键,点击查看源码,找问题所在。

可以看到,我们插入的代码在两个双引号中间,并当做字符串传送,故没有完成他本来应该完成的操作。
尝试闭合前面的单引号,代码如下:
"><script>alert(1)</script>

第二关,通关。

level3
第三关,发现插入框,使用测试代码测试。
<script>alert(1)</script>

根据网页反馈,发现插入代码并没有被执行

右键查看网页源码,发现网站过滤了尖括号,显然script、img这些常用标签无法使用。

尝试使用onclick事件进行xss攻击。
使用单引号闭合value
' onclick=alert(1)

尝试触发事件,但代码却依然没有执行,猜测代码出现问题。
右键查看网页源码

发现代码后面多了一个单引号,引起代码出错。
尝试在代码后面多写一个单引号闭合后方代码。

第三关,通关。
level4
第四关开始,研习传统,使用测试代码测试。
PS:
测试代码的作用:
1.简单直接的检测。如果网站没有设置对xss的防备,可以直接通过代码检测出问题所在。
2.查看网站的防御机制如何。如第三关,第四关,网站通过过滤尖括号来阻止xss攻击,在攻击没有成功的时候,我们可以通过查看网页源码,来查看具体哪个地方出现问题。

发现代码没有被执行,右键查看网页源码。

发现该源码和第四关区别仅仅在于一个使用单引号,一个使用双引号。
废话不多,直接上代码。
" onclick=alert(1) "

第四关,通关。
level5
第五关开局,发现文本框,上测试代码。

发现插入代码未执行,右键查看网站源码。

发现该处需要先闭合前方的value,同时,注意到script标签被转义,变成了scr_ipt,导致该标签不可用。
换测试代码,注意闭合前方。
"><img src=a onerror=alert(1)>

从未加载的图片位置,可以看出来,代码已经成功执行了,但是却没有弹窗,说明代码某处出现问题,导致无法正常运行。
右键查看源代码,找寻问题所在。

问题发现,在我们插入的代码后方,多了一个">,因为这个,才导致我们的代码没有正常执行。
尝试闭合后方尖括号。

发现我们希望出现的弹窗依然没有出现,右键查看网页源码。

从这个地方,可以看出来,问题的确出在最后的尖括号上,正常情况,后方尖括号是可以被闭合的,但是现在却无法完成。
尝试不闭合,直接将后方注释。
PS:这里这么尝试的原因是,代码前方并没有出现任何问题,只是后面多了一个尖括号,如果可以将后面代码注释掉,使其不会影响代码正常运行,可能会达到预期目的。

尝试过后,发现依然无法执行,猜测后方尖括号可能无法被注释等操作,可以利用到尖括号和双引号的有之前提到的onclick事件。

事件依然没有被执行,右键查看源码。

发现onclick事件被过滤,导致无法成功执行。
尝试使用a标签来完成xss攻击。
代码如下
"><a href="javascript:alert(1)

第五关,通关。
level6
第六关,依然先对文本框进行xss攻击。

发现网站转义了script标签,猜测可能也转义了其他常见标签和事件,直接采用a标签进行xss攻击尝试。

代码没有达到预期效果,右键查看网站源码。

发现网站转义了href属性,尝试使用大小写来绕过。

第六关,通关。
level7
第七关,开局使用测试代码进行第一次攻击。

发现script标签被过滤。
经过测试script、src、on等关键字被过滤,显然无法再使用script标签、img标签,和a标签来完成目的。
尝试使用单词嵌套来进行攻击。
" oonnclick=alert(1) "

第七关,通关。
漏洞重温之XSS(上)的更多相关文章
- 漏洞重温之XSS(中)
漏洞重温之XSS(中) XSS挑战之旅 level8-level13 level8 第八关开局,发现button从搜索变成了友情链接,发现该页面情况跟前面不同,先右键查看代码,再进行尝试. 上测试代码 ...
- 漏洞重温之XSS(下)
XSS总结 XSS的可利用方式 1.在登录后才可以访问的页面插入xss代码,诱惑用户访问,便可直接偷取用户cookie,达到窃取用户身份信息的目的. 2.修改昵称,或个人身份信息.如果别的用户在登录状 ...
- 漏洞重温之文件上传(FUZZ)
文件上传FUZZ思路通关upload-labs Pass-16 黑盒阶段 进入第十六关,首先我们能看到,该页面的上传点为图片上传. 首先,先把对方想的简单一点,这里虽然是上传图片,但是可能只是前端js ...
- [80Sec]深掘XSS漏洞场景之XSS Rootkit
顶80SEC的牛. 深掘XSS漏洞场景之XSS Rootkit[完整修订版] EMail: rayh4c#80sec.com Site: http://www.80sec.com Date: 2011 ...
- 漏洞重温之sql注入(五)
漏洞重温之sql注入(五) sqli-labs通关之旅 填坑来了! Less-17 首先,17关,我们先查看一下页面,发现网页正中间是一个登录框. 显然,该关卡的注入应该为post型. 直接查看源码. ...
- 漏洞重温之sql注入(六)
漏洞重温之sql注入(六) sqli-labs通关之旅 Less-26 进入第26关,首先我们可以从网页的提示看出本关是get型注入. 我们给页面添加上id参数后直接去查看源码. 需要关注的东西我已经 ...
- Web安全学习笔记 XSS上
Web安全学习笔记 XSS上 繁枝插云欣 --ICML8 XSS的分类和基本认识 XSS的危害 同源策略的基本认识 一.XSS的分类和基本认识 1. 简介 XSS全称为Cross Site Scrip ...
- WordPress Checkout插件跨站脚本漏洞和任意文件上传漏洞
漏洞名称: WordPress Checkout插件跨站脚本漏洞和任意文件上传漏洞 CNNVD编号: CNNVD-201311-015 发布时间: 2013-11-04 更新时间: 2013-11-0 ...
- 漏洞重温之sql注入(七)
漏洞重温之sql注入(七) sqli-labs通关之旅 Less-31 首先,进入31关,我们先添加上id参数. 然后,我们查看源码. 我们门可以看到,index页面源码其实很简单,网页也没有对我们的 ...
随机推荐
- 服务注册与发现【Eureka】- Eureka简介
什么是服务治理 SpringCloud 封装了 Netflix 公司开发的 Eureka 模块来 实现服务治理. 在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所 ...
- 年薪50W京东软件测试工程师的成长路——我们都曾一样迷茫
这两天和朋友谈到软件测试的发展,其实软件测试已经在不知不觉中发生了非常大的改变,前几年的软件测试行业还是一个风口,随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业,目前软件测试行业“缺口”已经 ...
- 《闲扯Redis六》Redis五种数据类型之Hash型
一.前言 Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要. ...
- windows 下部署 .netcore 到 iis
园子里已经有许多 ASP.NET Core 部署的相关文章,不同环境有不同的配置方法,建议同鞋们在动手之前也看看官方说明,做到心中有数.我在实践的时候用的是 win8.1 + .net core 3 ...
- C++中string类型的find 函数
(去膜拜大佬的博客园,结果被自己菜到自闭) find string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos. 对其返回的下标position ...
- PHP date_parse() 函数
------------恢复内容开始------------ 实例 返回一个包含指定日期的详细信息的关联数组: <?phpprint_r(date_parse("2013-05-01 ...
- PHP imagecharup - 垂直地画一个字符
imagecharup — 垂直地画一个字符.高佣联盟 www.cgewang.com 语法 bool imagecharup ( resource $image , int $font , int ...
- PHP connection_aborted() 函数
实例 创建一个函数(check_abort()),在客户机终止脚本时写入一条日志消息: <?phpfunction check_abort(){if (connection_aborted()) ...
- fpdf fpdi 操作pdf文件 写入中文汉字
今天给公司做一个线上合同签约功能,用户签约后 生成pdf版的文件 .网上搜了搜大概都是用fpdf进行操作的 , 通过fpdi 可以进行读取pdf模板. 在通过继承fpdf 操作现有的pdf文档 ...
- luogu 3188 [HNOI2007]梦幻岛宝珠
LINK:梦幻岛宝珠 时隔多日 我再次挑战这道题.还是以失败告终. 我觉得这一道背包真的有点难度 这是一个数量较少 但是价值和体积较大的背包. 通常的01背包 要不就是体积小 要么是价值小 但这道题给 ...