xss-labs靶场通关指南

这里来记录一下自己通关xss-labs靶场的过程,并且总结了一些相关绕过思路和标签的使用,可以移步XSS攻击常用标签、绕过思路,这里关于xss的基础知识就不过多赘述了。

Level-01

第一关,ctrl+u查看网站源码,get传参的值回显在HTML中

第一关比较简单,应该是没有过滤的,直接插入JavaScript代码

payload:

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

成功弹窗,此处还有很多种语句可以触发alert事件XSS攻击常用标签、绕过思路-优快云博客

看一下网站源码,接收到get传的值后直接插入在了HTML文档中回显出来,没有过滤用户输入

接收到参数后的网站源码如下,用户输入可以被当作html标签执行,导致xss

Level-02

首先,ctrl+u查看源码,发现此处有两个位置回显参数

先试试<script>alert()</script>,发现并没有弹窗,查看一下源码

发现第一处位置特殊符号“<"、">”被HTML实体化转义了,而第二处没有被转义,因此,可以利用第二处构造xss语句,此处我们需要先使value闭合。接着插入标签,payload如下

?keyword="> <script>alert()</script>

成功弹窗,看一下源码,我们的输入被当作单独的<script>脚本运行了,触发弹窗

看一下服务端源码

htmlspecialchars()函数是将特殊符号进行html实体化转义,包括“&”、“<”、“>”、双引号(“)和单引号(‘)

重点:闭合双引号,构造新标签

Level-03

先输入111查看一下参数回显的位置,ctrl+u查看源码,两处位置回显

上代码试一下<script>alert()</script>

此处两个位置均有htmlspecialchars()函数实体化转义特殊符号,用不了”<>“,此处可以尝试利用页面事件去触发,先上payload

?keyword=' onfocus=alert() autofocus '

成功弹窗,onfocus事件就是当元素成为焦点时,此处用在input元素上,意味着当鼠标点击输入框时就触发,而autofocus是自动获得焦点,从而提交完就自动弹窗了

来看一下网站的源码,此处需要闭合单引号,和上一关类似,但此处的空格不可省略,不然autofocus函数不起作用,需要我们手动点击输入框才可以触发事件

服务端源码是双处过滤

重点:当<>被过滤时,利用页面事件绕过,以及闭合引号

Level-04

查看网站源码,两处回显

发现和前两关形式相似,试试先上事件,看看能不能触发,此处需要闭合双引号,payload如下

?keyword=" onfocus=alert() autofocus "

成功弹窗,查看一下服务端源码,先使用str_replace()函数删除了<>符号,接着在第一处回显位置进行实体化转义,但第二处未过滤,可以利用页面事件绕过

重点:页面事件使用,闭合引号

Level-05

先查看一下源码,依旧两个回显位置

试试最简单的语句<script>alert()</script>

发现<script>被替换成了<scr_ipt>,可以再试试页面事件看看可不可以

" onfocus=alert() autofocus "

on也被过滤掉了,不能利用常见的事件来触发了,再试试大小写

" OnFocus=alert() autofocus "

这里大写字母被转化为了小写,大小写也不可以,看一下服务端源码

发现这里有小写转换函数,并且过滤掉了<script>标签和on事件,这里可以使用<a>标签来绕过

<a href=javascript:alert()>link</a>
/*<a>标签的意思就是点击link就会跳转到href指向的这个链接上,不过此处利用了JavaScript的伪协议,
执行js代码*/

此处的payload还需要闭合前面的双引号和尖括号,故为:

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

点击link后就会成功触发弹窗

重点:a href标签的使用,闭合尖括号,插入标签

Level-06

先查看源码

先看看过滤了什么,输入这段语句

" <script><a href=javascript:alert()> onload

发现<script>、on、href都被过滤了,试试大小写,

" <Script><a Href=javascript:alert()> oNload

发现并没有过滤大小写,因此可以使用大小写来绕过,payload如下:

" Onfocus=alert() autofocus() "

成功弹窗,这里看一下服务端源码

过滤掉了<script>、on、src、data、href,但是没有大小写转换,可以使用大小写绕过

重点:大小写绕过思路

Level-07

先查看一下源码,两处回显

先看看过滤了哪些字符,输入

" <Script><a Href=javascript:alert()> oNload

发现我们传入的Script、Href、oN被转为了小写,然后被删除了,我们可以尝试双写绕过,比如我们输入oonn,当服务端检测到中间的on时,会给删除掉,但是删完还是on

payload

" oonnfocus=alert() autofocus "

看一下服务端源码,将输入转为小写,接着用空格替换关键字符,也就是删除,过滤掉了script、on、src、data、href

这里还可以使用<img>标签和<iframe>标签绕过,参考常用标签、绕过思路

重点:双拼写绕过,标签的灵活运用

Level-08

查看一下源码,两处回显,分别在value值中和href属性中

先输入测试语句看看过滤了什么

" <Script><a Href=javascript:alert()> oNload Src Data

script、href、on、data、“都被过滤掉了,也是够狠的,过滤了这么多,但是此处有一个小知识,就是href的隐藏属性会自动解码Unicode

所以我们可以将过滤掉的字符通过Unicode编码来绕过

javascript:alert()编码结果&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;

这里可以替换单个字母也可以整个替换,效果是一样的,我这里是将s替换成了&#115;,点击友情链接后就会弹窗

看一下服务端的源码,也是过滤了很多,但忽略了此处用户输入会在href属性中,而href会自动解码Unicode属性,导致漏洞的产生

重点:href属性自动解码Unicode属性

Level-09

查看一下源码,和上一关一样,用户输入回显在href属性中

输入测试语句,看看过滤了什么

" <Script><a Href=javascript:alert()> oNload Src Data

我们的输入根本没有回显,而是显示了”您的链接不合法?有没有!“,这里查看一下服务端源码

这里上面部分的过滤和上一关一样,但是后半段过滤的意思是如果$str没有"http://"字符串,就返回”您的链接不合法?有没有!“,strpos函数的返回值要么就是数字要么就是布尔值false,所以我们的输入里面得有http://

我们这里可以先插入http://,再使用注释符注释掉,payload如下

java&#115;cript:alert() /* http:// */

成功弹窗

重点:当服务端规定我们输入应包含什么时,我们可以插入指定内容,再使用注释符注释掉即可

Level-10

先查看一下源码,发现我们输入只插入到了h2标签中,还有三个隐藏的输入框

先输入测试语句看一下吧,看看什么情况

" <Script><a Href=javascript:alert()> oNload Src Data;

这里有html实体化转义尖括号,但是没有过滤其他关键字,不过h2标签肯定是触发不了弹窗的,解题点就在下面三个输入框,他们三个接收的参数的值应该会回显在value值中,但是也不知道服务端接收参数的方式是GET型还是POST型,我们先试试GET型

?t_link=" <Script><a Href=javascript:alert()> oNload Src Data;
?t_history=" <Script><a Href=javascript:alert()> oNload Src Data;
?t_sort=" <Script><a Href=javascript:alert()> oNload Src Data;

这里前两个参数输入后都没有结果,下面是第三个参数t_sort参数输入后的结果,发现回显了,那么就可以利用这个参数来实现xss

由于这个是input元素,但是type是hidden,被隐藏了,所以我们需要修改type属性,使其出现在html页面中,这里因为尖括号被实体化转义了,所以不能插入标签,我们可以利用页面事件来触发,payload如下

t_sort=" onfocus=alert() autofocus type="text" "

看一下服务端源码吧,以GET型接收t_sort参数的值并过滤掉尖括号

重点:依次判断参数回显,插入type="text"覆盖type="hidden"使输入框显示

Level-11

查看一下源码,多了一个t_ref参数,联想到http包中的referer参数,由哪个地址跳转,这里显示的就是从第十关跳转

这里的解题点应该是t_ref,不过我们还是验证一下前三个参数

GET型

?t_link=" <Script><a Href=javascript:alert()> oNload Src Data;
?t_history=" <Script><a Href=javascript:alert()> oNload Src Data;

?t_sort=" <Script><a Href=javascript:alert()> oNload Src Data;

GET型前两个参数传参无回显,第三个参数回显处对特殊符号进行了html实体化转义,无法利用

再试试POST

一个回显都没有,只能尝试t_ref,我们尝试抓包修改一下referer值

我们的输入回显在了t_ref参数的value值上,后面就和上一个同思路,payload如下:

" onfocus=alert() autofocus type="text" "

重点:HTTP头传值

Level-12

查看一下源码,发现这里是user_agent的值,那么就和上一关思路一样,抓包修改UA值

抓包修改先看一下过滤了什么,输入

" <Script><a Href=javascript:alert()> oNload Src Data;

只过滤掉了尖括号,我们可以利用事件绕过,payload同上一关,只是这次是在UA处修改

" onfocus=alert() autofocus type="text" "

重点:User-Agent头传值

Level-13

查看一下源码,这里多了t_cook参数,提示是cookie

这关应该和之前两关差不多,直接上payload试试,我们需要修改的位置是cookie

" onfocus=alert() autofocus type="text" "

重点:cookie传值

Level-14

这一关由于<iframe>标签内嵌的网站已经挂掉了,这关不是很懂,详细可以参考大佬的文章

xss-labs靶场-第十四关 iframe和exif xss漏洞 - FreeBuf网络安全行业门户

Level-15

查看一下源码,有两处需要关注的点,一是url中src可以指向文件,二是ng-include表示文件包含的意思,暗示这一关可以利用文件包含来过关

我们先看看过滤了什么,上测试语句:

" <Script><a Href=javascript:alert()> oNload Src Data;

可以发现有实体化转义特殊符号,试着包含第一关的文件

?src='\level1.php'

我们可以使第一关存在弹窗,然后让这一关包含存在弹窗的第一关,这样第一关加载完就会触发弹窗,payload如下:

?src='\level1.php?name=<input type="text" onfocus=alert() autofocus>'

这里不可以使用<script>标签,因为它没有在浏览器执行,只是在服务端包含了代码,没有把js输出到浏览器,不可以弹窗,这里需要使用<img>、<input>、<p>、<a>标签等与用户交互的标签。

重点:ng-include为文件包含的意思,不能直接包含js代码

Level-16

查看一下源码,输入被插入到了<center>标签中

试试过滤了什么

" '<Script><a Href=javascript:alert()> oNload Src Data;

发现这里先将输入转为小写,再过滤掉script和空格

这里因为我们的输入是GET型,在url中,回车可以代替空格,可以尝试对回车进行url编码,回车的url编码为%0A,payload如下

<img%0asrc=1%0aerror=alert()>

这里还可以用<svg>、<input>等标签

看一下服务端源码

重点:用%0a绕过过滤空格

Level-17

查看一下源码,这里框出的部分原本是xsf01.swf,该文件是FLASH插件支持的文件,目前很多浏览器已经不再支持FLASH插件,不会显示图片,这里建议修改服务端源码

这里的<embed>标签就是内嵌窗口的意思,现在更推荐使用<iframe>、<audio>、<img>等标签,这里有两个参数arg01和arg02,这里先看看过滤了哪些字符

" '<Script><a Href=javascript:alert()> oNload Src Data;

这里有实体化转义双引号和尖括号,但没有过滤关键字,上payload

?arg01=a&arg02=a onclick=alert()

之后点击一下图片就可以弹窗了

重点:熟悉页面事件的使用

Level-18

查看一下源码,同上一关修改服务端源码,将xsf02.swf修改为index.png

看看过滤了什么

" '<Script><a Href=javascript:alert()> oNload Src Data;

实体化转义,过滤尖括号和双引号,和上一关很像,试试上一关的payload

?arg01=a&arg02=a onclick=alert()

成功弹窗,和上一关没什么差别

重点:页面事件利用

Level-19

查看一下源码,这关如果不使用支持FLASH插件的浏览器貌似做不出来(看完大佬的bp后),但是我也不下去再下一个浏览器,我用的是火狐浏览器,所以这里我安装了火狐的一个插件,可以下载这个插件。

页面加载后就是这个样子

查看一下源码

这里发现这个src里面还有一个双引号,这里想让双引号闭合,尝试了一下?arg02=" onmouseup=alert(),但是服务端还有一个实体化转义,闭合不了

这关实在是想不到怎么解,参考大佬的wpXSS-labs Level 19 Flash XSS_xsslabs 19-优快云博客

payload

?arg01=version&arg02=<a href="javascript:alert()">here</a>

之后点击here就可以触发弹窗了

重点:Flash xss

Level-20

查看一下源码

同样有双引号,无法闭合,没招了,参考大佬wpXSS-labs Level 20 Flash XSS_xss-labs level20-优快云博客

payload

?arg01=id&arg02=xss\"))}catch(e){alert(1)}//%26width=123%26height=123

这里可能是插件问题,输入payload后还是没有弹窗,所以我又去下了个支持flash的浏览器CefFlashBrowser,输入payload后就弹窗了,也是通关了,不容易啊,大佬的wp就是香。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Forfun_tt

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

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

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

打赏作者

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

抵扣说明:

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

余额充值