专栏首页字节脉搏实验室XSS模拟实战训练【XSS Challenges平台】

XSS模拟实战训练【XSS Challenges平台】

文章源自【字节脉搏社区】-字节脉搏实验室

作者-whit

先放上网址:http://xss-quiz.int21h.jp

这是一个模仿真实xss挖洞的情景,在XSS Challenges练习过程中,我们需要用浏览器中的f12中搜索(),找出我们控制的代码所在的位置,然后思考那些个位置哪个或哪几个位置可以被注入我们想要的代码,然后结合上下文进行各种脑洞绕过。

建议使用firefox浏览器,搭配burp进行练习。

Stage #1

这一道题发现我们写入的内容直接没有任何过滤,嵌套在一个<b>标签里面,我们常规闭合标签新建标签即可。

"</b> <script>alert(document.domain)</script><b>"1"

Stage #2

这一题的注入点是在一个input标签的value属性那里,我们前后闭合input标签然后在中间加上script就好了。

"><script>alert(document.domain)</script><

Stage #3

这一道题我们的注入点也是在<b>标签里面,唯一的不同是用于标签构造的<>被转义了,用于匹配掉双引号的双引号也被转义了,所以我们要另外想方法。

我们注意到提交的参数并不只有输入框中的内容,还有country,也就是数据包中的p2

所以抓包,改包,发包,成功。

查找,我们可以看到我们注入的标签无任何过滤插入到了<b>标签上。

p1=1&p2=<script>alert(document.domain)</script>

Stage #4

这里依然是先抓包,发现有个hackme….

我们构造参数,直接提交,发现直接就过了。

p1=1&p2=Japan&p3="><script>alert(document.domain)</script>"

Stage #5

与Stage#2几乎一样,也是value参数,唯一的不同点是在前端限制了输入的长度,我们直接用bp抓包提交就好了。

"><script>alert(document.domain)</script><

Stage #6

与Stage#2几乎一样,也是value参数,唯一不同的是过滤了<>,但没有过滤”(可以闭合前面的属性),这样我们就不可以用新的标签了,但我们可以在<input>标签里面加新的属性。之后再次点击输入框即可通过本关。

" onclick=alert(document.domain) name="1

Stage #7

这道题也是value出问题,但除了<>,这道题把”也过滤了,本来以为这样就不能把独立的属性分隔出来,但我直接使用前一道题的参数,竟然成功触发了alert。

" onclick=alert(document.domain) name="1

Stage #8

题目是输入一条url,然后后台把它包在一个<a>标签里,我们需要点击超链接然后弹窗。

我们百度怎么在url中执行js,学到可以构造参数,然后点击超链接,点击过关

javascript:alert(document.domain)

Stage #9

这道题卡住了,暂时没做出来。先用改包的方式绕过。拦截返回的数据包,修改如下:

<code>alert(document.domain);</code>
<script>alert(document.domain);</script>

这道题我们只能用抓包的功能过。(每一道题都可以)

Stage #10

这个也是value注入点,直接在网页提交发现,后台把domain过滤掉了。

上网找了下document.domain的等效DOM发现没有,突然想到是不是只匹配了一次,故嵌套domain

成功弹窗。

"><script>alert(document.domdomainain)</script><

Stage #11

也是value注入点,在网页中各种提交姿势试一下,发现script前面加个x,on事件全部不能用,想到除了on事件和script之外还能执行js的是构造a标签在超链中执行js。

构造”><a href=javascript:alert(document)>1</a>< ,发现构造的语句中仍然有script,我们把之中的s进行html实体化,s=&#115;

"><a href=java&#115;cript:alert(document.domain)>1</a><

发现被渲染成s了,成功弹窗。(还可以在script中间插入&#09;,&#10;,空格等不可见字符对script进行分割,让正则匹配不到)

做这道题又把unicode,utf-8,url编码,html实体等看了一遍,发现它们英文部分有很多相同之处,比如都可以表示为ascii的十、十六进制,只要加不同前缀就好了。

Stage #12

照常尝试,还是value值,过滤了<>和”,想用编码能不能绕过(因为过滤了<>”,HTML实体是不行的,html实体不能让内容逃出来),ie浏览器会把 ` `(笔记本1左边那颗键两次)识别为双引号,从而让我们的内容逃出来(<>没法逃就设置属性),构造payload。由于我用的火狐,并没有成功,老方法,抓包绕过。

`` onclick=alert(document.domain)

Stage #13

照常转义了<>和”,F12发现相比以往的题这道题多了一个style属性,那肯定就是从这里入手了。

百度style XSS,搜到一个知识点叫“行内样式的动态特性”(就是在ie下能在css中执行js代码)

我在ie下试了很久都不能复现,又百度,发现还有一种利用方法 background:url(javascript:alert('xss'));

还是不能复现,只能归结为ie版本太高的问题了。

这道题卡住了,暂时没做出来。先用改包的方式绕过。拦截返回的数据包,修改如下:

<code>alert(document.domain);</code>
<script>alert(document.domain);</script>

Stage #14

和Stage #13几乎一样,不同的是转移了了script和expression,想用&#num;的形式实体一下其中的字母,但发现&号也被转移了mmp,然后试了下/**/应该也是可以的,可惜不能复现。从大佬的WP上有学来集中绕过方法。

(1)能绕WAF的不止html实体,unicode编码也行如e -> \0065 ,\u0065 ;\0065xpression(这道题过滤了反斜杠,反斜杠零)

(2)在expression中加反斜杠分隔 ;ex\pression(不行,理由同上)

(3)在expression中加注释符/**/分隔;ex/**/pression 通过

(4)在expression中加反斜杠零分隔;ex\0pression 通过

这道题卡住了,暂时没做出来。先用改包的方式绕过。拦截返回的数据包,修改如下:

<code>alert(document.domain);</code>
<script>alert(document.domain);</script>

Stage #15

随便试了下,照常转义<>,”,也转义了&,过滤了\让我们不能构造html实体,和unicode编码。~~等等!

\是过滤了,不是转义了!我们试试输入两个\,发现只过滤了一个!

那就直接unicode就行了(就是\\003c和\\003e代替<>换成十六进制编码也就是\\x3c,\\x3e也是可以的)

\\x3cscript\\x3ealert(document.domain)\\x3c/script\\x3e

Stage #16

看到又有document.write,试了试上题的利用代码,直接过了……看了下hint,发现是替换了\x,那与上题唯一的区别就是十六进制编码不能用了。ps:还有一种编码格式是八进制编码?学到一个知识点叫 HTML和javascript的自解码机制.payload如下:

\\74img src=x onclick=alert(document.domain)\\76

点击一下生成得图片即可过关。

Stage #17

题目说了只能在老ie上复现,那我们就直接看大佬WP好了。

类似于sql注入的宽字节注入,用%A7(%几都行,只要符合下面大佬WP中可以用来欺骗的编码)加上双引号的%34?让html自解码机制误认为这是宽字节字符,从而弄掉双引号。

半角片假名使用两个字节来表示:0x8E + 0xA1-0xDF

JIS X 0208字元使用两个字节来表示:0xA1-0xFE + 0xA1-0xFE

JIS X 0212字元使用三个字节来表示:0x8F + 0xA1-0xFE + 0xA1-0xFE

Stage #18

也是老版本ie,跳过不写。

Stage #19

没有任何输入点,抓包没发现任何东西….

这个不会,抓包跳过。

结尾有个排行榜,可以参观一波,看来练习得人不少。

写在最后:

菜鸡就是菜鸡,没有全搞定,有兴趣得师傅可以尝试做一下,有答案可以评论告诉我,让我也跟大家涨一波姿势。如有错误勿喷,请及时指出,作者会马上修改。

本文分享自微信公众号 - 字节脉搏实验室(zijiemaiboshiyanshi),作者:whit

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • upload-条件竞争

    竞争条件指多个线程或者进程在读写一个共享数据时结果依赖于它们执行的相对时间的情形。

    字节脉搏实验室
  • ThinkPHP6.0任意文件创建Getshell复现

    ThinkPHP框架是MVC结构的开源PHP框架,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。该漏洞源于ThinkPHP...

    字节脉搏实验室
  • Vulnhub-Bsides Vancouver 2018

    https://www.vulnhub.com/entry/bsides-vancouver-2018-workshop,231/#release

    字节脉搏实验室
  • XSS模拟实战训练【XSS Challenges平台】

    这是一个模仿真实xss挖洞的情景,在XSS Challenges练习过程中,我们需要用浏览器中的f12中搜索(),找出我们控制的代码所在的位置,然后思考那些个位...

    Gcow安全团队
  • Ajax跨子域

    主页index.html的主要代码如下: <button onclick="crossDomain();">开始跨域</button> <div id="aja...

    Java中文社群_老王
  • 程序中的异步和同步

    同步:   主机A发送数据的时候,主机B必须等待接收,处于阻塞状态,这就好比别人给你打电话,你必须当场听话,否则则【错失良机】。

    Wyc
  • 12样式操作

    Dreamy.TZK
  • Nim教程【十】

    openarray类型 注意:openarray类型只能用于参数 固定大小的数组虽然性能不错,但过于呆板,使用取来不是很方便 对于一个方法来说,传入参数如果是一...

    liulun
  • 第一篇文章收入经验谈及一年的学习经验

    昨晚看了一下gitchat收益,没想到累计1800+了。这也是我没想到的,有很多好友问我这是哪个平台,这篇文章便是统一回复,如果你只是单纯的想知道这个答案,ok...

    公众号guangcity
  • 原创FlowPortal用户手写签名插件:Signature,需要另购手写板(及手写笔)

    近期人事部提出需求,要给所有的工人使用电脑请假申请,代替纸质的申请。因为不可能给每一位工人开设Windows或者应用系统账号,更不可能给每一个工人配置电脑,所以...

    崔文远TroyCui

扫码关注云+社区

领取腾讯云代金券