=

1 Подарок на новый год! CVE-2016-10033 + CVE-2016-10045

К новому году опубликована уязвимость, позволяющая выполнить произвольный удаленный код на на любых php сайтах с формами обратной связи. Эксплуатируется вызов функции mail в популярных библиотеках PHPMailer, SwiftMailer.

Началось все с исправления уязвимости CVE-2016-10033 в PHPMailer 5.2.17: добавили экранирование переменной $sender функцией escapeshellarg() перед вызовом функции mail(). Однако, не учли что использование функции экранирования escapeshellarg() может конфликтовать с escapeshellcmd(), которая применяется для пятого параметра саймой функцией mail(). В результате мы получим неэкранированную последовательность, которая передается параметром к системному вызову mail, что ведет к возможности выполнения любой шелл команды.

Например:

$mail->SetFrom("\"Attacker\\' -Param2 -Param3\"@test.com", 'Client Name');

Добавлено : Пт Дек 30, 2016 13:15

Автор : surg30n

Просмотров : 317

2 Эксплойт для Joomla 3.4.4 - 3.6.4 (CVE-2016-8869 and CVE-2016-8870)

Две уязвимости в джумле позволяют получить админский доступ и в свою очередь залить файл шелла через медиа менеджер.

1. В com_users:user.register не осуществляется должная валидация данных. Злоумышленник может зарегистрировать пользователя с правами админа. Важно чтобы на сайте была включена регистрация, иначе в joomla 3.6.3 (и возможно более ранних) созданный пользователь не сможет быть активирован.

2. Проблема с вайтлистом в медиа менеджере

Медиаменеджер в джумле имеет белый список загружаемых файлов (и их типов). По-умолчанию он не позволяет загружать файлы с расширением ".php, .phtml" или содержащие "<?php". Однако позволят загрузить файлы содержащие <?= с расширением .pht. Файлы .pht по-умолчанию включены на всех apache серверах с mod_php в ubuntu => могут быть загружены и запущены!

CVE-2016-8869 and CVE-2016-8870

Код эксплойта в продолжении

Добавлено : Чт Ноя 10, 2016 17:10

Автор : surg30n

Просмотров : 1083

3 PHP 7.1 - Что нового

Nullable types (типы допускающие возможность использования null)

Ранее в PHP 7.0 появилась возможность указать тип передаваемых/возвращаемых значений, однако строгая типизация недопускала использование null в качестве значения параметра, как это делается в других языках.

В 7.1 для указания допустимости null-значений перед типом параметра указывается "?"

function f01(int $i) {
  var_dump($a);
}
 
function f02(?int $i) : ?int {
  var_dump($a);
  return $a;
}
 
f01(10); // int(10)
f01(null); // TypeError: Argument 1 passed to f01() must be of the type integer, null given
f02(20); // int(10)
f02(null); // null

Добавлено : Вт Сен 27, 2016 16:24

Автор : surg30n

Просмотров : 1637

4 Разбор уязвимости Joomla CVE-2015-8562

20151201 Core / Remote Code Execution Vulnerability

Позволяет злоумышленнику выполнить произвольный код. За последний месяц в джумле нашли две критические уязвимости. Последняя распространяется на все версии системы начиная с 1.5.0 и до 3.4.5. Кто-то мог эксплуатировать эту дыру около 8 лет, 8 лет Карл!.

Атакован ли ваш сайт?

Можно определить, посмотрев логи:


/var/log/httpd $ grep JDatabaseDriverMysqli *.log
 
access.log:71.19.248.201 - - [15/Dec/2015:17:03:05 +0300] "GET / HTTP/1.1" 301 239 "-" "}__test|O:21:\"JDatabaseDriverMysqli\":3:{s:2:\"fc\";O:17:\"JSimplepieFactory\":0:{}s:21:\"\\0\\0\\0disconnectHandlers\"; a:1:{i:0;a:2:{i:0;O:9:\"SimplePie\":5:{s:8:\"sanitize\";O:20:\"JDatabaseDriverMysql\":0:{}s:8:\"feed_url\";s:37:\"phpinfo();JFactory::getConfig();exit;\"; s:19:\"cache_name_function\";s:6:\"assert\";s:5:\"cache\";b:1;s:11:\"cache_class\";O:20:\"JDatabaseDriverMysql\":0:{}}i:1;s:4:\"init\";}}s:13:\"\\0\\0\\0connection\";b:1;}\xf0\x9d\x8c\x86"
access.log:89.234.157.254 - - [15/Dec/2015:08:23:06 +0300] "GET / HTTP/1.1" 200 16603 "-" "}__test|O:21:\"JDatabaseDriverMysqli\":3:{s:2:\"fc\";O:17:\"JSimplepieFactory\":0:{}s:21:\"\\0\\0\\0disconnectHandlers\"; a:1:{i:0;a:2:{i:0;O:9:\"SimplePie\":5:{s:8:\"sanitize\";O:20:\"JDatabaseDriverMysql\":0:{}s:8:\"feed_url\";s:60:\"eval(base64_decode($_POST[111]));JFactory::getConfig();exit;\"; s:19:\"cache_name_function\";s:6:\"assert\";s:5:\"cache\";b:1;s:11:\"cache_class\";O:20:\"JDatabaseDriverMysql\":0:{}}i:1;s:4:\"init\";}}s:13:\"\\0\\0\\0connection\";b:1;}\xf0\x9d\x8c\x86"


TL;DR
Уязвимость заключается в отсутствии должной фильтрации данных пользователя (заголовки user-agent и x-forwarded-for). Данные сохраняются в базу данных в сериализованном виде обработчиком сессий. Из-за бага обработки UTF8 строк Mysql, при сохранении данные обрезаются, позволяя внедрить произвольный объект (выполнить код) в массив $_SESSION при чтении данных сессии из бд.

Добавлено : Чт Дек 17, 2015 14:14

Автор : surg30n

Просмотров : 10759

5 Тестирование скорости популярных PHP фреймворков

Тестирование "Привет мира" на базе популярных PHP фреймворков.

Конфигурация системы CentOS 6.6 64bit (VM; VirtualBox)
PHP 5.5.30 (Remi RPM) Zend OPcache v7.0.4-dev с включенными phalcon.so и ice.so
Apache 2.2

Запускаются скрипты с настройками по умолчанию, без тюнинга.

Добавлено : Ср Дек 02, 2015 17:08

Автор : surg30n

Просмотров : 6866

6 PHP 7: миграция с PHP 5.X

Релиз PHP 7.0.0 состоялся 3.12.2015.

Основные моменты, из-за которых старый код не будет работать:

1. Унифицированный синтаксис

Выражение $foo->$bar['baz']() раньше означало $foo->{$bar['baz']}(), сейчас интерпретируется слева-направо: ($foo->$bar)['baz']()

2. Удаление устаревших расширений

mysql, ereg...

Добавлено : Пн Ноя 23, 2015 11:21

Автор : surg30n

Просмотров : 8549

7 PHP 7: Что нового. часть 2

Функции CSPRNG


Криптографически стойкий генератор псевдослучайных чисел (англ. Cryptographically secure pseudorandom number generator, CSPRNG)

Новведение добавляет две новых функции для генерации криптографически стойких целых чисел и строк.
Функции работают одинаково на всех платформах.

string random_bytes(int length);
int random_int(int min, int max);


Обе функции сгенерируют исключение `Error`, если источник необходимой случайности будет не найден.

Добавлено : Пт Ноя 20, 2015 22:23

Автор : surg30n

Просмотров : 10872

8 PHP7 - изменения в foreach

В PHP5 присутствует неоднозначность в работе foreach, которая возникает из-за манипуляции с внутренним указателем массива или модификации элементов массива, который перебирается в foreach.

Поведение foreach может зависить от ссылочного счетчика или типа итерируемого объекта - является он значением или ссылкой.

Вот несколько примеров foreach

1. Неработающий current()
2. unset() может исключить элемент из перебора, а может и нет

Добавлено : Пт Ноя 20, 2015 21:57

Автор : surg30n

Просмотров : 9118

9 PHP 7: Что нового. часть 1

Релиз PHP 7 запланирован на конец ноября 2015 года.
В новой версии PHP появились интересные синтаксические плюшки, новые функции
а также самые долгожданные изменения коснулись ядра интерпретатора - проект phpng, увеличивает скорость
обработки скриптов практически вдвое по сравнению с PHP 5.x, плюс более эффективный менеджер памяти.

Добавлено : Пт Ноя 20, 2015 11:50

Автор : surg30n

Просмотров : 20059

10 Joomla фейковая панель администратора

Подойдет для сайтов НЕ использующих Joomla -
для отслеживания подборов паролей и бана неправильных пользователей.

для защиты от брутфорса реальной админки лучше использовать fail2ban / mod_security / etc

Для установки скрипта достаточно скопировать его в корень сайта в папку /administrator.
При вводе любого пароля скрипт дополнит лог файл log.txt, а пользователю покажется ошибка с фейспалмом на заднем плане.
Жаль роботы его не оценят.

Добавлено : Чт Ноя 19, 2015 13:57

Автор : surg30n

Просмотров : 12624

11 Joomla 3.4 - Оптимизируем системный плагин кэширования страниц

Джумла в базовой версии имеет выключенный плагин кэширования для страниц (целиком).
Если сайт изменяется не часто, но медленно работает - имеет смысл включть данный плагин.

Алгоритм работы этого плагина: слушаем события

onAfterInitialise - смотрим есть ли кэш данной страницы, если есть отдаем клиенту, завершаем работу
onAfterRender - кэшируем содержание страницы, если она не прописана в исключениях

После включения не замечаем прибавки в скорости генерации страницы?

Добавлено : Чт Ноя 19, 2015 13:40

Автор : surg30n

Просмотров : 5675

12 Скрипт мониторинга цен яндекс маркета

Скрипт мониторинга цен с яндекс маркета.
При запуске скрипт загружает список товаров из файлов excel (в папке /sheets/*.xlsx).
Для каждого товара на втором листе должен быть указан идентификатор (http://market.yandex.ru/product/{8229520}/)
Далее скрипт обращается к яндекс маркету и достает мин и мак цены на товар.
В таблицу записывается средняя цена.

Обновлятор можно повесить на крон/планировщик.
Для папки cache требуются права на запись.

Добавлено : Ср Апр 08, 2015 12:25

Автор : surg30n

Просмотров : 6691

13 PHP 5.6 - Что нового

Функции с переменным количеством аргументов ... // Variadic functions

Новый оператор ..., означающий упаковку/раскаповку аргументов.

Например, func_get_args() теперь может быть заменена на

Массивы и перечисляемые типы могут быть распакованы в список аргументов.
Этот оператор известен как "splat operator" в других языках, например Ruby.

Пример: известная своим неторопливым временем исполнения функция
call_user_func_array(callable $callback, array $param_arr)

может быть заменена на

$param_arr = [1,2,3];
$callback(...$param_arr);

Добавлено : Вт Ноя 18, 2014 13:23

Автор : surg30n

Просмотров : 2726

14 SatCMS 0.0.2 - Bootstrap3, jQuery, RequireJS, AngularJS, PHP, mySQL|SQLite

Решил на досуге переписать свою старую мультисайтовую cms (SatCMS).

Что получилось:

- php >=5.3, mysql/sqlite
- зависимости обрабатываются менеджерами пакетов: php - composer, js - bower
- мультисайтовость (возможность вести несколько сайтов/поддоменов) на одном движке
- морда/админка - шаблоны smarty, bootstrap 3
- админ-бэкенд на requirejs/angularjs/bootstrap.
Angular-way не блюдется, так как много легаси кода, и выпиливать jquery-подход совсем не хочется, простите за dom в контроллере :)
- правка элементов сайта прямо с морды (пользуется inline tinymce)



Посмотреть:

Демо http://satcms.ru/
Гитхаб https://github.com/rustyJ4ck/SatCMS

Добавлено : Ср Май 21, 2014 15:56

Автор : surg30n

Просмотров : 4656

15 Mysql удаление дублей в таблице

Имеем таблицу с торговыми предложениями

CREATE TABLE IF NOT EXISTS `offers` (
  `id` int(10) unsigned NOT NULL,
  `product_id` int(10) unsigned NOT NULL,
  `value` decimal(10,0) NOT NULL,
  `discount` tinyint(4) NOT NULL,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
);

Добавлено : Вт Сен 10, 2013 14:20

Автор : surg30n

Просмотров : 812

16 Prestashop 1.5.3, впечатления

Под 200 запросов на рендер главной страницы - это многовато.
Например выборка брендов и товаров для них занимает порядочное количество времени, если
делать это с помощью средств встроенной ORM.

Пример времени выполнения главной страницы
с включенным файловым кэшем, отключенными сайдбарами и практически без модулей

[0.0000] Start
[0.0925] DispatcherCore::dispatch : IndexController
[0.1333] FrontControllerCore::initContent
[0.2011] INDEX IndexController::initContent
[0.2063] HomeSlider::hookDisplayHome
[0.2735] PSwidget text cached -- 0.00029 ttl 300
[0.2740] PSwidget index/brands cached -- 0.00032 ttl 300
[0.2750] Smarty: /themes/mytheme/layout-index.tpl -- 0.00666
[0.2751] Done
[0.2752] SQL 92 x 0.02554


Добавлено : Вс Фев 24, 2013 14:16

Автор : surg30n

Просмотров : 6343

17 PHP 5.5 что нового

Новый функционал для работы с паролями

Текущая реализация генерации пароля в большинстве проектов стоится на не стойких
алгоритмах типа md5, sha1. В php5.5 предлагается улучшить парольный API.
Подробнее

empty() заставят работать с функциями и выражениями

В настоящий момент empty($this->getBlah()) вызовет фатальную ошибку.

Скалярные тайпхинты!

Дождались.. PHP, язык с отсутствующей типизацией параметров возможно обзаведется
уточнениями типов (typehints) для простых типов int, float, bool, string.

Добавлено : Чт Июл 12, 2012 16:13

Автор : surg30n

Просмотров : 7991

18 Конспект Twig (читшит)

Twig - современный шаблонизатор для PHP, написанный автором фреймворка symfony Фабиеном Потенсером.
Синтаксис twig сходен с шаблонизатором в Django. Шаблоны компилируются в PHP классы.

Базовый синтаксис:

{{ сказать что-то }}
{% сделать что-то %}

Комментарий

{# A comment #}


Переменные, вывод

{{ sitename }}
{{ user.name }}
{{ foo['bar'] }}

Добавлено : Пн Июн 18, 2012 20:06

Автор : surg30n

Просмотров : 13041

19 Стандарты кодирования PHP (PSR)

Группа взаимодействия фреймворков (PHP-FIG) окончательно приняла рекомендации
к стандартам оформления кода на PHP.

Документ называется PSR (Proposing a Standards Recommendation - Предлагаемые рекомендации стандартов)
и разделен на 3 части.

Оригинальные тексты можно посмотреть на гитхабе.

Добавлено : Вт Июн 05, 2012 10:06

Автор : surg30n

Просмотров : 33306

20 Трейты - множественное наследование PHP

trait [treɪt], [treɪ] - характерная черта, особенность, внезапно типаж.

Трейты - механизм повторного использования кода.

PHP предоставляет программисту возможность простого наследования классов, хотя часто возникает
необходимость реализации общего, однотипного функционала для нескольких классов. У разработчика
есть как минимум два варианта реализации подобной задачи - через делегирование или вариант в лоб - наплодить повторяющегося кода, что не есть правильно.

Добавлено : Вт Май 29, 2012 12:02

Автор : surg30n

Просмотров : 9703

Купить ПК по лучшим ценам на комлектующие. Сравнение цен ситилинк, юлмарт, регард, computeruniverse.

Поиск по сайту