Loading

DVWA 之 XSS(Reflected) - 反射型XSS

九、XSS(Reflected) - 反射型XSS

原理

XSS,全称 Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行。根据恶意代码是否存储在服务器中,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>';
}

?> 

array_key_exists() 函数检查某个数组中是否存在指定的键名,如果键名存在则返回 true,否则返回 false,这里键名为 name

low 级别的代码只是判断了 name 参数是否为空,如果不为空的话就直接打印出来,并没有对 name 参数做任何的过滤和检查,存在非常明显的 XSS 漏洞。

漏洞利用

输入<script>alert('xss')</script>,结果如下所示

2. Medium

Medium 级代码中,服务器端使用了 str_replace() 函数把输入的 <script>进行删除,但是 str_replace() 函数是区分大小写的,所以可以使用大写绕过,而且只过滤一遍,因此也可以使用双写绕过。

漏洞利用

  • 大写绕过:<SCRIPT>alert('xss')</SCRIPT>

  • 双写绕过:<sc<script>ript>alert('xss')</script>
  • 事件绕过:<a href = 'javascript:alert(666)'>click</a>

3. High

High 等级用 preg_replace() 函数对 <script> 标签进行正则过滤

漏洞利用

可以通过 img、body 等标签的事件或者 iframe 等标签的 src 注入恶意的 js 代码

输入<img src=1 onerror=alert('xss')>,代码执行成功

防护方法

  1. HttpOnly 属性
  2. 输入检查,检查特殊字符,XSS 特征等
  3. 输出检查,对输出进行编码
posted @ 2023-03-05 16:18  紫曜花  阅读(87)  评论(0编辑  收藏  举报