frame是可用于在HTML页面中嵌入一些文件(如文档,视频等)的一项技术。对iframe最简单的解释就是“iframe是一个可以在当前页面中显示其它页面内容的技术”
通过利用iframe标签对网站页面进行注入,是利用了HTML标签,实际上就是一个阅读器,可以阅读通过协议加载的活服务器本地的文件、视频等
LOW
查看源码
目前url即为源码中所示的语句,所以我们需要post传参构造这三个参数值
没有过滤
所以我们可以直接注入
Medium
function xss_check_4($data)
{
// addslashes - returns a string with backslashes before characters that need to be quoted in database queries etc.
// These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte).
// Do NOT use this for XSS or HTML validations!!!
return addslashes($data);
}
又是使用addslashes函数对字符进行转义
可以看出medium不能控制paramurl的输入,所以只能通过控制ParamHeight和ParamWidth来实现注入
大体意思就是addslashes会在数据库查询中需要引用的字符(’,",\)前返回一个反斜杠字符串进行构造
源代码中
<?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
}
?>
它说,在难度等级为中等或高等的时候,将会以上述代码所示的这种方式来给参数传值
所以,我们可以构造payload为
http://bwapp/iframei.php?ParamUrl=https://www.meituan.com&ParamWidth=250">&ParamHeight=500
High
查看源代码过滤函数
function xss_check_3($data, $encoding = "UTF-8")
{
// htmlspecialchars - converts special characters to HTML entities
// '&' (ampersand) becomes '&'
// '"' (double quote) becomes '"' when ENT_NOQUOTES is not set
// "'" (single quote) becomes ''' (or ') only when ENT_QUOTES is set
// '<' (less than) becomes '<'
// '>' (greater than) becomes '>'
return htmlspecialchars($data, ENT_QUOTES, $encoding);
}
htmlspecialchars此函数会将预定义的字符(&,’,",<,>)转换为 HTML 实体,无法过滤,是安全的。