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

来源:互联网 发布:小博士隔音膜 淘宝网 编辑:程序博客网 时间:2024/05/21 16:57

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 tokengenerateSessionToken();?>

可以看到的是,代码中使用到了Anti—CSRF token用来防御跨站请求伪造,每次比较用户的tocken和服务器的session存储的token进行比较,如果相等才正常执行,之后进行产生新的token。Token的位置在form表单中,使用Firefox中的Firebug可以看到,每次都不一样,可以有效的防御CSRF。
这里写图片描述
在impossible级别中,对用户的输入进行处理时使用了htmlspecialchars函数。该函数的定义和用法如下。
这里写图片描述
DVWA的反射型XSS到此结束。

0 0