您的位置:首页 > 其它

DVWA漏洞学习(2)反射型XSS

2016-10-08 13:34 399 查看

XSS之反射型XSS

XSS又叫CSS(Cross Site Scripting),及跨站脚本攻击,是最常见的Web应用程序安全漏洞之一,在2013年度OWASP Top 10中排名第三。XSS主要分为三类,分别是反射型、存储行和DOM型。本文从源代码角度详细介绍DVWA中反射型XSS的实现原理和防御技巧。反射型XSS的源代码在DVWA\vulnerabilities\xss_r\source目录下。下面依次对其进行介绍。

0x01 low级别的反射型XSS

low级别的反射型XSS比较的简单,它对用户的输入不做任何处理即输出,所以实现起来比较简单,即最基本的js脚本即可。

<script>alert('xss')</script>




其源代码如下,原理简单,不再详细介绍。

<?php

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
$html .= '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}

?>


0x02 medium级别的反射型XSS

medium级别的反射型XSS相对容易,它的实现是对用户的输入进行简单的过滤,将用户的输入过滤掉script标签,并且不区分大小写,所以只要将script大写即可绕过。

<SCRIPT>alert('xss')</SCRIPT>




其源代码如下,原理简单,使用函数str_replace函数。

<?php

// 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
$html .= "<pre>Hello ${name}</pre>";
}

?>


0x03 hign级别的反射型XSS

high级别的反射型XSS目前身为菜鸟的我还不能绕过,只能从源码的角度分析了。其源代码如下。

<?php

// 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
$html .= "<pre>Hello ${name}</pre>";
}

?>


可以看到的是,代码中使用到了正则表达式,过滤了script标签,并且不区分大小写。使用到的函数是preg_replace。

0x04 impossible级别的反射型XSS

impossible级别的反射型XSS我认为重点教给大家防御技巧,当然也只能从源码的角度分析了。其源代码如下。

<?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
$html .= "<pre>Hello ${name}</pre>";
}

// Generate Anti-CSRF token
generateSessionToken();

?>


可以看到的是,代码中使用到了Anti—CSRF token用来防御跨站请求伪造,每次比较用户的tocken和服务器的session存储的token进行比较,如果相等才正常执行,之后进行产生新的token。Token的位置在form表单中,使用Firefox中的Firebug可以看到,每次都不一样,可以有效的防御CSRF。



在impossible级别中,对用户的输入进行处理时使用了htmlspecialchars函数。该函数的定义和用法如下。



DVWA的反射型XSS到此结束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: