做老师一些好的网站,打电话来说做网站_然后答应了,装饰公司设计用什么软件,长沙网站制作哪xss系列往期文章#xff1a;
初识XSS漏洞-CSDN博客
利用XSS漏洞打cookie-CSDN博客
目录
第一关
第二关
第三关
第四关
第五关
第六关
第七关
第八关
第九关
第十关
第十一关
第十二关
第十三关
第十四关
第十五关
第十六关
第十七关
第十八关
第十九关 …xss系列往期文章
初识XSS漏洞-CSDN博客
利用XSS漏洞打cookie-CSDN博客
目录
第一关
第二关
第三关
第四关
第五关
第六关
第七关
第八关
第九关
第十关
第十一关
第十二关
第十三关
第十四关
第十五关
第十六关
第十七关
第十八关
第十九关
第二十关 相信学习过xss的小伙伴们对 xss-labs这个靶场应该已经很熟悉了再看看下面这张图片是不是记忆又深刻了也有很多人都对这个靶场写过通关博客在本篇中我也会使用练习学习的方式来通关这个靶场那么下面我们开始 还没有该靶场的小伙伴直接到github下载xss 跨站漏洞平台 (github.com)
第一关 进入第一关我们可以看到这里给名为name的参数传入了一个值那么我们就很容易想到从这里入手直接尝试传入弹窗代码
成功弹窗果然就像那个图片上说的一样its easy
第二关 来到第二关还是一样可以看到给keyword传入了一个值那么我们试试第一关的方式直接传入弹窗代码 可以看到这里输入的弹窗代码并没有生效说明对我们的输入可以做了限制那就直接开启上帝模式我来看看后端代码 原来传入的参数被和包裹住了那么我们闭合双引号和尖括号然后插入弹窗代码试试看
成功的弹窗
第三关 可以看到第三关还是一样有一个我们可控的参数那么来试试传入弹窗代码 传入了上一关的代码还是没有弹窗那么来看看后端代码
?php
ini_set(display_errors, 0);
$str $_GET[keyword];
echo h2 aligncenter没有找到和.htmlspecialchars($str).相关的结果./h2.center
form actionlevel3.php methodGET
input namekeyword value.htmlspecialchars($str).
input typesubmit namesubmit value搜索 /
/form
/center;
?
这里看到我们输入的值中的 字符被过滤了
但是需要注意的是这里虽然看似输入的值都被转义了,但是因为htmlspecialchars后面只有一个参数
并没有对‘做转义处理所以我们还是可以使用level 2 的方式进行bypass
服务端安全的写法应该是htmlspecialchars($str,ENT_QUOTES)
那么我们来先闭合然后插入没有那些 的on事件构成的弹窗代码试试
a onclickalert(1)
成功弹窗
第四关
现在来到了第四关这次我们就直接来看看后端代码吧相信前面的方法应该也是无法生效了
?php
ini_set(display_errors, 0);
$str $_GET[keyword];
$str2str_replace(,,$str); //这里将尖括号过滤了
$str3str_replace(,,$str2); //这里将尖括号过滤了
echo h2 aligncenter没有找到和.htmlspecialchars($str).相关的结果./h2.center
form actionlevel4.php methodGET
input namekeyword value.$str3.
input typesubmit namesubmit value搜索 /
/form
/center;
? 这里看起来就只是过滤了并没有什么特殊的那我们尝试闭合后进行弹窗
哇没想到这一关竟然如此简单直接闭合插入代码闭合就成功弹窗了
第五关
来到了第五关我们从前端代码中看到首先需要闭合来逃出限制这里稳妥起见也不使用 来试试进行弹窗 可以看到这里对我们输入的onclick关键字进行了破坏那么我们再试试onfous 但是很遗憾这个关键字也被破坏了我还尝试了双写和大小写绕过都没有成功
这里我们可以使用a链接伪协议的方式来进行弹窗
aa%20hrefjavascript:alert(1)123/a 第六关
来到了第六关我们还是从前端代码中看到首先需要闭合来逃出限制这里稳妥起见也不使用 来试试进行弹窗 这里想试试onclick的但是很明显它被破坏了
那么再试试a标签 但是还是没有成功这里的href关键字也被过滤了无法弹窗那就难搞咯
这时我在尝试大小写href后再进行弹窗后尽然就成功了 第七关
来到了第六关我们还是从前端代码中看到首先需要闭合来逃出限制这里稳妥起见也不使用 来试试进行弹窗那就先试用最原始的没有的代码来进行弹窗 这里就比较残忍了我们输入的on直接没有了这就表示所有的事件都无法使用了不过没关系我们还有a标签使用a标签试着弹窗 可以看到我输入的javascript只剩下了java了直接将script过滤掉了我试着使用大小写和双写绕过。发现这两个都是无法生效的
但是当我去试着双写onclick来饶过限制时居然成功弹窗了 第八关
来到了第八关这一关看起来是有一点不同的我直接尝试弹窗从前端页面中可以看到传入的代码被插入到了友情链接中并且href和Javascript关键字都被破坏了 后面我尝试对被破坏的字符串进行了大小写和双写尝试绕过都以失败告终了
这里我参考了别人的解决方案说是可以进行编码后绕过
现在尝试将javascript这个关键字整个进行编码再尝试绕过
#x006a;#x0061;#x0076;#x0061;#x0073;#x0063;#x0072;#x0069;#x0070;#x0074;:alert(1)
这时前端页面显示的a链接中的href已经有了完整的:javascript:alert(1) 现在点击了友情提示按钮就可以成功绕过
第九关
来到了第九关又是添加一个友情链接那么直接来吧使用上一关的代码看看有什么区别 这里并没有显示我插入大代码这是怎么回事呢
既然它提示我们输入的url不合法那么我们试着输入一个合法的url看看有什么区别 呕吼还真的添加进去了并且也可以正常点击那么我们可以利用这一点把我们编码后的弹窗代码加到正常的http://后面看看是否可以弹窗 确实加入进了但是点击后却没有弹窗说明还是不对也是并没有那样的一个URL
我试着将http://放到后面给它注释了看看是否可以添加进入
#106;#97;#118;#97;#115;#99;#114;#105;#112;#116;:alert(1) //http:// 成功的添加了并且也顺利的弹窗了
第十关
我们就顺利的来到了第十关这里看看前端代码发现有点奇怪 相信对前端比较熟悉的小伙伴已经看出来了这个type十分有九分的不对劲让typetype会隐藏输入框因此我们来给这三个传值来看看他们会有什么反应 可以看到这里的t_sort成功的接到了值那么我们就直接从这里入手尝试弹窗
t_sorta onclickalert(1) typetext 成功的弹窗
第十一关
这一关和上一关一样查看前端代码发现这里有四个可以输入的参数我们使用同样的方法来看看那个变量可以出入值 然后查看发现还是只有t_sort的值显示出来了那么不出意外还是要从这里入手了那么我们首先可以
尝试使用上一关的payloadt_sort123%20οnclickalert(1)%20typetext 但是很遗憾通过检查我们发现传入的双引号都被转义了,那看来这条路走不通了没有办法我们去查看了
源代码发现这个h_ref这个像是一个referer我们可以使用Firefox浏览器的一个扩展插件使用POST给其中尝试传入referer
aaatypetext onclickalert(1) 成功弹窗
注这里也可以使用burpsuite抓包然后修改referer的值来实现
第十二关
来到12关这里查看前端页面的代码发现了一个奇怪的值看起来像是浏览器的User-Agent值 这次我使用BP来抓包 抓到包后直接在User-Agent中将type修改为text让输入框可以看见后面跟着点击事件触发的弹窗代码 typetext onclickalert(1) 当然也可以使用Firefox提供的这个插件进行弹窗
第十三关
来到了13关先看看前端代码又是四个变量可以传参那就还是老办法来给每个都传入一个值看哪个会有不同 可以看到这里有两个都不同不过这个cook有可能会是cookie我们可以使用BP抓包然后将弹窗代码写在cookie字段后面看看是否会弹窗
我这里还是使用Firefox的这个插件来试试 成功弹窗
第十四关
现在我们就来到了第14关这一关看起来又是一个不一样的一关 这里我们先看看前端代码 可以看到这里使用iframe引入了一个网址
我们尝试访问一下会看到这里面啥也没有 这里因为找不道头绪看了看别的博客发现这里需要结合乌云发现的一个漏洞配置使用
注因为那个网站一直都进不去因此这一关直接参考别的博主的复现过程 上传一个含有xss代码的图片来触发xss 将刚才的图片上传上去然后再访问发现触发弹框了 第十五关
现在来到了第15关这一关好像东西很少没有什么可以输入的点 那么来看看后端代码吧
?php
ini_set(display_errors, 0);
$str $_GET[src];
echo bodyspan classng-include:.htmlspecialchars($str)./span/body;
?
这里看起来我们给src传入一个值然后会将传入的祖父穿作为span标签的class的值使用ng-incliude包含住 ng-include 是 angular js 中的东西其作用相当于 php 的 include 函数。 那么我们现在来试着给src中传入一个弹窗代码看有什么反应 但是这里传入的值在注释符中现在我们就先闭合注释符再传入弹窗代码 这里还是没有成功那么我们再分析一下这个ng-include的用法 1 、 ng-include 指令用于包含外部的 HTML 文件。 2 、包含的内容将作为指定元素的子节点。 3 、 ng-include 属性的值可以是一个表达式返回一个文件名。 4 、默认情况下包含的文件需要包含在同一个域名下。 特别值得注意的几点如下 1.ng-include, 如果单纯指定地址必须要加引号 2.ng-include, 加载外部 html script 标签中的内容不执行 3.ng-include, 加载外部 html 中含有 style 标签样式可以识别 了解了该指令的大致用法之后我们就不得不思考一下既然这里可以包含 html 文件那么也就可以包 含之前有过 xss 漏洞的源文件了。比如构造如下 srclevel1.php?nameimg src1 onerroralert(1) 可以看到成功弹窗
第十六关
现在来到了第十六关来先看看前端页面的代码 这一关在前端可以得到的信息也很少可以看到传入了一个值放到了center标签中
那我们试试传入弹窗代码是否可以弹窗 可以看到这里对script关键字和/都进行了编码
那么我们来看看后端代码
?php
ini_set(display_errors, 0);
$str strtolower($_GET[keyword]);
$str2str_replace(script,nbsp;,$str);
$str3str_replace( ,nbsp;,$str2);
$str4str_replace(/,nbsp;,$str3);
$str5str_replace( ,nbsp;,$str4);
echo center.$str5./center;
? 可以看到在后端代码中 将参数值中的 script 替换成nbsp 。将参数值中的空格也替换成 nbsp。将参数值中的/ 符号替换成nbsp 。 因为这里把空格都编码了也就意味着我们无法通过空格来将字符分隔进行语义的区分不过我们还可 以用回车来将它们分开。而且这里将/ 符号也编码了所以我们需要的是一个不需要闭合的标签比如之 前所用过的img 。 这里构造语句如下: img
src”111”
onerroralert(1)不过这里的回车怎么表示是一个问题因为就像上面那样提交的话浏览器会将字符中间的多个间隔合并 为一个空格。这里可以用回车的url 编码格式 %0a 来表示。 具体如下: keywordimg%0asrc”111”%0aonerroralert(1) 成功弹窗 第十七关 来到了17关可以看到这里也是很直接的写着成功后点击进入下一关
再看看前端页面可以发现这个传入了两个值分别作为src中的xsf01.swf的变量和值传入
那么想想就知道这里就是可以弹窗的地方了 可以看到我们构造的代码中关键字都被编码了这里应该就是用 htmlspecialchars() 函数处理过的。 仔细 观察一下发现这个embed 标签就是引入一个 swf 文件到浏览器端并且它的 src 属性值没有添 加引号所以 不用闭合。 基于这些情况我在谷歌浏览器重新打开了该地址页面显示如下 注因为我这里的插件一直没有加载出来因此这里还是借鉴一下别人的 可以看到在中间出现了一个类似于图片的东西。所以这里可以考虑通过事件来触发。 比如此处可以用 onclick事件测试一下 从网页源码中可以看到构造的恶意代码似乎正常插入了然后点击页面响应中显示该 swf 文件区域 的时候 成功弹窗了。 第十八关
现在来到了倒数第三关。看看前端页面代码吧 看起来就和17关是一模一样的就是没有了点击下一关那几个字
注因为我的这个插件还是显示不支持因此这里还是借鉴别人的
既然没有头绪那么来看看后端代码
可以看到传递的两个参数值也是出现在了embed标签的src属性值中。
尝试一下上一关的构造 成功弹窗
第十九关
现在来到了倒数第三关。看看前端页面代码吧 这里还是插件不支持
第二十关
再看看最后一关 还是插件不支持 总最后这两关都是插件不支持没办法做了感兴趣的小伙伴可以去看看别的文章
到此xss-labs也算是勉强通关了后面的文章会对别的xss靶场进行bypass敬请期待(^▽^)