【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记

目录

一、跨站脚本攻击(XSS)

1.1 漏洞简介

1.2 XSS的攻击方式

1.2.1 反射型XSS

1.2.2 存储型XSS

1.2.3 DOM型XSS

1.3 XSS危害

1.4 XSS防御

二、xss-labs通关简记

Level1

Level2

Level3

Level4

Level5

Level6

Level7

Level8

Level9

Level10

Level11

Level12

Level13

Level14

Level15

Level16

Level17

Level18

Level19

Level20

三、补充知识

3.1 <>被html实体转义绕过方法(构造特殊事件绕过)

3.2 常见新建标签绕过代码

3.3 ng-include指令


一、跨站脚本攻击(XSS)

1.1 漏洞简介

        XSS又叫CSS(Cross Site Script)跨站脚本攻击,是指恶意攻击者往web页面中插入恶意代码,当用户浏览该网页时,嵌入其中的恶意代码会被执行,从而达到恶意的特殊目的。XSS属于被动式的攻击。
        XSS最大的特点就是能注入恶意的HTML/JavaScript代码到用户浏览的网页上,从而达到劫持用户会话的目的。由于HTML代码和客户端JavaScript脚本能在受害者主机上的浏览器任意执行,这样等同于完全控制了Web客户端的逻辑,在这个基础上,黑客或攻击者可以轻易地发动各种各样的攻击。

        xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。

常见的输出函数有: echo printf print print_r sprintf die var-dump var_export。

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第1张图片 

1.2 XSS的攻击方式

1.2.1 反射型XSS

        反射性XSS又称为非持久型XSS,攻击者需要通过诱使用户点击包含XSS攻击代码的恶意链接,然后用户浏览器执行恶意代码触发XSS漏洞。常见的就是在URL中构造,将恶意链接发送给目标用户。当用户访问该链接时候,会向服务器发起一个GET请求来提交带有恶意代码的链接。在浏览器中解析,一般情况下,反射性XSS存在于搜索框。通过url控制页面的输出。将参数传入服务器,再又服务器输出出来

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第2张图片

1.2.2 存储型XSS

        存储型XSS又称持久化型XSS,此类XSS的代码是存储在服务器数据库中的,如在个人信息或发表文章等地方,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie。

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第3张图片

1.2.3 DOM型XSS

        基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分,也就是web server不参与,仅仅涉及到浏览器的XSS。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。一般是浏览器前端代码进行处理。

        DOM型XSS主要是由客户端的脚本通过DOM动态地输出数据到页面,而不是依赖于将数据提交给服务器端,而从客户端获得DOM中的数据在本地执行。

1.3 XSS危害

(1)盗取管理员cookie

        窃取用户的cookie非法登录,使得入侵者具有恶意操纵后台数据的能力,包括读取、更改、添加、删除一些信息。

(2)网站挂马。

        先将恶意攻击代码嵌入到Web应用程序之中。当用户浏览该挂马页面时,用户的计算机会被植入木马。

(3)发送广告或者垃圾信息

        攻击者可以利用XSS漏洞植入广告,或者发送垃圾信息,严重影响到用户的正常使用。

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第4张图片

 

1.4 XSS防御

(1)对输入(和URL参数)进行过滤、转义编码等

(2)对输出进行编码

(3)在服务器端对 Cookie 设置了HttpOnly 属性,那么js脚本就不能读取到cookie

(4)使用XSS Filter。XSS Filter的作用是过滤用户(客户端)提交的有害信息,从而达到防范XSS攻击的效果。XSS Filter作为防御跨站攻击的主要手段之一,已经广泛应用在各类Web系统之中,包括现今的许多应用软件,例如IE8浏览器,通过加入 XSS Filter功能可以有效防范所有非持久型的XSS攻击。

二、xss-labs通关简记

Level1

绕过方法:直接注入

payload:

Level2

绕过方法:提前闭合绕过">闭合

原理分析:查看源代码,提前闭合value值即可,根据其形式,可用">闭合

payload:

">//

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第5张图片

Level3

绕过方法:提前闭合('闭合) + 特殊事件

原理分析:利用level2的payload,查看源代码发现"和<>被转换成了html实体,那么原有的js代码就不会被当做执行。此时就需要绕开使用新标签(即避免使用<>),同时还要提前闭合(用')

payload:

' onclick = 'javascript:alert(1)'//

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第6张图片

Level4

绕过方法:提前闭合("闭合) + 特殊事件

原理分析:将level3的单引号闭合换成双引号闭合即可

payload:

" onclick = 'javascript:alert(1)'//

Level5

绕过方法:提前闭合(">闭合) + 新建标签

原理分析:对其进行注入,发现过滤了script、onclick等关键词,并且双写,大小写也无法绕过。此时可以通过构造a标签绕过

payload:

">  xss //

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第7张图片

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第8张图片

Level6

 绕过方法:提前闭合(">闭合) + 新建标签 + 大小写

原理分析:利用level5的payload,发现在过滤了script、onclick等关键字的基础上又对href关键字进行过滤(使用“_”分开),此时可以尝试使用大小写绕过

payload:

">  xss //

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第9张图片

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第10张图片

Level7

绕过方法:提前闭合(">闭合) + 双写

原理分析:尝试注入">,发现script等关键词被过滤删除,尝试双写绕过,发现成功

payload:

">alert(1)

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第11张图片

Level8

绕过方法:Unicode编码(UnicodeASCII

原理分析:利用上一关payload进行测试,发现输入的语句被插入到标签的href属性中,并且对script等关键词进行了破坏使其失去原有含义,根据level6的经验,标签以及href属性已经存在,故只需要插入javascript:alert(1)语句即可,但script关键词被破坏,所以在此要对插入的语句进行Unicode编码绕过

payload:

javascript:alert(1)

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第12张图片

Level9

绕过方法:合法链接 + Unicode编码

原理分析:利用上一关的payload,发现提示链接不合法,因此这里要输入合法的链接。尝试输入合法链接,并在链接前后做手脚,发现可以通过验证(注意这里只能添加http协议的链接),但是发现其对script等关键词进行了破坏,因此对关键语句进行Unicode编码绕过。

payload:

javascript:alert(1)//http://www.baidu.com(链接前的//是为了防止跳转到链接网站)

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第13张图片

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第14张图片 

Level10

绕过方法:隐藏属性 + 特殊事件

原理分析:注入语句"<> script onclick进行观察,发现其对"和<>进行了转义,同时发现还有三个隐藏的input,设置其属性type使其不再隐藏(在url链接后分别添加以下语句,看哪一个可以显示输入框:t_link=" type='text'>、t_history=" type='text'>、t_sort=" type='text'>),找到可用的标签参数,经过尝试发现t_sort可用

payload:

t_sort=" type='text' onclick="alert(1)>

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第15张图片

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第16张图片 

Level11

绕过方法:Referer注入

原理分析:注入语句"<> script onclick进行观察,发现其对"和<>进行了转义,同时发现还有四个隐藏的input,构造语句对其进行检查(t_link=" type='text'>//&t_history=" type='text'>//&t_sort=" type='text'>//&t_ref=" type='text'>//),发现无回显,查看网页源码,发现t_sort接收了参数值,但是对双引号进行了html编码,导致无法闭合。分析数据报发现没有referer字段,此时进行抓包,构造并添加referer进行注入,发现可以成功对t_sort进行传参,实现绕过

payload:

referer:" type='text' onclick='javascript:alert(1)'>//

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第17张图片

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第18张图片 

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第19张图片

Level12

绕过方法:UA注入

原理分析:注入语句"<> script onclick进行观察,发现其对"和<>进行了转义,同时发现还有四个隐藏的input,并且发现t_ua参数的value字段为user-agent字段内容,所以在此尝试UA注入绕过

payload:

User-Agent:" type='text' onclick='javascript:alert(1)'>//

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第20张图片

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第21张图片

Level13

绕过方法:Cookie注入

原理分析:注入语句"<> script onclick进行观察,发现其对"和<>进行了转义,同时发现还有四个隐藏的input,并且发现t_cook参数的value字段为有内容提示,所以在此尝试cookie注入绕过,并且成功

payload:

Cookie:user=" type='text' onclick='javascript:alert(1)'>//

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第22张图片

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第23张图片

Level14

题目有问题

Level15

绕过方法:标签

原理分析:注入语句"<> script onclick进行观察,发现其对"和<>进行了转义编码,并且有一个ng-include指令,其相当于php的include函数。结果分析以及src=1.gif这一提示,可以尝试使用标签进行绕过

payload:

src='level1.php?name='

(这里我们不是单纯的去包含level1.php,而是在后面添加了name参数值。这就有点像是在访问了该参数值中地址之后把它响应在浏览器端的html文件给包含进来的意思)

Level16

绕过方法:回车 + url编码 + 无需闭合的标签

原理分析:注入语句" script onclick进行观察,发现其将空格、/、script都替换成了 ,则经典script语句以及需要闭合的标签(需要/的,如)无法使用,因为是center标签所以无法使用特殊事件,所以综合考虑尝试插入无需闭合的标签,如等,其中空格可以使用回车绕过,回车的url编码为%0a

payload:

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第24张图片

 【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第25张图片

Level17

绕过方法:标签 + 特殊事件

原理分析:注入语句" script onclick进行观察,发现引号和<>都被过滤编码,发现有一个新的标签,查阅得知该标签就是引入一个swf文件到浏览器端,并且它的src属性值没有添加引号,所以不用闭合,在此使用特殊事件即可(注:在这里使用onclick时点击出错,可能是设置问题,换其他时间即可成功)

payload:

123%20onmouseover=alert(%27xss%27)

【渗透测试】跨站脚本攻击(XSS):xss-labs通关简记_第26张图片

Level18

同level17

Level19

Level20

Level19Level20均为flash xss,需要反编译

三、补充知识

3.1 <>被html实体转义绕过方法(构造特殊事件绕过)

(1)onclick = 'javascript:alert(1)':点击元素(即输入框)时界面触发执行js代码

(2)onfocus = 'javascript:alert(1)':当input框获取焦点时执行js代码

(3)onmouseup = 'javascript:alert(1)':当点击输入框并松开鼠标时触发执行js代码

(4)onblur = 'javascript:alert(1)':点击输入框并离开时触发执行js代码

(5)onmouseover= 'javascript:alert(1)':鼠标移动到该标签时触发

注:以上常见特殊事件js代码还可写成如下形式:onclick =alert(1)

3.2 常见新建标签绕过代码

(1)

xss

(2) (3)
(5):页面载入完毕后执行js代码 (6):图片加载失败触发 (7)