XSS-labs通关手册

XSS-labs通关手册

在做XSS-labs之前建议先了解相关XSS知识,比如我下面这篇博客:

XSS详解 - 三木森林 - 博客园 (cnblogs.com)

Level 1

​ 来到level1可以看到页面显示如下

​ 经观察发现,该页面会显示由我们GET请求发送的变量name。

​ 看一下页面前端源码。

​ 可以看到这是用户输入的name变量,那么我们就猜测该位置会不会有XSS漏洞呢,也就是反射型的XSS,执行我们自己输入的前端代码。

​ 那么我们就可以修改name处的值,输入我们的payload


http://192.168.235.130/xss-labs-master/level1.php?name=<script>alert("hack")</script>

​ 可以发现我们提交的用于弹窗的js代码顺利执行。

​ 那么这个时候我们看看其前端网页代码是什么,可以看到我们的name变脸原封不动地出现在前端源码中并被执行。

​ 说明源码是完全没有对GET请求到的name变量进行过滤,原封不动地发送到浏览器的,所以才会被执行。

Level 2

​ 进入到level2,界面如下所示

​ 其实在本界面中也有几个值得注意的点,第一是它是以GET请求发送的变量,第二是在本页面上也出现了我们发送的变量。

​ 我们看一眼前端源码

​ 可以看到该变量经过服务器处理后又返回到浏览器input标签中value值中和<h2></h2>标签中

​ 那么还是如上题中一样修改GET发送的变量。

​ 可以看到,想象中的结果并没有出现。所以我们看看前端源码

​ 发现<h2>部分的恶意代码应该是被重新编码了,所以不会执行,而<input>标签内则是被闭包了。

​ 所以我们可以在<input>标签处下手,利用闭包,输入我们的恶意代码。//用于注释后面那个">

​ 构造url


http://192.168.235.130/xss-labs-master/level2.php?keyword="> <script>alert("hack")</script> //

​ 完成得不错

Level 3

​ 输入字符test后,页面是这样的

​ 其源码又是这样的

​ 看起来与上题几乎无异,但是我们并不知晓在服务器端是否对我们输入的值有任何过滤转码抑或是转义等。

​ 所以我们姑且将level3构造的危险语句再传一次

​ 可以看到并没有达到我们的效果,页面将我们的输入原封不动地显示出来,并没有执行。

​ 右击页面,选择查看页面源码

​ 原来这两处都将<,>这样地敏感字符编码成了html字符实体。猜测服务器在这两处都用htmlspecialchars()函数进行了处理。

​ 那么如何才能执行弹窗成功地代码呢?

​ 这里可以通过<input>标签的一些特殊事件来执行js代码比如onfocus语句,这个时候我们只需要闭合value值后面那个引号即可。

​ 构造url语句,前面那个引号用于闭合value引用的那个引号',后面的%20则是url编码形式下的空格。


http://192.168.235.130/xss-labs-master/level3.php?keyword= 'onfocus=javascript:alert('xss')%20

​ 但是发现页面并无多大变化,这是因为onfocus事件是JavaScript中对象获得焦点时发生的事件,最简单的实例就是网页上的一个搜索框,当鼠标点击该输入框,输入框被选中可以输入内容时就是该输入框获得焦点的时刻,此时输入框就会触发onfocus事件,因此点击当前页面输入框即可。

​ 我们研究一下该页面的前端源码

​ 会发现value值确实是我们所预料的这样被闭合。

Level 4

​ 来到第四关,找页面提示提交搜索,界面如下

​ 我们还是用我们的弹窗代码试一下。

​ 查看其源码,发现其上面的变量被重新编码了,下面那个变量又被删除了<,>符号

​ 所以我们还是可以用level3的语句,因为那个并没有用到<符号,但是有一点微小的变动,那就是这里是双引号,而上一个是单引号


http://192.168.235.130/xss-labs-master/level4.php?keyword="onfocus=javascript:alert('xss')%20

​ 仍然需要我们点击。

Level 5

​ 在对本体的基础测试中可以发现

​ 搜索框内并未对符号<,>进行操作,而是对一些关键字进行过滤

​ 那么我们再换一个标签试一下


http://192.168.235.130/xss-labs-master/level5.php?keyword="> <a href=javascript:alert('hack') > hack</a>

<a>标签用于定义超链接,用于重一个页面链接到宁一个页面。<a>元素最重要的属性就是href属性,用于指定链接的目标,而且该标签还可以用于执行JavaScript语句。

​ 点击蓝标处即可链接到JavaScript语句完成XSS漏洞利用。

​ 这一题可以看看服务器端源代码

​ 可以看到在服务端的源码中,先对字符串转小写,再用字符串匹配对关键字进行替换。

Level 6

​ 输入我们的测试语句试一下,发现关键字都被替换,而且在本例中href也被作为黑名单给屏蔽,那么有没有可能没有对字符串转小写呢,我们测试一下。

​ 发现确实没有转小写。那么我们将上诉输入的任意字符串任意位置改为小写即可。


http://192.168.235.130/xss-labs-master/level6.php?keyword="> <Script>alert("hack")</script> //
http://192.168.235.130/xss-labs-master/level6.php?keyword="Onfocus=javascript:alert('xss')%20

​ xss成功。

​ 查看前端源码

Level 7

​ 还是用比较常规的语句测试一下


http://192.168.235.130/xss-labs-master/level7.php?keyword="> <Script>alert("hack")</script> //

​ 可以看到关键字被过滤了

​ 所以猜测应该是将相应关键字替换成空格,黑名单常用做法,所以我们可以双写绕过

​ 构造语句


192.168.235.130/xss-labs-master/level7.php?keyword="> <Sscriptcript>alert("hack")</sscriptcript> //

​ 可以,完成得不错

Level 8

​ 首先使用常规语句进行测试


http://192.168.235.130/xss-labs-master/level8.php?keyword="> <Script>alert("hack")</script> //&submit=添加友情链接

​ 可以看到对我们输入语句的关键字script进行添加符号干扰,并转为了小写,而且猜测还对其进行htmlspecialchars()函数。

​ 所以我们将计就计,对我们的输入进行转html实体编码。

​ 话又说回来,htmlspecialchars()是什么函数,也就是把预定义的字符转换为HTML实体

​ 语法:


htmlspecialchars(string,flags,character-set,double_encode)
参数描述
string 必需。规定要转换的字符串。
flags 可选。规定如何处理引号、无效的编码以及使用哪种文档类型。可用的引号类型:ENT_COMPAT - 默认。仅编码双引号。ENT_QUOTES - 编码双引号和单引号。ENT_NOQUOTES - 不编码任何引号。无效的编码:ENT_IGNORE - 忽略无效的编码,而不是让函数返回一个空的字符串。应尽量避免,因为这可能对安全性有影响。ENT_SUBSTITUTE - 把无效的编码替代成一个指定的带有 Unicode 替代字符 U+FFFD(UTF-8)或者 &#FFFD; 的字符,而不是返回一个空的字符串。ENT_DISALLOWED - 把指定文档类型中的无效代码点替代成 Unicode 替代字符 U+FFFD(UTF-8)或者 &#FFFD;。规定使用的文档类型的附加 flags:ENT_HTML401 - 默认。作为 HTML 4.01 处理代码。ENT_HTML5 - 作为 HTML 5 处理代码。ENT_XML1 - 作为 XML 1 处理代码。ENT_XHTML - 作为 XHTML 处理代码。
character-set 可选。一个规定了要使用的字符集的字符串。允许的值:UTF-8 - 默认。ASCII 兼容多字节的 8 位 UnicodeISO-8859-1 - 西欧ISO-8859-15 - 西欧(加入欧元符号 + ISO-8859-1 中丢失的法语和芬兰语字母)cp866 - DOS 专用 Cyrillic 字符集cp1251 - Windows 专用 Cyrillic 字符集cp1252 - Windows 专用西欧字符集KOI8-R - 俄语BIG5 - 繁体中文,主要在台湾使用GB2312 - 简体中文,国家标准字符集BIG5-HKSCS - 带香港扩展的 Big5Shift_JIS - 日语EUC-JP - 日语MacRoman - Mac 操作系统使用的字符集注释:在 PHP 5.4 之前的版本,无法被识别的字符集将被忽略并由 ISO-8859-1 替代。自 PHP 5.4 起,无法被识别的字符集将被忽略并由 UTF-8 替代。
double_encode 可选。布尔值,规定了是否编码已存在的 HTML 实体。TRUE - 默认。将对每个实体进行转换。FALSE - 不会对已存在的 HTML 实体进行编码。

​ 话说什么是html实体编码?在html中,某些字符其实是预留的,比如不能使用小于符号,大于符号等。

​ 而htmlspecialchars()函数一般情况下我猜测其是默认选项的,也就是不指定其他选项。所以规则是对于引号只编码双引号,且会对已存在的HTML实体进行编码,且默认字符集采用ASCII。那重点就来了,我们可以利用UTF编码来对黑名单规则进行绕过。

​ 所以构造语句,我们直接构造语句就可以了,因为下面有超链接,现在只需要绕过JavaScript的关键字黑名单,对JavaScript中的某一个或某一部分的编码用html实体形式的ascii码即可,加入仅仅转换r,则大小写形式的html实体都可以,也就是&#82和&#114


http://192.168.235.130/xss-labs-master/level8.php?keyword=javasc&#82;ipt:alert(1)

​ 但是输入这句话后发现页面

​ 猜测是&#符号会对后面的产生影响

​ 抓个包发现后面的字符都被注释掉了

​ 所以构造将&#url编码后的字符串。


http://192.168.235.130/xss-labs-master/level8.php?keyword=javasc%26%2382;ipt:alert(1)

​ 完成得不错

Level 9

​ 拿上一题的语句来测试,发现出了问题,出现如下字句

​ 查看一下源代码,发现多了一些东西


<?php
if(false===strpos($str7,'http://'))
{
echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
      }
else
{
echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>

​ 多了一个判断函数,用strpos()函数对输入语句进行判断。

​ strpos()用于查找指定字符串第一次出现的位置,返回整数型。也就是本题就是判断字符"http://"是否在字符串中出现。那我们在keyword变量的最后加上“http://”并将其注释掉即可。

​ 输入语句:


http://192.168.235.130/xss-labs-master/level9.php?keyword=javasc&#82;ipt:alert(1)//http://

​ 完成得不错

Level 10

​ 来到第十关,可以发现不再有搜索框,也不再有超链接可以给我们点了。常规语句也不行。

​ 查看其前端源代码,发现多了几个参数,那么我们猜测这几个参数会不会也会被服务器端给接收呢,抱着这样的想法,我们传参试一下。

​ 在浏览器输入以下语句


192.168.235.130/xss-labs-master/level10.php?keyword=well done&t_link=1&t_history=2&t_sort=3

​ 网页界面没什么变化,那我们查看一下源代码,查看其中的元素。

​ 发现服务器端接收了t_sort传来的参数,那么我们是不是可以利用这一点呢。

​ 来试一下常规注入语句


http://192.168.235.130/xss-labs-master/level10.php?keyword=well done&t_sort="> <script>alert("hack")</script>//

​ 发现尖括号都被过滤了,但是关键字就没有,那就使用一些能在尖括号内使用的函数。

​ 注入语句


192.168.235.130/xss-labs-master/level10.php?keyword=well done&t_sort=" onfocus=javascript:alert('xss')%20

​ 这个与函数不大行,不能触发,因为没有可以聚焦的组件。

​ 所以这个时候转换思路,我们改变其type,使其显露出来,再用onclick来触发。点击一下即可触发事件。


http://192.168.235.130/xss-labs-master/level10.php?keyword=1&t_sort=" type="text" onclick="alert('xss')

​ 查看其前端源码

​ 完成得不错

Level 11

​ 进入到本页面查看其前端源码,发现又多了一个参数

​ 其字段名为ref,联想到http报文中的referer字段。再刷新一次,发现果然,是会根据服务器接收的值动态变化的。

​ 所以本题目我们就从此处下手,构造语句,在hackbar将参数传入。


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

​ Execute

​ 点击框处,完成得不错

Level 12

​ 本题目界面

​ 查看其前端源码

​ 发现上一题的ref参数变为了ua参数,那HTTP报文中还有什么参数段?想起来了,是User Agent参数段。

​ 那我们就可以按照上一题的方式方法如法炮制了哟

​ 完成的不错!

Level 13

​ 界面如下

​ 查看其前端源代码:

​ 可以看到参数又变了,所以在hackbar里传入到cookie里

​ 完成得不错

Level 14

​ 来到这一关一片空白,跟网上有些博客也有点出入,所以咱就暂时跳过吧。

Level 15

​ 界面如下

​ 查看其前端源码,有了新发现

​ 发现了一个新属性,ng-include,那么这个东西有何作用?ng-include指令一般用于包含外部HTML文件,ng-include属性的值可以是一个表达式,返回一个文件名,但是默认情况下,包含的文件需要包含在同一域名下,也就是要调用同一域名下的其他网页

​ 那我们使用语句


192.168.235.130/xss-labs-master/level15.php?src='level1.php?name=<img src=1 onerror=alert(/bmfx/)>'

​ 给语句使本页面包含了同域名level1.php返回的HTML文件,并将name的字段传入,虽然尖括号被编码了,但是level1的name处是没有任何括号之内的东西的,所以可行。

​ 输入上述语句后,前端源码如下

​ 完成得不错

Level 16

​ 输入常规语句后如图所示

​ 其前端源码为

​ 发现尖括号没变,倒是/script还有空格也被干掉了。

​ 但是在html中是可以将%0a和%0d作为空格使用的

​ 因为尖括号没被干掉嘛我们就用<a>标签,因此我们构造语句


http://192.168.235.130/xss-labs-master/level16.php?keyword=<a%0dhref='javas%0acript:alert("hack")'>xss

​ 干得不错

Level 17

​ 来到该界面如下,以及url显示

​ 说实话我联想到之前做sql注入时的HTTP参数污染,那么这里有没有可能有相同的思路突破呢

​ 所以我们看其前端源码

​ 发现其两个变量使用=符号拼接的形式被加入到<embed>标签中,该标签用于一些插件如flash等的插入,那这就是一个突破口

​ 常规加尖括号的语句会被转为html实体字符,那就只有用事件触发来写,而且事件触发刚好是用等号来连接。

​ 所以我们在b的后边加入onclick(点击后触发)或则onmouseover(鼠标移动到上方触发)触发器来进行恶意语句利用

​ 使用语句


http://192.168.235.130/xss-labs-master/level17.php?arg01=a&arg02=b onmouseover=alert('hack')

​ 但是在火狐浏览器中,发现该组件根本不显示,完全不给我们事件触发的机会,无法利用了,那怎么办呢。浏览资料发现有些浏览器会将无用组件直接屏蔽,但有些不会。所以我们转到edge试一下。

​ 果然,出现了该组件

​ 将鼠标移动到该处,或者点击该处触发试一下。完成得不错

Level 18

​ 因为浏览器的差异,所以我们继续使用edge浏览器,页面如下

​ 发现还是会传入两个参数,查看其源代码,发现还是连个参数拼接

​ 那我们使用上一个题目中的语句试一下


http://192.168.235.130/xss-labs-master/level18.php?arg01=a&arg02=b onmouseover=alert('hack')

​ 竟然完成得不错,那跟上个题目并无多大区别啊,过滤规则也没加。

Level 19

​ 此题跟flash xss有关,但是flash用得是越来越少了,我就暂时不想再详细做了

​ 直接得出测试代码


http://192.168.235.130/xss-labs-master/level19.php?arg01=version&arg02=<a href="javascript:alert(/bmfx/)">bmfx</a>

 

posted @ 2022-02-10 17:15  三木森林  阅读(926)  评论(0编辑  收藏  举报