赞
踩
提前说明我使用的是xss在线版,所以就不分析源码了,建议大家在学习时自己搭建xss靶场(因为可以分析源码)。
https://xssaq.com/yx/
这是在线版网址,有需要的可以直接使用。
xss的基础理论我也不过多赘述,下面直接开始过关。
我们发现此时URL输入什么,图片上就是什么,那么输入点就找到了。
输入点即是
php?name=
输出点就是图片上显示的你输出的字母的地方
构造 payload:
第一关未进行任何过滤,我们输出再标签之间,直接构造即可
<script>alert(/xss/)</script>
也可以用其他事件onload,onclick,onerror,prompt,confirm等。例如:<svg/οnlοad=alert(1)>
本题有两个输入点,
即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代码中的“ "> ” 和 “ " ”都是为了闭合
我们在URL中输入测试,发现页面并无输出,此时我们在URL中的输入点也被实体化了,如果有源码的朋友,应该可以发现这样一个的一个语句
<input name=keywordvalue='".htmlspecialchars($str)."'>
并且我们通过观察这个句子,发现它是以 ’ 单引号结束的。
但是htmlspecialchars()函数默认配置是不过滤单引号的,只有设置了quotestyle,才可以
构造 payload:
那么可以用单引号闭合,并且不能包含<>,则
οnclick='window.alert()
与第三关相比:
源码中多了两行以下两行代码
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
将输入的内容分别去掉了 <,>
输入框没有被实体化,但是’ 变为" 。
构造 payload:
">οnclick="window.alert()
源码中与第四关不同的的地方
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后,点击图中画圈的超链接
这关的源码中,相比第五关,src,data,herf也被替换了,最重要的是少了strtolower()函数,而str_replace函数是区分大小写的,所以这一关测试的主要是大小写问题,可以用大小写绕过。
构造 payload:
"><a HREF=javascript:alert()>test</a>
还是先闭合在用大小写绕过
还是输入js后,点test的过关
双写绕过:
分析第七关源码,发现它使用了strtolower函数先将大写转化为小写之前方法无用,但是从下面可以看出,它将替换的字符串都都替换为空,那么我们想,如果添加两个呢,他会不会只过滤一个呢,这里需要注意的是必须在字符串中间再添一个,而不是一个后面跟着一个。
构造 payload:
"><scrscriptipt>alert()</scrscriptipt>
"><scrscriptipt>alert()</scrscriptipt>
强调的这两个就是加的字符串
过关方法有很多,其他的大家自己可以试试。
我们分析源码可以发现:
没有过滤:’ > < % & #,
过滤了:" src on script data。
输出点在a标签内,href属性中,属性中双引号被转换成HTML实体,无法截断属性,很明显,我们想到了协议绕过javascript:alert,由于script关键字被过滤,伪协议后面可以使用html的实体编码。
构造 payload:
javascript:alert(1)
javasc r;ipt:alert(1)
注意啊,过关一定要点那个添加友情链接
HTML字符实体转换
字符实体是用一个编号写入HTML代码中来代替一个字符,在使用浏览器访问网页时会将这个编号解析还原为字符以供阅读。
这么做的目的主要有两个:
1、解决HTML代码编写中的一些问题。例如需要在网页上显示小于号(<)和大于号(>),由于它们是HTML的预留标签,可能会被误解析。这时就需要将小于号和大于号写成字符实体:
小于号这样写:< 或 <
大于号这样写:> 或 >
前面的写法称为实体名称,后面的写法则是实体编号。ISO-8859-1字符集(西欧语言)中两百多个字符设定了实体名称,而对于其它所有字符都可以用实体编号来代替。
2、网页编码采用了特定语言的编码,却需要显示来自其它语言的字符。例如,网页编码采用了西欧语言ISO-8859-1,却要在网页中显示中文,这时必须将中文字符以实体形式写入HTML代码中。
这题的源码和上一题基本一样,只不过多了一个自动检测URL,
如果发现没有带http:// 内容则会显示不合法, 那么怎么可以既有它,又不让它执行呢?
只需填加个注释,(可选择多行注释和单行注释)包含http://就行了
构造 payload:
javascript:alert(1) /*http:// */
先点击添加友情链接,再点击友情链接,即可过关
从源码中,我们看到只有两个URl参数是有效的,分别是keyword和t_sort,且标签input被隐藏了,而我们的渗透点在t_sort参数上
构造 payload:
t_sort=" οnclick="alert()" type="text
我们需要先修改URL
当输入js,修改URL后出现搜索框,点击即可过关
这关源代码中,对了一个HTTP_REFERER 参数,那么我们想到可以想到HTTP头,所以我们可以在请求头进行XSS注入。
接下来,我们利用burpsuite进行抓包。
注意,此处建议用burpsuite内嵌浏览器,比较稳定不用改代理,而且简单便捷
这是11关抓包后的源码,修改 Referer即可
构造 payload:
123456" οnmοuseοver=alert(1) type="text"
onmouseover是鼠标滑过事件。
本关源代码中HTTP_REFERER 参数 换为了HTTP_USER_AGENT参数 其实抓包啥的与上一关一摸一样就是请求头从Referer换成了User-agent ,通关方法和11关差不多
构造 payload:
123456" οnmοuseοver=alert(1) type="text
本关源码多了一个COOKIE变量,想到HTTP请求头
所以和前面两关大差不差
构造 payload:
user=123456" οnmοuseοver=alert(1) type="text
当你进入本关时,便可以看到 本关相较于其他关,页面加载不出来,同时,完成后需要点击链接跳转。
本关主要考察EXIF
Exif是Exchangeable image file format(交换图像文件格式)的缩写,它是图像文件中包含的元数据的标准格式。Exif数据记录了拍摄照片的设备和设置,如拍摄时间、焦距、曝光度、ISO等信息,这些数据可以帮助人们更好地管理和组织他们的数字图像,同时为后期处理和编辑提供更准确的信息。Exif信息通常包含在JPEG、TIFF等格式图像中。
**漏洞原理:**通过修改图片的exif信息,造成解析图片exif的XSS
推荐使用exiftool使用
本题用到一个比较重要的知识 文件包含
建议大家取学习一下
菜鸟教程网址如下:
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)" "'
试了很多方法 不知道哪里出了问题,始终无法通关,可能是环境?
本关的源码中,有大小写输入转换,并且后面相接有四次替换检查
分别对 script 空格 / 进行了替换
但是值得注意的是**<>**没被替换
另外script被替代,我们可以使用img标签,
剩下我们就需要考虑如何把空格的影响给去掉,这时候就需要使用编码来进行绕过了(上文有编码的网址),可以选择 %0d %0a (表会回车换行)
构造 payload:
<img%0dsrc=1%0dοnclick="alert(1)">
<img%0asrc=1%0aοnerrοr=alert(1)>
点击上图中红圈的小图片
这关 上来就对所有输出点进行防护,同时对 <>," 进行了转义
但是我们还是可以利用 < embed >标签,定义嵌入的内容,比如,本关提到的插件,我们可以使用 on事件去触发,但是我们需要先用 b 去闭合前面的等号
这里给大家放一张的源码图片,看一下闭合
构造 payload:
arg01=a&arg02=b onmouseover=alert(1)
哎,我们可以看到,进到 18关 与17关不同的是,没有跳转下一关的表示和链接了,但是,这不影响我们做,我们观察它的源码,可以发现,与上一关,基本一致,所以,直接做即可。
构造payload:
arg01=a&arg02=b onmouseover=alert(1)
这两关是 flash xss 略,有兴趣的,大家可以去看看别的博客。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。