XSS漏洞

XSS(跨站脚本)是一种安全漏洞,分为反射型、存储型和DOM XSS。反射型XSS代码出现在URL中,存储型XSS会存储在服务器,而DOM XSS完全在客户端触发。DVWA源码分析展示了不同级别XSS的防护措施和漏洞利用方式。
摘要由CSDN通过智能技术生成

目录

前言

反射型XSS

存储型XSS

DOM XSS

DVWA源码

反射型(Reflected)

存储型(Stored)


前言

XSS即跨站脚本(Cross Site Script),发生在目标网站中目标用户浏览器层面上,当用户浏览器渲染整个HTML文档的过程中出现了不被预期的脚本指令并执行时,XSS就会发生。

通俗地总结XSS为:想尽一切办法将你的脚本内容在目标网站中目标用户的浏览器上解析执行即可

这个“跨”实际上属于浏览器的特性,而不是缺陷,造成“跨”这样的假象是因为绝大多数XSS攻击都会采用嵌入一段远程或者说第三方域上的脚本资源。

使用场景:

  • 直接嵌入html<script>标签中
  • 元素标签事件<body οnlοad=alert(‘xss’)>
  • 图片标签<img>
  • 框架标签<iframe>
  • DOM对象

反射型XSS

发出请求时,XSS代码出现在URL中,作为输入提交到服务端,服务端解析后响应,在响应内容中出现这段XSS代码,最后浏览器解析执行。这个过程就像一次反射,故称为反射型XSS。

比如http://www.test.com/reflect.php的代码如下:

<?php
echo $_GET['x'];
?>

输入x的值未经任何过滤就直接输出,可以提交:

http://www.test.com/reflect.php?x=<script>alert(1)</script>

服务端解析时,echo就会完整地输出:

<script>alert(1)</script>

到响应体中,然后浏览器解析执行触发。

存储型XSS

存储型XSS和反射型XSS的差别仅在于:提交的XSS代码会存储在服务端(不管是数据库、内存还是文件系统等),下次请求目标页面时不用再提交XSS代码

最典型的例子是留言板XSS,用户提交一条包含XSS代码的留言存储到数据库,目标用户查看留言板时,那些留言的内容会从数据库查询出来并显示,浏览器发现有XSS代码,就当做正常的HTML与JS解析执行,于是就触发了XSS攻击。

DOM XSS

它和反射型XSS、存储型XSS的差别在于,DOM XSS的XSS代码并不需要服务器解析响应的直接参与,触发XSS靠的就是浏览器端的DOM解析,可以认为完全是客户端的事情

//xss.html
<script>
eval(location.hash.substr(1));
</script>

触发XSS方式为:

http://www.test.com/xss.html#alert(1)

这个 URL#后的内容是不会发送到服务端的,仅仅是在客户端被接收并解析执行。

DVWA源码

反射型(Reflected)

Low.php

<?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 ( $key , array $array )

检查数组里是否有指定的键名或索引。数组里有键 key 时,array_key_exists() 返回 true。key 可以是任何能作为数组索引的值。

漏洞利用

输入:

<script>alert(/H
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值