xss笔记

hb   ·   发表于 27天前   ·   闲聊灌水区

xss-labs-master笔记

关于这个靶场的通关攻略,网上也有很多更详细的,此处只作为自身的笔记

level1


页面上发现一个输出点,修改name的传参试试

<sCripT>alert(1)</ScriPt>


经过测试,最后发现是这个<script>标签被我虚拟机的安全狗拦截了
网站找到一个过狗的语句

  1. <button onfocus=alert(1) autofocus>
  2. #onfocus表示当获得一个焦点时会执行脚本,autofocus表示自动获得一个焦点


页面弹窗,这关是反射型的xss

level2


搜索框,先上个语句看看
<button onfocus=alert(1) autofocus>


页面没有弹窗,查看一下网页源代码


发现我们输入的语句分别被放到了<h2><input>的value里面,h2标签里面将我们的尖括号进行了html编码,因此没有弹窗;而input标签则需要进行闭合才能使代码执行
闭合:"><button onfocus=alert(1) autofocus> //


页面弹窗,”>用户闭合,//用于注释掉原先的”>

level3


还是一个搜索框,用level2的闭合语句尝试一下


果然不行,查看一下网页源代码

这两处的尖括号都被进行html编码了,因此这时候就需要用到特殊事件来触发xss了
从源码处发现,我们的输入会放入到value当中,但是此处的value是单引号闭合

闭合语句构造为:'oninput=alert(1) //
这个语句表示当输框有内容输入时会执行脚本,因此输入闭合语句时,不会立即弹窗,还需要我们在输入框内再次输入任意内容,才会弹窗
闲麻烦也可用这个语句'onfocus=javascript:alert(1) //
这个语句只要再次点击输入框即可触发onfocus事件

level4

弹窗语句测试

没有弹窗,查看网页源代码


h2标签的依然是将尖括号编码,input标签则是将我输入语句的尖括号给删除了,猜想可能是源码里将尖括号给替换成空了,因此还是用事件来触发
构造语句:"onfocus=javascript:alert(1) //

页面成功弹窗

level5

还是搜索框,上闭合语句测试一下
"><button onfocus=alert(1) autofocus> //

页面未弹框,看看网页源代码


发现它会在标签和事件中间加一个短杠,我把安全狗关闭,试一试script标签


发现script标签也会被替换

换a标签试试
"><a href=javascript:alert(1)>点击</a> //


点击超链接后触发弹窗

level6

"><a href=javascript:alert(1)>点击</a> //测试


href被替换了,中间被加了一个短横杠,尝试使用大小写绕过
"><a HrEf=javascript:alert(1)>点击</a> //


成功弹窗

level7

这里看着和第关差不多,用a标签大小写试试
"><a HrEf=javascript:alert(1)>点击</a> //

查看源代码

发现value处直接将a标签的href属性名给删除了,导致a标签没有效果;并且将javascript替换成了java
尝试将href属性和javascript进行双写看能否绕过:
"><a HhrEfref=javasscriptcript:alert(1)>点击</a> //


发现a标签生效,点击弹窗

此类情况可先多种标签或者事件来进行测试,若都不行,尝试关键字大小写,最后试试双写

level8


这个页面看着比之前多了一个超链接,用简单的语句先测试一下输出点
<button onfocus=alert(1) autofocus>

查看网页源代码

发现我们输入的语句分别放入两个地方,1处尖括号被转义;2处直接放入到了超链接的href属性值里,并且针对on进行了替换破坏语义;所以带有on的事件都无法用了

用a标签测试:
"><a HrEf=javascript:alert(1)>点击</a> //


发现这里对闭合的双引号、href属性、javascript都作了处理
之前源码里发现用户的输入会直接放入到a标签的href属性里面,尝试直接将
javascript:alert(1)进行unicode编码后在输入看看是否有效


输入后点击友情链接,页面弹窗

level9

先用javascript:alert(1)实体编码测试一下
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;


发现我们输入的值比没有如第八关那样直接写入到href属性当中,而是有个提示说链接不合法,此处有可能会对输入的链接进行检测,尝试加一个http://, 但同时要保证我们的代码可以执行,所以需要将http://加在代码后面,并注释掉
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41; // http://


成功绕过检测

level10

先用简单的语句测试一下
<button onfocus=alert(1) autofocus>
发现并没有弹窗

查看网页源代码


尖括号被过滤,且只发现这一处输出点
看看后台的源码


发现还有一个t_sort参数,这个参数接收的传参只是被过滤掉了尖括号,且会被输出到input标签的value属性当中
传入参数
&t_sort="type="text" onclick=alert(1) //
因为input标签是被隐藏的,所以传入一个type让这个输入框显示在页面上,事件才可触发


思路:首先是通过网页源代码发现明面上的输出点在h2变迁之间,尖括号被编码,也没有办法形成闭合,此处输出点没有可利用的地方;通过后台源码发现有隐藏的表单标签,构造payload使表单标签显现出来,然后用事件去触发js

level11

这关的看着和第十关有些类似查看网页源代码


多了一个参数t_ref
使用第十关的构造方式测试一下
&t_sort="type="text" onclick=alert(1) //


发现这里把用来闭合的双引号进行了实体编码,所以这里就没有办法闭合了
前面我们看到参数t_ref的value值里有以一个我们第十关的一个地址,猜想这里是不是可以接受ref传参,这里我们用一个谷歌插件modheader(没有插件也可以使用burp抓包修改)来修改一下referer
"type="text" onclick=alert(1) //

成功弹窗

level12

看着和前两关也类似
用第十关的语句测试


发现h2标签的尖括号和t_sort参数的双引号依旧被实体编码;不过比起11关,其中的t_ref参数换成了t_ua参数,且其value值里面看着是user_agent的值,因此猜想此处可以接收user_agent的传参
借助谷歌插件modheader,修改user_agent为
"type="text" onclick=alert(1) //

level13

此关用第十关的语句测试发现h2处和t_sortcan参数依旧有过滤


最后一个参数变成了t_cook,猜测是cookie传参,老办法,修改cookie
"type="text" onclick=alert(1) //
这里直接使用插件修改,貌似不行,那就直接使用burp抓包修改


成功弹窗

level14

这关据网上的攻略是说因iframe地址失效,导致本关无法复现

level15

查看网页源代码


发现src参数的传参值会被插入到span标签的class属性当中
先用个简单的弹窗语句测试一下
"><button onfocus=alert(1) autofocus> //


尖括号被实体编码
用事件
"><button onfocus=alert(1) autofocus> //


发现尖括号和双引号都被实体编码了
之前发现class属性里面还有一个ng-include,百度一下


这是一个文件包含的指令,这个指令可以包含外部的html文件,包含的内容将作为指定元素的子节点
可以理解为:我们在src传入的参数可以是一个外部的html,那么我们就可以包含一个有xss的页面进去

另外,在csdn中,wo41个小白菜大佬的文章中了解到

1.ng-include,如果单纯指定地址,必须要加引号

2.ng-include,加载外部html,script标签中的内容不执行

3.ng-include,加载外部html中含有style标签样式可以识别

构造语句
'level1.php?name=<button onfocus=alert(1) autofocus>'


成功弹窗

level16


发现keyword的传参值会在页面上显示出来,用简单的弹窗语句进行测试
<button onfocus=alert(1) autofocus>


发现传参的值被插入到了center标签之间,且空格被编码了
这里尝试使用换行看能否绕过,换行的url编码为%0a
<button%0aonfocus=alert(1)%0aautofocus>


成功绕过

level17


这个页面也没有什么科输入的地方,那就只有传参了,用个简单的语句测试一下


诶嘿,好像没什么反应,但是戏剧性的一幕出现了 我不小心在页面上点了一下鼠标,卧槽,居然就弹窗了,有点懵


查看一下网页源代码


发现这里是将button标签的尖括号给实体编码了,但是恰好,src属性没有引号,不需要闭合,然后我的鼠标是点击到了xsf0.sfw的区域,获得了一个焦点,触发了onfocus事件,所以弹窗了
实际上这里只需用一个事件即可,其中用这个事件更好一些:onmouseover:(表示当鼠标移动到该标签上时就会触发执行某项动作)

这里如果单纯的使用事件,在事件前加一个换行%0a,将属性隔开;如果不加的话,html会把这个事件属性当作scr的的地址拼到一起,就不会触发(html里面每个属性都要隔开)

level18

这关和17关使用同样的方法就完成了

level19

后面两关(因水平有限)就不记笔记了,附个链接吧:守卫者安全的文章https://www.zhaosimeng.cn/writeup/119.html

打赏我,让我更有动力~

2 Reply   |  Until 19天前 | 2011 View

pony686
发表于 24天前

好帖,get到了

评论列表

  • 加载数据中...

编写评论内容

jackou
发表于 19天前

感谢分享

评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content
返回顶部 投诉反馈

掌控者 © 2016 - 2020. All Rights Reserved. 掌控者

Powered by 掌控者