GET传递的参数直接输出在src中会存在反射型xss漏洞,本次复现的目的是利用url编码规则构造url绕过xss限制。
UrlEncode编码规则:将需要转码的字符的ASCII码值转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。
通过分析源代码可知屏幕上打印图片路径来自于GET传递的参数,同时会将接收到参数中的()$<>'等字符均会被替换为空格。<>被过滤,闭合标签写入新标签不可行;&被过滤,使用&#的HTML实体编码不可行,因此使用url编码。
demo.php源代码
<?php
header('X-XSS-Protection: 0');
$xss = isset($_GET['xss'])? $_GET['xss'] : '';
$xss = str_replace(array("(",")","&","\\","<",">","'"), '', $xss);
echo "<img src=\"{$xss}\">";
?>
通过分析源代码可知屏幕上打印图片路径来自于GET传递的参数,同时会将接收到参数中的()$<>'等字符均会被替换为空格。<>被过滤,闭合标签写入新标签不可行;&被过滤,使用&#的HTML实体编码不可行,因此使用url编码。
构造url:闭合双引号,逃逸出限制&