Jay jay
文章28
标签2
分类0
xss challenges学习

xss challenges学习

xss challenge简介

xss challenge是一个xss漏洞练习的平台,安装很简单,解压到phpstuday的www目录下访问即可。
xss challenge

xsschallecge通关学习

level 1 学习

第一关
可以在url中看到有一个参数传递
参数
源码
第一关源码
可以看到php代码中接收到name并没有做任何处理直接展示,我们直接在参数中输入<script>alert(1)</script>
可以看到成功弹窗
点击确定后跳转到第二关

level 2 学习

第二关
我们直接尝试第一关的语句,没有弹窗但显示到了页面上语句
没有弹窗
查看源码
源码
发现使用htmlspecialchars函数把预定义的字符转换成了html实体
没有弹窗
但是下边input框中的没有使用这个函数就可以构造闭和输入框来产生xss

法1
闭合搜索框来弹窗
直接输入<img src="#" onerror=alert(1)>查看源码
直接输入
我们闭合搜索框输入"><img src="#" onerror=alert(1)>
前边加一个”>首先闭合输入框然后再执行构造语句
弹窗
闭合
法2
鼠标滑过"onmouseover=alert(1)>弹窗
鼠标滑过弹窗
法3
点击搜索框弹窗" onclick=alert(1)>
点击框弹

level 3 学习

补充知识
js中一共有三种注释方式

/*xxxxx*/多行注释
//xxxx 单行注释
<!- xxx 这种注释内容用混淆一般不推荐

第三关
可以看到两个地方都加了转换实体的函数,但是这个函数没有对单引号转换所以可以使用单引号闭合绕过,直接输入"><script>alert(1)</script><"
双引号
发现双引号直接被转义,我们尝试单引号'><script>alert(1)</script><'
单引号绕过
尖括号过滤
可以发现左右尖括号被转义,这里需要右键查看网页源码才能看到
我们需要语句中没有被转义的字符我们构造' onclick=alert(1)
尝试
尝试点击输入框没有弹窗出现,尝试分析页面
页面源码
发现alert后边的单引号没有闭合,我们在语句中加上单引号来闭合

onclick
![成功绕过](xss-challenges学习/2023-03-27-12-42-44.png)
**法2**
在这里我们也可以使用注释方法注释掉后边的单引号内容
写法有一下三种

```js
1 ' onclick=alert(1) //haha
2 ' onclick=alert(1) <!-haha
3 ' onclick=alert(1) /*haha*/

注释绕过
这里也可以使用鼠标移动事件' onmouseover=alert(1) //

level 4学习

补充知识
str_replace()函数以其他字符替换字符串中的一些字符(区分大小写)
str_ireplace()函数执行不区分大小写的搜索
首先查看靶场和源码
查看靶场详细
查看源码我们发现不仅使用了htmlspecialchars函数,并且使用str_replace()函数将左右尖括号替换为空。同样在这里不能使用尖括号,使用onclick=alert(1)尝试
尝试语句
分析可知使用双引号将前面的value进行闭合,再注释掉后面的双引号,或者将双引号闭合
法1
" onclick=alert(1) "
成功
点击成功弹窗
其他方法
使用三种注释来闭合,使用鼠标移动事件来弹窗

level 5 学习

补充知识
strtolower()把所有字符转换为小写函数

五关
通关分析代码首先将大小写统一,然后直接过滤了<script和on关键词,这里无法在使用上述方式绕过,可没有过滤尖括号,可以使用伪协议来进行构造

a标签的一种写法: <a href="javascript:;"></a>

因此构造语句

"><a href="javascript:alert(1)">

这里需要点击才可以触发
绕过成功

也可以直接使用iframe标签直接触发"><iframe src=javascript:alert(1)>
直接执行

level 6 学习

第六关
可以从代码中看到能过滤的都过滤了,但是与第五关相比,没有对大小写进行限制,因此大小写绕过" ><a hrEF="Javascript:alert(1)">
大小写绕过
同样iframe标签也可以。

level 7 学习

第七关
查看代码得知,使用str_replace()函数将常用标签过滤了,而且做了大小写处理,这里利用双写方式绕过

"><a hhrefref="javascscriptript:alert(1)">
"><iframe Ssrcrc=javasscriptcript:alert(1)>

双写绕过
tips:包裹关键词的时候并不是每一个单词都要进行双写,这里一定要保留一个完整的需要被替换的词

level 8 学习

补充知识
html字符实体:html实体是一段以连字号(&)开头,以分号(;)结尾的文本(字符串)实体名称对大小写敏感。它主要是为了解决一下的问题:

1. 解决HTML代码编写中的一些问题。例如需要在网页上显示小于号(<)和大于号(>),由于它们是HTML的预留标签,可能会被误解析为标签。这时就需要将小于号和大于号写成字符实体:
小于号这样写:&lt; 或 &#60;
大于号这样写:&gt; 或 &#62;
2. 键盘上无法打印的符号
3. 连续的空格

第八关
查看代码发现,输入的str先进行了小写转换,然后再经过一些列关键词替换,这里无法使用过滤的关键词和引号进行绕过,在这里面一共有两个输出点,第一是采用htmlspecialchars()函数实体化,第二进行了其次过滤处理,首先尝试伪协议绕过:
javascript:alert(1)
尝试
发现确实过滤替换了,在这里尝试用html字符实体进行尝试绕过可以再在线网站HTML字符实体转换进行转换
转换
成功绕过
同时也可以对script的任意字母进行编码,如对s进行编码从而绕过java&#x73;cript:alert(1)
部分实体
也可以使用tab和回车键进行编码绕过

javascrip&#x09;t:alert(1) 
javascrip&#x0a;t:alert(1)

level 9 学习

第九关
源码:
源码
通过源码可知首先对输入的字符串进行了过滤处理,在最后一步的时候判断是否存在http://头,没有则判定为非法操作,因此在这里可以通过注释符的方式添加进来进行绕过即可。输入javascrip&#x09;t:alert(1)提示连接不合法
提示
这里可以加注释绕过javascrip&#x09;t:alert(1) // http://
添加http头绕过
成功弹窗

level 10 学习

第十关
源码
源码
通过源码分析可知需要传入两个参数一个keyword,另一个t_sort。而且过滤了尖括号,页面中还隐藏了三个元素,并且前两个将值替换为空,最后一个值是过滤了尖括号之后的结果,因此首先尝试基础语句:
尝试
t_sort参数尝试
可以看到尖括号被过滤了,尝试绕过

payload:
" type="password" onclick=alert(1) //
完整的payload:
keyword=hacked by crow&t_sort=" type="text" onclick=alert(1) //
其中//属于必须要的注释符,可以使用其他的注释符进行替换也可

成功绕过
也可以更换事件onmouseover事件

level 11 学习

第11关
分析源代码,可以知道对输入的keyword和t_sort进行了关键词过滤,但是对于str11到str33过滤尖括号,先尝试一下语句看看页面的返回
keyword=hacked by crow & t_sort= <script>alert(1)</script>
查看页面响应
在这里看源码str11参数接受的是http_referer中的值,我们可以使用burp或者hackbr向http_referer参数中构造语句

payload1:
" type='text' onclick=alert(1) //
payload2:
" type='text' onmouseover=alert(1) //
// tips:需要在referer中进行构造

成功弹窗

level 12 学习

第12关
同过源码分析可知与11关很像只不过将http_referer替换为了UA因此直接用hackbr等工具直接替换即可

payload1:
" type='text' onclick=alert(1) //
payload2:
" type='text' onmouseover=alert(1) //
// tips:需要在user-agent中进行构造

ua中xss

level 13 学习

第13关
经过分析可得出和11、12关一样这里只不过指定的是cookie因此构造如下:

payload1:
" type='text' onclick=alert(1) //
payload2:
" type='text' onmouseover=alert(1) //

// tips:需要在cookies中进行构造

cookie中

level 14 学习

补充知识
exif:可交换图像文件格式(exchangeable image file format 简称exif)是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。
事例
Windows下可以直接右键修改这些属性,有些网站可以读取exif信息,当传入一张含有恶意信息的图片的时候,就可以触发payload

14关代码

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>欢迎来到level14</title>
</head>
<body>
<h1 align=center>欢迎来到level14</h1>
<center><iframe name="leftframe" marginwidth=10 marginheight=10 src="http://www.exifviewer.org/" frameborder=no width="80%" scrolling="no" height=80%></iframe></center><center>这关成功后不会自动跳转。成功者<a href=/xss/level15.php?src=1.gif>点我进level15</a></center>
</body>
</html>

分析代码可以看出是跳转到一个能够读取exif信息的网站,但是这个网站存在exif xss漏洞,因此可以直接触发xss,所以只要将src后面的网址进行替换到一个有这样漏洞的网站即可。

level 15 学习

第15关
引入了angular.min.js而且使用ng-include指令包含外部html文件,包含的内容将作为指定元素的子节点。ng-include属性值可以是一个表达式,返回一个文件名,默认情况下,包含文件需要包含在同一个域名下因此可以直接构造src='level1.php?name=<img src=1 onerror=alert(1)>'
成功弹窗

level 16 学习

第16关

从源码可以看出script等均被替换为空格符号,但是这里没有过滤尖括号,可以尝试尖括号过滤<img src=1 onerror=alert(1)>
尝试
出现了新问题空格被替换为空格符号,这里尝试使用%0a来替换空格
当然也可以使用别的符号替换如%0d回车符号等
<img%0dsrc=1 %0donerror=alert(1)>
成功弹窗

level 17 学习

源码
源码
通过源代码和基础的xss反弹代码发现,arg01和arg02的参数在处理之后进行了拼接
拼接
而htmlspecialchars函数会将输入的数据变成html实体,过滤了尖括号和双引号,尝试其他方式绕过?arg01=a&arg02= onmouseover=alert(1)这里在arg02参数后面有一个空格,不然就是将属性与之前的xsf01.swf?进行了连接但是这里由于插件不支持无法演示18、19、20关

后续推荐学习

推荐学习靶场haozi的靶场https://github.com/haozi/xss-demo

本文作者:Jay jay
本文链接:https://yyj-xx.github.io/2023/03/27/xss-challenges%E5%AD%A6%E4%B9%A0/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可