[渗透测试] 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>
相关推荐
用户9623779544813 小时前
VulnHub DC-3 靶机渗透测试笔记
安全
叶落阁主2 天前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
用户962377954483 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机4 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机4 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954484 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star4 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954484 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher5 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行8 天前
网络安全总结
安全·web安全