XSS靶场练习手工注入(1)

前言

这篇一篇用来记录自己练习XSS注入的博客,虽然也已经有很多大佬也传了他们的思路和方法,但我的应该是记录最详细的吧(个人感觉)


原靶场的题号是用十六进制表示,我这里用十进制表示,其实他还是同一道题

靶场的目标是实现弹窗alert(1),才算过关

靶场:https://xss.haozi.me/#/0x00

基础知识

test()方法:

使用这个方法可以检查一个字符串是否符合正则表达式规则,符合就返回true,不符合返回false
只要字符串中有就返回true,不管位置

replace()

有两个参数:
第一个参数表示字符串中需要替换的内容
第二个参数表示要替换成什么的内容

标签

<img>标签支持onerror句柄。当一个图像文件由于各种原因载入不成功时,便触发该事件句柄。通过该方法,可以使得当前图片载入失败时显示默认图片。

正则语法:

i:匹配时忽略大小写
g:全局匹配,就是匹配的时候要把字符串所有的都要匹配,而不是只匹配第一个就结束

题目1

在这里插入图片描述

解题思路

这个题目中,服务器所包含的代码完全没有考虑过滤传过来的字符,所以可以直接用经典代码

<script>alert(1)</script>

结果

在这里插入图片描述

题目2

在这里插入图片描述

解题思路

这个题和上一个题的区别在于textarea标签中间不能直接插入script标签,所以需要先闭合textarea标签,然后在是用script标签

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

结果

在这里插入图片描述

题目3

在这里插入图片描述

解题思路

这个题中,它想把我们的输入放在一对单引号下构成字符串,从而无法执行JS代码,我们可以先让他的字符串闭合,然后在输入JS

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

结果

在这里插入图片描述

题目4

在这里插入图片描述

解题思路

这个题目中,他过滤了[]()这四个符号,把这四个符号用空格代替可,所以我们的JS代码中不能包含这四个符号。一般情况下,可以使用顿符号(就是tab键上面的那个键)符号来代替[]()这四个符号

<script>alert`1`</script>

除此之外,也可以用除了script标签之外的其他标签来弹出alert,比如

<body onload=alert`1`>

还有个方法可以不用到这四个符号的也可以,比如使用实体字符,所谓实体字符,就是HTML中预留的一些字符,因为比如说在HTML中,不能使用大于号和小于号,因为浏览器会认为他们是标签,如果想要正确的显示大于号和小于号,就要使用字符实体,字符实体的格式就是&#+序号+;,或者&+实体+;名称。比如空格就是&nbsp,具体的字符实体可以在网上查到,不在赘述。

在HTML中,<svg>标签中可以直接执行HTML实体字符。或者<iframe>标签的srcdoc属性里面的内容可以直接在HTML中显示出来

基于以上,就出现了下面的方法,用字符实体表示[]()这四个符号

<SVG><script>alert&#40;1&#41;</script>
<iframe srcdoc="<script>alert&#40;1&#41;</script>">
<img src="" onerror="alert&#40;1&#41">

这几种方法也都可以正确的出现弹窗。唯一需要注意的是,使用<iframe>标签是由由于内嵌页面出现的弹窗,不是原页面,所以可能不会出现成功提示,但这个方法是可以用的

结果

在这里插入图片描述

题目5

在这里插入图片描述

解题思路

这个题目是在上一题的基础上,又多过滤了那个顿号(tab键上面的符号),鉴于由于上一题我们所描述的知识,这题我们可以直接用字符实体来完成

<SVG><script>alert&#40;1&#41;</script>
<iframe srcdoc="<script>alert&#40;1&#41;</script>">
<img src="" onerror="alert&#40;1&#41">

这些方法其实也都是上一题中我们用字符实体解决的方法。

结果

在这里插入图片描述

题目6

在这里插入图片描述

解题思路

这个题目大家需要知道两个知识点,在HTML中,关于注释符总共有大概三种表示方法,分别是//, ,<!–注释内容–!>,所以这个题,我们可以用注释内容的第三种格式去解决

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

后面的script标签可以随便替换,这个题可能比较重要的是前面注释符的闭合

结果

在这里插入图片描述

题目7

在这里插入图片描述

解题思路

在这里插入图片描述
这个题的正则就如上图所示,就是说他过滤可以三部分中的某一个,要么过滤auto,要么过滤>符号,要么过滤"on"+任意字符(js中,.符号不包括换行和行结束符)+"="。

然后${}这个里面,{}的作用实际上就是把{}左右两边的区分开来,把{}里面的当成一个整体

有一个小技巧就是在HTML里面,可以不用写>符号,浏览器会帮你把他补上

这个题它限制了>符号,所以我们是完全闭合不了<符号的,我们只能在input标签里面完成插入,所以需要用到input的属性,一般情况下,我们需要传递alert出去的话,既然不能再script标签中,那么就只能在img标签的onerror中,所以这里选择input的类型的”image“,然后就可以用之前使用的Img标签完成插入。

需要注意一点的是,正则里面没有匹配换行符进去

type = 'image' src = '' onerror
=alert(1)

结果

在这里插入图片描述

题目8

在这里插入图片描述

解题思路

在这里插入图片描述
这个题的正则如上图所示,他过滤了以大于号<开头,>符号结尾,主要就是过滤了标签的格式吧,那个中括号里面的^表示非,就是除了>符号以外的其他所有符号。

他这个过滤的缺点在于最后必须是>来结尾,但其实在浏览器里面,有很多标签,都是可以不用>符号来结尾的,所以我们可以用

<img src="" onerror="alert(1)"
<body onload='alert(1)'

结果

在这里插入图片描述

题目9

在这里插入图片描述

解题思路

这个题目的正则是过滤了闭合的</style>,使得<style>无法闭合,我们可以利用换行符来绕过

</style
><img src= "" onerror="alert(1)">

结果

在这里插入图片描述

题目10

在这里插入图片描述

解题思路

这个题的意思就是说如果我们必须输入的和他的正则一样,才能进入if语句里面,不然就进入else语句了

所以前面只能这样构成

https://www.segmentfault.com"></script><img src="" οnerrοr="alert(1)">-->
https://www.segmentfault.com">`</script><script>alert(1)</script>

其实大概意思就是前面必须一样,都得是正则描述的链接,后面可以跟自己的插入语句。

结果

在这里插入图片描述

题目11

在这里插入图片描述

解题思路

这个题目,就是把'"<>/、这五个符号换成不同的字符,除此之外,他还要求输入的字符必须包含它正则表示的那个链接,这样才能进入if语句中去。因为他把标签所需要的大于号,小于号都给顶替了,不能再用i虚拟的标签额,所以有一个知识点就是在URL中他是会会解析@后面的网址的,所以基于此,构成下面的答案

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

结果

在这里插入图片描述

题目12

在这里插入图片描述

解题思路

toUpperCase方法是将字符串中所有小写字母转成大写字母,html不区分大小写,然后JS又是对大小写贼敏感的一门语言,所以我们可以有两种思路,第一种就是用实体字符,这样就不会发生把小写字母变成大写字母,这样就可以实现

<img src="" onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;">

第二种思路就是利用上一题的知识点,在标签的属性内加上链接访问

<script src="https://xss.haozi.me/j.js"></script>

结果

在这里插入图片描述

题目13

在这里插入图片描述

解题思路

这道题的正则是把输入的<script>标签换成空字符,然后就是把输入的所有小写字母换成大写字母。
这个题和上一道题相比就多了一个过滤<script>标签,其实也可以用上一题的答案来解这一道题。

这里有一个知识点就是如果出现所有的字母都转化为大写字母的时候,可以尝试使用ſ,他的大写会转化为大写的S,所以也可以用下面第二种方法

<img src="" onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;">
<ſcript/ſrc="https://xss.haozi.me/j.js"></ſcript>

结果

在这里插入图片描述

题目14

在这里插入图片描述

解题思路

这道题目的正则式将</"'这四个符号都会转换成空字符,但是这里需要注意,我们输入的部分是在//注释符下面的,所以我们首先需要做的就是换行,然后又因为我们已经在

1
alert(1)
-->

结果

在这里插入图片描述

题目15

在这里插入图片描述

解题思路

这个题目就是将输入的字符中<符号后面跟着的所有字母全都替换,而且他还会将所有输入的字母变换成大写,这时候,我们就可以采用之前的那个知识点,ſ的作用就尤为重要,它既不是26个字母,而且大写转换后还是S,所以可以用

<ſcript/ſrc="https://xss.haozi.me/j.js"></ſcript>

结果

在这里插入图片描述

题目16

在这里插入图片描述

解题思路

这个题的正则就是将&'"<>/这几个符号都转换成字符,而且还限制我们在img标签中,所以编码没有收到影响。内容在console.error中,我们可以闭合console.error,并且在onerror属性中添加一个alert,然后闭合onerror

');alert('1

结果

在这里插入图片描述

题目17

在这里插入图片描述

解题思路

这道题目感觉就很奇怪,本来就是在script标签中输入,而且又给的是window.data,可以直接输入alert(1)

alert(1)

结果

在这里插入图片描述

题目18

在这里插入图片描述

解题思路

这段代码就是将好多符号都给用字符替换了,然后我们输入是在console.log中,和前面一道题的处理方法一样,还是先闭合console.log,让背后在后面加上alert,然后在注释掉多余的即可,所以是

");alert(1)//

结果

在这里插入图片描述

题目19

在这里插入图片描述

解题思路

这个题目是将"\\替换掉,但是我们还是在console.log里面输入,老规矩,还是先闭合console.log,然后alert,但这里注意到由于双引号被替换,无法闭合,所以可以随便输入,将<script>闭合,例如

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

之所以这样写是因为浏览器的容错性,它可以修正我们的代码,从而正确显示。

也可以将替换的 \" 的 \在前面再添加一个\转义掉。

\");alert(1);//

结果

在这里插入图片描述

总结:

1.如果没有任何过滤,可以直接使用<script>标签
2.如果在一个标签里面输入,可以尝试闭合此标签,然后创建新的<script>标签或者<img>标签
3.如果过滤了[]()这几个符号,可以尝试用顿号(tab键上面的那个)
4.如果把顿号(tab键上面的那个)也过滤了,可以考虑HTML的字符实体
5.注释符有三种表示方法,分别是//, ,<!–注释内容–!>
6.在HTML中,<svg>标签中可以直接执行HTML实体字符。或者<iframe>标签的srcdoc属性里面的内容可以直接在HTML中显示出来
7.如果过滤的时候过滤了符号.,可以用换行符绕过,因为这个符号不匹配换行符
8.浏览器具有容错机制,对于单标签而言,可以不打>符号,也可以实现标签的功能
9.对于开启大小过滤,可以使用符号ſ,他的大写转换之后就是S。也可以使用HTML语句实现,利用一些标签的src属性
10.对于输入内容在//注释符后面,可以采用换行
11.对于输入的内容在console.log中,大多数采用的时先闭合这个属性,然后输入新的alert即可,或者可以利用浏览器的容错机制,输入</script>强行闭合,自己在开启新的<script>标签,类似于最后一题
12.在URL中会解析@后面的网址

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值