漏洞重温之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) "

第七关,通关。

posted @ 2020-08-05 03:00  小明-o3rr0r  阅读(604)  评论(0编辑  收藏  举报