wordpress漏洞_WordPress XSS漏洞可能导致远程执行代码(RCE)

原作者: Ziyahan Albeniz

在2019年3月13日,专注于静态代码分析软件的RIPS科技公司发布了他们在所有版本的WordPress 5.1.1中发现的跨站点脚本(XSS)漏洞的详细信息。该漏洞已在不同类别的各种网站上公布。有些人将其归类为跨站点请求伪造(CSRF)漏洞,而其他人则将其正确归类为XSS。在本文中,我们将分析此WordPress XSS漏洞(编号为CVE-2019-9887),该漏洞导致远程执行代码(RCE)漏洞。

b478ffbe98f6e1fa148940fa0adc0c71.png

WordPress的Pingback和Trackback功能

在WordPress中,nonce需要一个值来防止CSRF攻击。这是一个随机值,在每个请求中都会更改,并且只有服务器和用户的浏览器才知道。但是,nonce自2009年以来,WordPress中的评论部分没有使用过值。这是因为WordPress开发人员做出了两个设计决策,限制了安全令牌的正确实现以防止CSRF攻击。

WordPress中的pingback和trackback功能要求缺少nonce值才能正常运行:

  • pingback功能通知博客他们的文章已从某人的帖子链接。这增加了在其搜索引擎优化中使用反向链接方法在任何搜索引擎上的网站评级。
  • 当博主链接到不是使用WordPress构建的网站时,会使用引用功能。

WordPress中评论的过滤

当攻击者设法重定向经过身份验证的WordPress管理员用户以访问攻击者控制的网站时,他们可以代表此管理员用户提交表单,以便在用户名称的博客上发布评论。除了WordPress开发人员之外,任何人都认为这将是一个严重的漏洞。但是,如果要避免破坏pingback,则行为是绝对必要的。

为了最小化表单提交代表管理员的影响,他们实现了一般不会阻止CSRF的nonce。如果设置了正确的现时(如果管理员使用实际表单发布评论),则评论中的HTML代码不会像表单提交是CSRF的结果那样严格过滤。

因此,如果管理员帐户发出的评论请求中没有nonce令牌,WordPress会使用nonce值'_wp_unfiltered_html_comment_disabled'来检查是否应该从HTML标签中清除评论。

分析WordPress的有缺陷的过滤机制

RIPS Technologies的一名工程师在静态代码分析期间发现了/wp-includes/comment.php文件中检测和清理机制的缺陷。这是与缺陷相关的代码块。

if ( current_user_can( 'unfiltered_html' ) ) { if (! wp_verify_nonce( $_POST['_wp_unfiltered_html_comment'], 'unfiltered-html-comment' )) { $_POST['comment'] = wp_filter_post_kses($_POST['comment']); }}else { $_POST['comment'] = wp_filter_kses($_POST['comment']);}

根据代码,如果当前用户没有权限unfiltered_html,则注释文本wp_filter_kses将从其中的HTML元素定向到要清理的函数。

由于攻击请求将通过登录管理员帐户的浏览器发送,并且管理员帐户具有权限unfiltered_html,因此代码的缺陷从第一个if语句开始。

在第一个条件语句中,如果未验证nonce令牌,则注释文本将通过一个名为的另一个函数wp_filter_post_kses来清理输入。

职能部门之间的主要区别wp_filter_kses,并wp_filter_post_kses是wp_filter_kses删除所有的意见,除了基本的HTML标签,如href属性和锚标记。该wp_filter_post_kses函数清理所有潜在风险的HTML标记,但它比wp_filter_kses函数更宽松。

使用HTML标签绕过清理

RIPS科技公司的工程师发现,HTML元素和属性的清理过程存在一个重大缺陷。一旦评论被清理,属于标签的属性通过将它们解析为关联数组而针对SEO目的进行优化。

例如,如果带有标记的属性是href="#" rel="nofollow",则字符串将被解析为一个数组,其中每个属性名称都是键:

function wp_rel_nofollow_callback( $matches ) { $text = $matches[1]; $atts = shortcode_parse_atts($matches[1]); ⋮

完成此转换后,您可以使用以下方式访问href锚标记的功能$atts["href"]。接下来,WordPress检查注释中的锚标记是否具有该rel属性。

重要的是要注意,rel锚元素中的属性只有在评论者拥有管理员帐户时才能存在。该wp_filter_kses函数不允许此属性; 该wp_filter_post_kses函数的作用。

 if (!empty($atts['rel'])) { // the processing of the 'rel' attribute happens here ⋮ $text = ''; foreach ($atts as $name => $value) { $text .= $name . '="' . $value . '" '; } } return '';}

使用WordPress漏洞插入XSS Payload

如上面以粗体显示的代码行所示,连接的字符串值不会以任何方式进行清理。如果攻击者将以下title属性添加到注释中的锚标记,则可能会滥用此功能的性质。

 onmouseover=alert(1) id="'

处理后代码行将变为以下内容(注意双引号):

希望利用此漏洞的恶意用户必须欺骗具有管理员权限的用户访问将触发和执行有效负载的页面。

此时发送具有XSS有效负载的注释请求。

为了进行秘密攻击,并在提交表单时避免顶级导航,表单的响应将定向到具有display:nonetarget属性中指定的样式的隐藏iframe 。

最后,管理员浏览器将查看带有XSS有效负载评论的博客文章,以确保攻击完成。执行攻击后,将通过管理面板编辑模板文件。然后,攻击者可以执行PHP代码注入并将此XSS攻击转换为远程执行代码(RCE)。

修复WordPress中的漏洞

如果您使用WordPress,解决此问题的最快速最简单的方法是更新到修复漏洞的5.1.1版。

此外,Netsparker报告任何使用过时WordPress版本的扫描网站,并显示当前版本的相关漏洞。这是一个这样的报告的例子。

6e80cdb3a9986ba3eaf93271fb188ecc.png

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

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

相关文章

DJ轮回舞曲网下载教程

该网站网址为:http://www.92cc.com/ 昨天有网友问我这个网站能不能下载。我告诉他,只要能在线试听的就能下载 于是今天出个临时教程 教大家如何获取试听的音乐URL。 第一步找到试听的网址,如: http://www.92cc.com/p97206.html 第…

【DP】【Asia - Harbin - 2010/2011】【Permutation Counting】

【题目描述】Given a permutation a1, a2,...aN of {1, 2,..., N}, we define its E-value as the amount of elements where ai > i. For example, the E-value of permutation {1, 3, 2, 4} is 1, while the E-value of {4, 3, 2, 1} is 2. You are requested to find h…

三丰三坐标编程基本步骤_三丰三坐标CRYSTA APEX S776

日本三丰MITUTOYO从1934年成立至今,专力致于精密测量仪器的研发和生产,在七十多年中,日本三丰量具MITUTOYO已成为世界最大综合测量仪器的制造商,它生产的产品包括千分尺,卡尺,千分表,高度尺&…

Unity3D研究院之Android同步方法读取streamingAssets

版本Unity5.3.3 Android 小米pad1 首先非常感谢 守着阳光 同学在下面的留言。让我解决了一个大的谜团。。 开始我知道 StreamingAssets 路径是这个 path “jar:file://” Application.dataPath “!/assets/”; 文档在这里: http://docs.unity3d.com/Manual/Strea…

Codeforces Round 261 Div.2 D Pashmak and Parmida's problem --树状数组

题意:给出数组A,定义f(l,r,x)为A[]的下标l到r之间,等于x的元素数。i和j符合f(1,i,a[i])>f(j,n,a[j]),求有多少对这样的(i,j). 解法:分别从左到右,由右到左预处理到某个下标为止有多少个数等于该下标&…

列举ospf的5种报文类型_危险品货物各种包装类型以及装箱技巧

对于危险货物来说,其危险性的大小除与货物的本身性质有关外,还与货物的包装方式密切相关。因而,危险货物进箱条件的确定,也必须考虑到货物的包装方法。一、集装箱内径20GP内径:长5.8M*宽2.34M*高2.34M40GP内径&#xf…

Java 数组基础

数组 数组(Array):相同类型数据的集合。 定义数组 方式1(推荐,更能表明数组类型) type[] 变量名 new type[数组中元素的个数]; 比如: int[] a new int[10]; 数组名,也即引用a&…

linux nc命令

参考 :http://www.linuxso.com/command/nc.html NC 全名 Netcat (网络刀),作者是 Hobbit && ChrisWysopal。因其功能十分强大,体积小巧而出名,又被大家称为“瑞士军刀”。nc - TCP/IP swiss army knife nc 常用于溢出、反向链接、上传…

shell 判断字符串相等_编程小短文:Bash子字符串还在用==?试试=~性能瞬间飙升100倍...

引言Bash 是 Linux 系统下钦定的 shell。你可以通过cat /etc/shells查看当前系统支持的 shell 种类。Bash 不但是系统管理员与内核交互的利器,且是一种语言,可以编写大多数系统的自动化脚本,用于简化运维工作。今天我们学习一个知识点&#x…

Xss Csrf 简介

一、Js在web的执行环境 1.直接触发 •在HTML页中插入<script></script>脚本标记。JS嵌入到HTML中的两种方式&#xff1a; •1&#xff09;直接嵌入<script>标签 <script language“javascript”> document.write(“hello world!”); </script> •…

linux系统如何调屏幕亮度,Linux入门教程:Ubuntu笔记本屏幕亮度调节

前天入手一台Dell笔记本&#xff0c;i7第五代处理器&#xff0c;8G内存&#xff0c;1T硬盘&#xff0c;很符合我对移动工作站的要求。今天果断将正版win8替换为Ubuntu&#xff0c;DIY的后果就是原来3秒启动系统变成了现在15秒&#xff0c;忍了。但是另一个问题十分困扰我&#…

linux 如何查看终端格式,你应该还不知道,Linux终端下的 Markdown 文档查看器

原标题&#xff1a;你应该还不知道&#xff0c;Linux终端下的 Markdown 文档查看器现在&#xff0c;Markdown 差不多已经成为技术文档的标准。它可以实现技术文档的快捷写作&#xff0c;以及输出发布。同样都是标记语言&#xff0c;但Markdown 文档相比HTML更加简单。一是体现在…

Android之 Fragment

什么是Fragment&#xff1a; Android是在Android 3.0 (API level 11)开始引入Fragment的。 可以把Fragment想成Activity中的模块&#xff0c;这个模块有自己的布局&#xff0c;有自己的生命周期&#xff0c;单独处理自己的输入&#xff0c;在Activity运行的时候可以加载或者移除…

安卓psp模拟器联机教程_刺激战场国际服下载方法教程!安卓ios模拟器都有

刺激战场国际服不需要VPN&#xff0c;不需要加速器。刺激战场国际服账号可以使用微信登入&#xff0c;进游戏页面点击more就可以了。安卓系统&#xff1a;①下载网易UU加速器&#xff0c;通过网易UU加速器平台直接下载。②有的机型不能通过网易UU下载&#xff0c;但是可以通过Q…

docker pdf 中文版 linux,Docker入门实战手册PDF

一、为什么要使用 Docker&#xff1f;1 、快速交付应用程序• 开发者使用一个标准的image 来构建开发容器&#xff0c;开发完成之后&#xff0c;系统管理员就可以使用这个容器来部署代码• Docker 可以快速创建容器&#xff0c;快速迭代应用程序&#xff0c;并让整个过程可见…

openldap linux客户端,OpenLDAP 客户端安装部署

六、OpenLDAP客户端验证1、配置/etc/openldap/ldap.conf默认客户端不允许查询OpenLDAP条目信息&#xff0c;如果需要让客户端查询条目&#xff0c;需要添加OpenLDAP服务端的URI以及BASE条目&#xff0c;命令如下&#xff1a;2、客户端验证用户的信息添加我已经在上篇博文里面介…

基于.Net Framework 4.0 Web API开发(4):ASP.NET Web APIs 基于令牌TOKEN验证的实现

概述&#xff1a; ASP.NET Web API 的好用使用过的都知道&#xff0c;没有复杂的配置文件&#xff0c;一个简单的ApiController加上需要的Action就能工作。但是在使用API的时候总会遇到跨域请求的问题&#xff0c; 特别各种APP万花齐放的今天&#xff0c;对API使用者身份角色验…

匈牙利命名法为何被淘汰_为何甲烷的习惯命名法用甲烷而不是一烷?

其实在有机化合物中文翻译早期&#xff0c;是有过用数字命名的阶段的&#xff0c;先上图。部分有机化合物在不同时期的汉译名对照那么后来为何未采用数字&#xff0c;而使用天干。与商务印书馆和郑贞文个人其实有很大关系。那么有机物中文命名的演进是怎样的呢&#xff1f;下面…

Windows下Mysql Cluster集群启动脚本与启动服务添加方法

3.2.8 集群启动脚本及启动服务注册 从上面的启动过程我们可以看出&#xff0c;Mysql集群启动命令较复杂&#xff0c;容易造成cmd窗口因误操作关闭而导致的数据库停止&#xff0c;在此我介绍一下如何将这些命令的操作变成windos的服务项&#xff0c;当windos启动时&#xff0…

iOS 本地化应用程序汇总 国际化

最近要做一个应用要实现本地化&#xff0c;因为使用的是xcode4&#xff0c;应用程序本地化的问题跟以前的版本还是有些不同&#xff0c;在网上找了些资料对于xcode4以上的版本资料还是相对较少&#xff0c;有些最后要通过手动创建文件&#xff0c;这样操作实在是太麻烦&#xf…