前言
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的插件。
完成后就去后台把插件启用
环境搭建是需要注意的是需要自己添加一个数据库来存放数据,使用命令
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"><script>alert(/POC3/);</script>&nf_form_filter&paged=1
实际利用的时候要根据自己的路径来进行相应的修改,使用方法直接复制到浏览器就可以触发XSS,实际利用的时候可以通过留言的方式去攻击。
能弹窗的话我们就可以利用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' ] = '<a href="' . admin_url( 'edit.php?post_status=all&post_type=nf_sub' ) . $form_id . '">'
. __( 'Completed', 'ninja-forms' ) . '</a>';
$views[ 'trash' ] = '<a href="' . admin_url( 'edit.php?post_status=trash&post_type=nf_sub' ) . $form_id . '">'
. __( 'Trashed', 'ninja-forms' ) . '</a>';
// 检查状态
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' ] = '<a href="' . admin_url( 'edit.php?post_status=trash&post_type=nf_sub' ) . $form_id . '">'
. __( 'Trashed', 'ninja-forms' ) . '</a>';
这句话来构造的,我们输入的格式已经很清楚的显示了出来。
思考
1.XSS获取cookie进行免密登陆
2.漏洞函数的快速定位