xss challenges学习
xss challenge简介
xss challenge是一个xss漏洞练习的平台,安装很简单,解压到phpstuday的www目录下访问即可。
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中一共有三种注释方式
|
可以看到两个地方都加了转换实体的函数,但是这个函数没有对单引号转换所以可以使用单引号闭合绕过,直接输入"><script>alert(1)</script><"
发现双引号直接被转义,我们尝试单引号'><script>alert(1)</script><'
可以发现左右尖括号被转义,这里需要右键查看网页源码才能看到
我们需要语句中没有被转义的字符我们构造' onclick=alert(1)
尝试点击输入框没有弹窗出现,尝试分析页面
发现alert后边的单引号没有闭合,我们在语句中加上单引号来闭合
|
这里也可以使用鼠标移动事件' 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关键词,这里无法在使用上述方式绕过,可没有过滤尖括号,可以使用伪协议来进行构造
|
因此构造语句
|
这里需要点击才可以触发
也可以直接使用iframe标签直接触发"><iframe src=javascript:alert(1)>
level 6 学习
可以从代码中看到能过滤的都过滤了,但是与第五关相比,没有对大小写进行限制,因此大小写绕过" ><a hrEF="Javascript:alert(1)">
同样iframe标签也可以。
level 7 学习
查看代码得知,使用str_replace()函数将常用标签过滤了,而且做了大小写处理,这里利用双写方式绕过
|
tips:包裹关键词的时候并不是每一个单词都要进行双写,这里一定要保留一个完整的需要被替换的词
level 8 学习
补充知识
html字符实体:html实体是一段以连字号(&)开头,以分号(;)结尾的文本(字符串)实体名称对大小写敏感。它主要是为了解决一下的问题:
|
查看代码发现,输入的str先进行了小写转换,然后再经过一些列关键词替换,这里无法使用过滤的关键词和引号进行绕过,在这里面一共有两个输出点,第一是采用htmlspecialchars()函数实体化,第二进行了其次过滤处理,首先尝试伪协议绕过:javascript:alert(1)
发现确实过滤替换了,在这里尝试用html字符实体进行尝试绕过可以再在线网站HTML字符实体转换进行转换
同时也可以对script的任意字母进行编码,如对s进行编码从而绕过javascript:alert(1)
也可以使用tab和回车键进行编码绕过
|
level 9 学习
源码:
通过源码可知首先对输入的字符串进行了过滤处理,在最后一步的时候判断是否存在http://
头,没有则判定为非法操作,因此在这里可以通过注释符的方式添加进来进行绕过即可。输入javascrip	t:alert(1)
提示连接不合法
这里可以加注释绕过javascrip	t:alert(1) // http://
添加http头绕过
level 10 学习
源码
通过源码分析可知需要传入两个参数一个keyword,另一个t_sort。而且过滤了尖括号,页面中还隐藏了三个元素,并且前两个将值替换为空,最后一个值是过滤了尖括号之后的结果,因此首先尝试基础语句:
可以看到尖括号被过滤了,尝试绕过
|
也可以更换事件onmouseover事件
level 11 学习
分析源代码,可以知道对输入的keyword和t_sort进行了关键词过滤,但是对于str11到str33过滤尖括号,先尝试一下语句看看页面的返回keyword=hacked by crow & t_sort= <script>alert(1)</script>
在这里看源码str11参数接受的是http_referer中的值,我们可以使用burp或者hackbr向http_referer参数中构造语句
|
level 12 学习
同过源码分析可知与11关很像只不过将http_referer替换为了UA因此直接用hackbr等工具直接替换即可
|
level 13 学习
经过分析可得出和11、12关一样这里只不过指定的是cookie因此构造如下:
|
level 14 学习
补充知识
exif:可交换图像文件格式(exchangeable image file format 简称exif)是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。
Windows下可以直接右键修改这些属性,有些网站可以读取exif信息,当传入一张含有恶意信息的图片的时候,就可以触发payload
14关代码
|
分析代码可以看出是跳转到一个能够读取exif信息的网站,但是这个网站存在exif xss漏洞,因此可以直接触发xss,所以只要将src后面的网址进行替换到一个有这样漏洞的网站即可。
level 15 学习
引入了angular.min.js而且使用ng-include指令包含外部html文件,包含的内容将作为指定元素的子节点。ng-include属性值可以是一个表达式,返回一个文件名,默认情况下,包含文件需要包含在同一个域名下因此可以直接构造src='level1.php?name=<img src=1 onerror=alert(1)>'
level 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