xss闯关详解

xss闯关详解

提前说明我使用的是xss在线版,所以就不分析源码了,建议大家在学习时自己搭建xss靶场(因为可以分析源码)。

https://xssaq.com/yx/

这是在线版网址,有需要的可以直接使用。
xss的基础理论我也不过多赘述,下面直接开始过关。

在这里插入图片描述

level-1

在这里插入图片描述

在这里插入图片描述

我们发现此时URL输入什么,图片上就是什么,那么输入点就找到了。
输入点即是

php?name=

在这里插入图片描述
输出点就是图片上显示的你输出的字母的地方

构造 payload:
第一关未进行任何过滤,我们输出再标签之间,直接构造即可

<script>alert(/xss/)</script>

在这里插入图片描述
也可以用其他事件onload,onclick,onerror,prompt,confirm等。例如:<svg/οnlοad=alert(1)>

level-2

在这里插入图片描述

本题有两个输入点,
即URL和输入框
而此时输入框这个输入点用到了htmlspecialchars() 函数
它的作用是:把预定义的字符转换为HTML实体
预定义的字符有:

1.&:转换为&
2.“:转换为”
3.':转换为成为 ’
4.<:转换为<
5.>:转换为>

既然有输入框这样的输入点,那么对应的输出点也会有被HTML实体编码的。

所以,我们可以在URL上进行输入时间来弹窗

构造 payload:

"><script>alert(/xss/)</script>

在这里插入图片描述
或者

" οnclick=alert(1)> 需要点击一下输入框。
点击事件-JS知识点

" οnmοuseοver=alert(1)> 需要要鼠标滑过输入框鼠标事件-JS知识点

注意:上述js代码中的“ "> ” 和 “ " ”都是为了闭合

level-3

在这里插入图片描述

我们在URL中输入测试,发现页面并无输出,此时我们在URL中的输入点也被实体化了,如果有源码的朋友,应该可以发现这样一个的一个语句

<input name=keywordvalue='".htmlspecialchars($str)."'>

并且我们通过观察这个句子,发现它是以 ’ 单引号结束的。
但是htmlspecialchars()函数默认配置是不过滤单引号的,只有设置了quotestyle,才可以

构造 payload:
那么可以用单引号闭合,并且不能包含<>,则

οnclick='window.alert()

在这里插入图片描述

level-4

在这里插入图片描述

与第三关相比:
在这里插入图片描述

源码中多了两行以下两行代码

$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);

将输入的内容分别去掉了 <,>

输入框没有被实体化,但是’ 变为" 。

构造 payload:

">οnclick="window.alert() 

在这里插入图片描述

level-5

在这里插入图片描述

源码中与第四关不同的的地方

s t r = s t r t o l o w e r ( str = strtolower( str=strtolower(_GET[“keyword”]);
strtolower() 函数将大写字符串转化为小写
s t r 2 = s t r r e p l a c e ( " < s c r i p t " , " < s c r i p t " , str2=str_replace("<script","<scr_ipt", str2=strreplace("<script","<script",str);
将<script 替换为 ,<scr_ipt
s t r 3 = s t r r e p l a c e ( " o n " , " o n " , str3=str_replace("on","o_n", str3=strreplace("on","on",str2);
将on替换为,o_n

此处没办法使用on事件了,所以我们不能利用第四关的payload了上面先转化为小写然后替换 所以将

构造 payload:

"><a href=javascript:alert();>test</a>

在这里插入图片描述
输入js后,点击图中画圈的超链接
在这里插入图片描述

level-6

在这里插入图片描述

这关的源码中,相比第五关,src,data,herf也被替换了,最重要的是少了strtolower()函数,而str_replace函数是区分大小写的,所以这一关测试的主要是大小写问题,可以用大小写绕过

构造 payload

"><a HREF=javascript:alert()>test</a>

还是先闭合在用大小写绕过
在这里插入图片描述
还是输入js后,点test的过关
在这里插入图片描述

level-7

在这里插入图片描述

双写绕过:
分析第七关源码,发现它使用了strtolower函数先将大写转化为小写之前方法无用,但是从下面可以看出,它将替换的字符串都都替换为空,那么我们想,如果添加两个呢,他会不会只过滤一个呢,这里需要注意的是必须在字符串中间再添一个,而不是一个后面跟着一个。

构造 payload:

"><scrscriptipt>alert()</scrscriptipt>

"><scrscriptipt>alert()</scrscriptipt>
强调的这两个就是加的字符串
在这里插入图片描述

过关方法有很多,其他的大家自己可以试试。

level-8

在这里插入图片描述

我们分析源码可以发现:
没有过滤:’ > < % & #
过滤了:" src on script data

输出点在a标签内,href属性中,属性中双引号被转换成HTML实体,无法截断属性,很明显,我们想到了协议绕过javascript:alert,由于script关键字被过滤,伪协议后面可以使用html的实体编码

构造 payload:

javasc&#x72;ipt:alert(1)

javasc r;ipt:alert(1)
在这里插入图片描述
注意啊,过关一定要点那个添加友情链接

HTML字符实体转换

字符实体是用一个编号写入HTML代码中来代替一个字符,在使用浏览器访问网页时会将这个编号解析还原为字符以供阅读。
这么做的目的主要有两个:
1、解决HTML代码编写中的一些问题。例如需要在网页上显示小于号(<)和大于号(>),由于它们是HTML的预留标签,可能会被误解析。这时就需要将小于号和大于号写成字符实体:
小于号这样写:< 或 <
大于号这样写:> 或 >
前面的写法称为实体名称,后面的写法则是实体编号。ISO-8859-1字符集(西欧语言)中两百多个字符设定了实体名称,而对于其它所有字符都可以用实体编号来代替。
2、网页编码采用了特定语言的编码,却需要显示来自其它语言的字符。例如,网页编码采用了西欧语言ISO-8859-1,却要在网页中显示中文,这时必须将中文字符以实体形式写入HTML代码中。

在这里插入图片描述

level-9

在这里插入图片描述

这题的源码和上一题基本一样,只不过多了一个自动检测URL
如果发现没有带http:// 内容则会显示不合法, 那么怎么可以既有它,又不让它执行呢?
只需填加个注释,(可选择多行注释和单行注释)包含http://就行了

构造 payload:

javascri&#x0070;t:alert(1) /*http:// */

先点击添加友情链接,再点击友情链接,即可过关
在这里插入图片描述

level-10

在这里插入图片描述

从源码中,我们看到只有两个URl参数是有效的分别是keyword和t_sort且标签input被隐藏了,而我们的渗透点在t_sort参数上

构造 payload:

t_sort=" οnclick="alert()" type="text

我们需要先修改URL
在这里插入图片描述
当输入js,修改URL后出现搜索框,点击即可过关
在这里插入图片描述

level-11(开始使用burpsuite)

在这里插入图片描述

这关源代码中,对了一个HTTP_REFERER 参数,那么我们想到可以想到HTTP头,所以我们可以在请求头进行XSS注入。

接下来,我们利用burpsuite进行抓包。
注意,此处建议用burpsuite内嵌浏览器,比较稳定不用改代理,而且简单便捷
在这里插入图片描述
这是11关抓包后的源码,修改 Referer即可

构造 payload:

123456" οnmοuseοver=alert(1) type="text"

在这里插入图片描述
onmouseover是鼠标滑过事件。

level-12

在这里插入图片描述

本关源代码中HTTP_REFERER 参数 换为了HTTP_USER_AGENT参数 其实抓包啥的与上一关一摸一样就是请求头从Referer换成了User-agent ,通关方法和11关差不多

构造 payload:

123456" οnmοuseοver=alert(1) type="text

level-13

在这里插入图片描述

本关源码多了一个COOKIE变量,想到HTTP请求头
所以和前面两关大差不差

构造 payload:

user=123456" οnmοuseοver=alert(1) type="text

level-14

在这里插入图片描述

当你进入本关时,便可以看到 本关相较于其他关,页面加载不出来,同时,完成后需要点击链接跳转。

本关主要考察EXIF
Exif是Exchangeable image file format(交换图像文件格式)的缩写,它是图像文件中包含的元数据的标准格式。Exif数据记录了拍摄照片的设备和设置,如拍摄时间、焦距、曝光度、ISO等信息,这些数据可以帮助人们更好地管理和组织他们的数字图像,同时为后期处理和编辑提供更准确的信息。Exif信息通常包含在JPEG、TIFF等格式图像中。

**漏洞原理:**通过修改图片的exif信息,造成解析图片exif的XSS

推荐使用exiftool使用

level-15

在这里插入图片描述
本题用到一个比较重要的知识 文件包含
建议大家取学习一下
菜鸟教程网址如下:

https://www.runoob.com/angularjs/ng-ng-include.html

我们可以让它调用一个 evil code执行弹窗
注: htmlspecialchars()函数,把 < 和 > 还有 " 转换为实体,常用于防止浏览器将其用作 HTML 元素。

构造 payload:

src='level1.php?name=<img src=x οnerrοr=alert(1)>'
 
src='level2.php?keyword=" οnclick="alert(123)" "'

试了很多方法 不知道哪里出了问题,始终无法通关,可能是环境?

level-16

在这里插入图片描述
本关的源码中,有大小写输入转换,并且后面相接有四次替换检查
分别对 script 空格 / 进行了替换
但是值得注意的是**<>**没被替换

另外script被替代,我们可以使用img标签
剩下我们就需要考虑如何把空格的影响给去掉,这时候就需要使用编码来进行绕过了(上文有编码的网址),可以选择 %0d %0a (表会回车换行)

构造 payload:

<img%0dsrc=1%0dοnclick="alert(1)">
<img%0asrc=1%0aοnerrοr=alert(1)>

在这里插入图片描述
点击上图中红圈的小图片

在这里插入图片描述

levle-17

在这里插入图片描述
这关 上来就对所有输出点进行防护,同时对 <>" 进行了转义
但是我们还是可以利用 < embed >标签,定义嵌入的内容,比如,本关提到的插件,我们可以使用 on事件去触发,但是我们需要先用 b 去闭合前面的等号
这里给大家放一张的源码图片,看一下闭合
在这里插入图片描述

构造 payload:

arg01=a&arg02=b onmouseover=alert(1)

在这里插入图片描述

level-18

在这里插入图片描述
哎,我们可以看到,进到 18关 与17关不同的是,没有跳转下一关的表示和链接了,但是,这不影响我们做,我们观察它的源码,可以发现,与上一关,基本一致,所以,直接做即可。

构造payload:

arg01=a&arg02=b onmouseover=alert(1)

在这里插入图片描述

level-19 level-20

这两关是 flash xss 略,有兴趣的,大家可以去看看别的博客。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值