DVWA-XSS (Reflected)

简介

XSS(cross-site scripting)

跨站脚本攻击,通过web站点漏洞,向客户端交付恶意脚本代码,这些代码可以被浏览器成功的执行,从而实现对客户端的攻击;

XSS可以盗取客户端cookie,将客户端重定向到第三方网站;

客户端脚本语言

弹窗警告、广告;

JavaScript;

在浏览器中执行;

XSS漏洞类型

存储型XSS;(持久型)

 恶意代码被保存到目标网站的服务器中,每次用户访问时都会执行脚本代码,这种攻击具有较强的稳定性和持久性;

反射型XSS;(非持久型)

 恶意代码并没有保存在目标网站,通过引诱用户点击一个恶意链接来实施攻击的;

DOM型XSS

 DOM型XSS是一种基于DOM树的XSS,例如服务器端经常使用document.boby.innerHtml等函数动态生成html页面,如果这些函数在引用某些变量时没有进行过滤或检查,就会产生DOM型的XSS;DOM型XSS可能是存储型,也有可能是反射型;

危害

窃取管理员帐号或Cookie,入侵者可以冒充管理员的身份登录后台。使得入侵者具有恶意操纵后台数据的能力,包括读取、更改、添加、删除一些信息。
窃取用户的个人信息或者登录帐号,对网站的用户安全产生巨大的威胁。例如冒充用户身份进行各种操作。
网站挂马。先将恶意攻击代码嵌入到Web应用程序之中。当用户浏览该挂马页面时,用户的计算机会被植入木马。
发送广告或者垃圾信息。攻击者可以利用XSS漏洞植入广告,或者发送垃圾信息,严重影响到用户的正常使用。

安全级别: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参数,并没有对参数做任何过滤;例如:输入a,则返回含有a的js页面;

构造弹窗

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

在这里插入图片描述
重定向

<script>window.location="http://www.baidu.com"</script>

访问192.168.37.128/a.jpg

<iframe src='http://192.168.37.128/a.jpg' height='0' width='0'></iframe>

获取cookie

<script>alert(document.cookie)</script>

监听

步骤:

1. 制作一个js脚本;

2. 把js脚本放到www目录下;

3. 开启阿帕奇服务;

4. 监听端口;

5. 访问js脚本;

6. 获取到js脚本实现的结果;

首先在Kali上写a.js脚本,开启Apache服务,并监听指定的端口;
在这里插入图片描述
在这里插入图片描述
输入

查看Kali监听到的cookie值;
在这里插入图片描述

安全级别: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>过滤,可以使用事件类型标签绕过,也可使用嵌套构造和大小写转换绕过

构造弹窗

<img src=1 onerror=alert('xss') />

在这里插入图片描述
安全级别: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>";
}

?> 

源码分析

正则过滤更加完善,不区分大小写,且使用通配符匹配,导致嵌套构造的方法也不能成功,但依旧可以使用事件类型标签或伪协议的方法

构造弹窗

<img src=1 onerror=alert('xss') />

在这里插入图片描述

安全级别: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();

?> 

源码分析

name变量通过htmlspecialchars()函数被HTML实体化后输出在了标签中,目前来说没有什么的姿势可以绕过,如果这个输出在一些标签内的话,还是可以尝试绕过的
当安全级别为Impossible时,使用htmlspecialchars函数把预定义的字符&、”、 ’、<、>转换为 HTML 实体,防止浏览器将其作为HTML元素(特殊意义)

防护总结

转义字符输出
白名单验证
HTML实体化

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值