wordpresss-插件XSS漏洞复现

前言

wordpress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySql的数据库上架设属于自己的网站。同其它的CMS一样,他也有许多插件可以供使用,本文主要讲Ninja Forms 3.3.17的XSS漏洞(CVE-2018-19287)复现

环境搭建

先去官网下载相应版本的wordpress,网址:https://cn.wordpress.org/download/releases/
这里我们下载4.4版本,同样的还要下载对应版本的插件
,网址:https://downloads.wordpress.org/plugin/ninja-forms.3.3.17.zip
下载完后要把插件解压到/wp-content/plugins目录下,里面存放的都是wp的插件。
完成后就去后台把插件启用
wordpresss-插件XSS漏洞复现_第1张图片
环境搭建是需要注意的是需要自己添加一个数据库来存放数据,使用命令

CREATE DATABASE 数据库名;

漏洞复现

一个漏洞数据库平台:https://www.exploit-db.com/
里面记录了各种各样的已知漏洞及其poc,可以用于复现。从exploit-db上复制的poc:


http://127.0.0.1/wp-admin/edit.php?post_status=trash&post_type=nf_sub&form_id=1">&nf_form_filter&paged=1

实际利用的时候要根据自己的路径来进行相应的修改,使用方法直接复制到浏览器就可以触发XSS,实际利用的时候可以通过留言的方式去攻击。
wordpresss-插件XSS漏洞复现_第2张图片
能弹窗的话我们就可以利用xss平台获取管理员的cookie来进行登陆了。

漏洞分析

根据poc分析漏洞成因,通过关键字nf_sub确定核心文件\wp-content\plugins\ninja-forms\includes\Admin\Menus\Submissions.php。

//这是一个改变视图的函数
public function change_views( $views )

    {

        // 删除没用的视图

        unset( $views[ 'mine' ] );

        unset( $views[ 'publish' ] );

        // 如果from_id不为空

        if( ! empty( $_GET[ 'form_id' ] ) ) {

            // 把剩余的部分布到库中

            $form_id = '&form_id=' . $_GET[ 'form_id' ] . '&nf_form_filter&paged=1';

        } else {

            // 否则返回空字符串

            $form_id = '';

        }

        // 创建自己的视图

        $views[ 'all' ] = ''

                        . __( 'Completed', 'ninja-forms' ) . '';

        $views[ 'trash' ] = ''

                            . __( 'Trashed', 'ninja-forms' ) . '';

        // 检查状态

        if( ! empty( $_GET[ 'post_status' ] ) ) {

            // Depending on the domain set the value to plain text.

            if ( 'all' == $_GET[ 'post_status' ] ) {

                $views[ 'all' ] = __( 'Completed', 'ninja-forms' );

            } else if ( 'trash' == $_GET[ 'post_status' ] ) {

                $views[ 'trash' ] = __( 'Trashed', 'ninja-forms' );

            }

        }

        return $views;

    }

发现没有对form-id进行过滤

$form_id = '&form_id=' . $_GET[ 'form_id' ] . '&nf_form_filter&paged=1';

我们就可以考虑一下输入xss语句,其实,poc是根据

 $views[ 'trash' ] = ''

                            . __( 'Trashed', 'ninja-forms' ) . '';

这句话来构造的,我们输入的格式已经很清楚的显示了出来。

思考

1.XSS获取cookie进行免密登陆
2.漏洞函数的快速定位

你可能感兴趣的:(漏洞复现)