xss-tour闯关

xss-tour闯关

level 1

第一关都很简单,没有任何过滤。直接在url中输入。因为你可以查看页面源代码,他是get请求。

level 2

第二关有一个输入框,尝试写入东西并了解写的东西在前端被放置的地方,查看页面源代码。发现输入的内容会被h2标签包裹,但是他将<>给转义了。但是还有一个input标签值也传递了我输入的内容,所以可以从input下手进行第二次尝试

我们先闭合input标签,构建语句

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

level 3

两个输入位置的<>都被转义了,我们可以使用事件弹窗。但是事件是属性中的,我们在input中改变。

闭合value的单引号。

1' onclick='alert(1)

按道理这样是可以的,但是没有成功

1' onclick=alert(1)//

这样才成功,我也不知道为什么

level 4

value直接去除<>,还是继续用事件,闭合value的引号。

1“ onclick="alert('1')

level 5

过滤掉了script标签和所有on开头的事件,我们可以尝试使用伪协议a标签,注意同样闭合input和value

"><a href="javascript:alert('22')

level 6

过滤了script、on事件、href,用str_replace函数guolv,但是又没有过滤大小写了。所以用大小写绕过。

"><SCRIPT>alert('22')</SCRIPT>
"><a HREF="javascript:alert('22')

都可以

level 7

他是替换了script、on事件、href为空,那么遇到替换就能想到双写。

"><sscriptcript>alert('22')</sscriptcript>

level 8

可以看到我添加的内容,被插入在了以下两个位置

两处都转义了script、on事件,并且大写小都被过滤。“也被转义

尝试使用HTML实体编码

尝试使用其他的编码的形式
对script中的一个字母进行html实体编码

HTML实体编码(HEX)
javascri&#x70;t:alert()

HTML实体编码(DEC)
javascri&#112;t:alert()

成功

补充:
HTML 实体

在 HTML 中,某些字符是预留的。
在 HTML 中不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签。
如果希望正确地显示预留字符,我们必须在 HTML 源代码中使用字符实体(character entities)。
字符实体类似这样:

&entity_name;

或者

&#entity_number;

level 9

还是老套路,输入然后看代码查找漏洞

对这两出不断尝试发现,script被过滤掉了。并且传入的连接处有验证,必须带有有http://

javascri&#112;t:alert()//http://

level 10

注入点在地址栏的?name=中,看源代码,这里涉及到一个form隐藏表单的知识点。对于html和js底子不好的我来说,是有些摸不着头脑的,后来查了一下别人写的文章结合自己的一些理解去尝试做这个题目。

首先概念理解,form表单的类型是隐藏的话,他是不会提交的,所以我们从type=hidden下手。

keyword=111&t_link=1&t_history=2&t_sort=1" onfocus=alert(1) type="text"

发现t_sort是可以直接注入的,这是别人贴的poc,先看看

  1. keyword:当form表单提交数据时,keyword会替换掉之前原有的参数

  2. onfocus:获得焦点触发事件

  3. 给t_link、t_history和t_sort赋值,并将t_sort的类型改为text文本,这样t_sort就可以提交了。就是这么简单。

level 11

查看源代码,和上一题是一个道理,只不过他新增了一个输入t_ref,自己修改了提交数据参数值keyword,所以我们直接改他的值就好了

  1. 抓包

  1. 特这里的referer值就是最后一列的keyword值,我们修改一下

" type="text" onclick="alert(1)

level 12

和上一关同理

  1. 抓包,发现Agent的值为t_ua的值

  2. 修改值

level 13

和之前同理,还是先寻找注入点

  1. 抓包,发现在cookie值中有t_cook信息

  2. 修改

    " type="text" onclick="alert(1);
    

    level 14

    Exif是啥???

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

    将XSS写到Exif里(PowerExif)exif是PHP拓展,如果要用exif_read_data函数要记得开启拓展。

    如下DEMO:

    `$exif` `= exif_read_data(``'test.jpg'``);``var_dump(``$exif``);
    

    在读取的时候就会导致XSS。但是这种情况在真实环境里出现的几率比较小。

    几乎没有了,不做这个。

原文地址:https://www.cnblogs.com/kbhome/p/12822266.html