freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

DVWA XSS (Reflected) 反射型跨站脚本
wakemeup 2021-06-28 14:17:19 199843

DVWA XSS (Reflected) 反射型跨站脚本

XSS 漏洞:

全称Cross Site Scripting,跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

xss分类:

反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。

存储型XSS:<持久化> 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。

DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。

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>';
}

?>

源码分析:
对name 的 传 参 没 有 做 任 何 的 过 滤 , 只 是 检 测 了 name的传参没有做任何的过滤,只是检测了name的传参没有做任何的过滤,只是检测了name存在且不为空就直接输出在网页中


image.png

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>";
}

?>

源码分析:
过滤了script标签,使用str_replace函数将输入中的script替换为空。可以使用事件类型标签绕过

大小写绕过:
双写方式绕过str_replace()函数:
<scr
使用非script标签的xss payload:
img标签:
<img src=1 onerror=alert('xss')>
image.png

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表示不区分大小写)不再有效,但依旧可以使用事件类型标签

<img src=1 onerror=alert('xss')>
image.png

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

?> 

源码分析:
PHP htmlspecialchars()函数
把预定义的字符转换为HTML实体:
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '//生效需要加ENT_QUOTES参数
< (小于)成为 <

(大于)成为 >
可以看到,Impossible Security Level的代码使用htmlspecialchars函数把预定义的字符:& " ' < >转换为HTML实体,防止浏览器将其作为HTML元素。

防护总结:

转义字符输出

白名单验证

HTML实体化

# 渗透测试 # web安全 # 漏洞分析
本文为 wakemeup 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
wakemeup LV.4
少就是多,慢就是快
  • 13 文章数
  • 5 关注者
网站如何防止CSRF攻击
2021-11-05
Pikachu靶场XSS(跨站脚本)
2021-08-03
DVWA DOM型XSS
2021-06-29