Експлойт, който може да пише всеки

Експлойт, който може да пише всеки

Като цяло, много клопки не е тук, Python се включва във всички дистрибуции навсякъде, но след това изведнъж се използва по-малко известни библиотечни mmh3 (около podlyane тя поставя аз все пак ще пиша).
За съжаление, в Ubuntu разпределителната това не стане, следователно, създаден от източник

В резултат на това, да се изтеглят и компилира изходния код на модула, а след това можете да започнете екипа на сървъра

В допълнение към безпогрешна работа на сървъра, на който трябва да се постави в своята работна директория flag.txt файл и директория над плъг-ин. /file_handler.py.

Като цяло, целта на задачи в това състезание - да се намери някои "флагове". По този начин целта на чупене server.py - прочете съдържанието flag.txt файлове, който се намира в същата директория, изпълнимия файл на сървъра.

Анализ на сценария и търсенето на уязвимости

Сега отворете сценария и да помислим за код си. протокол на комуникационната мрежа, която се реализира тук странно. Но какво да се прави, това хакер такива глупости не спира. Така че, как работи алгоритъма.
Като цяло, алгоритъмът може да бъде описан като сървър за обработка на файл, които се предават от клиента. Сървър слуша определен порт (за 1234) и е в очакване, когато той ще даде име на файла и неговото съдържание. Сървърът след това "подбуждане", за да го манипулатор на една и съща питон. Но колко странно той го прави!

Препарати за лечение на файла

За нас е важно, че flag.txt файл, който е необходим в / TMP /% S / сървър и се заемем с нея вече забележимо по-лесно.

Получаване описания (колекторни) до предаваната информация

Тук странност продължава. Тъй като сървърът титла чака точно 1024 байта, нито повече, нито по-малко. Защо така? За да напишете експлоатира беше интересно!
На следващо място, направете следното:

Освен това има и обработка на файловете, както и странностите на алгоритъма продължава. Радвайки се на код

Сървър получава съдържанието на питон на файла го контролна сума, използвайки mmh3 библиотека (същата, която ние имаме толкова дълго и толкова болезнено, установено в първата част) смята. Функция изчислява контролна дължина 31 байта, а след това минава към лявата малко отместване от 16 позиции, което дава ни възстановите по-ниска 16-байт шах. След това програмата влиза критерий: горните 16 бита от контролната сума трябва да бъде равна на -30 772. Защо? Каквато и да е.
Важното е, че който и да е обработка "тласък" файлов сървър не е възможно, трябва да имате файл със специфични свойства контролна.
Изпратено от "лошия" байт последователност? Обадете имена и сървъра се изключи.
Ако файлът е чудо, сървърът трябва да се прави с тях нещо интересно.

Извършва код на трета страна, който също се намира в същата папка! Добре, добре.

Писане експлойт

Идеята на експлойта

Очевидно. Тъй като сървърът изпълнява код на трета страна, е необходимо да се замени този, който е върху него, както и "да мине" ни. Виждаме, че при проверка на данните на сървъра само гарантира, че "сървър" фраза не се съдържа в името на файла. А защита срещу известни уязвимости, "../" не. Какво ще да я експлоатира.
Дай като името "../file_handler.py" файла. След това (ако курсът на обучение ще бъде в състояние да премине защита, свързани с проверка на контролни суми) модифициран файл манипулатор и ще се възползват!
Позволете ми да ви напомня, че целта на хакерство - flag.txt получите съдържанието на файла. Защото ние атакува отдалечен сървър, а след предаването очевидно е необходимо да се използва мрежова връзка.
Какво трябва да направя? Прочетете flag.txt съдържанието на файла, за да се свърже по мрежата да атакуват вашия компютър и прехвърляне на данните. От server.py написан на Python, експлойт-файл трябва да бъде поставен върху него все пак.
В първо приближение, че ще бъде нещо като:

Interceptor поверителна информация

За да се използва може да предава информация от интерес за нас, за да атакуват компютъра, който искате да пуснете сървъра, които ще слушате 5005 порт и печатат на конзолата или съхранява информацията.
Напиши го (за промяна на PHP)

Изпълнението изпращане на експлойта да server.py

Сега ние трябва да напишете малко код, който ще даде на нашия файлов сървър. За да направите това:
Отваряне на връзка с отдалечена машина на порт 1234
За да му даде титлата на 1024 байта дължина
Минете размера на файла, за да бъде изпратена до сървъра
Изпрати самия файл
Надявам се, че всичко върви както трябва, и ние се кача на съдържанието в мрежата flag.txt
Толкова е лесно да изпратите този код (отново на PHP), код на Python се съхранява във файл send.py


По принцип, ако в server.py липсва проверка контролна (за много нестандартен алгоритъм), проблемът ще бъде решен. Но ние сме изправени пред повече трудности - за да изпратите файл, съответстващ на критериите за бране на шах.

Подвиг и проблеми с производителността

Така че, се пригответе да разбие кода на посочения прилагането сървър. Шофиране работата му, както следва:

  • Изпълнете скрипта, който се чака съобщения от атакуван сървъра на порт 5005
  • Изпълнете скрипта за изпращане на експлойта обмисля бюст контролна
  • чака
  • ПЕЧАЛБА

Трябва да се отбележи, че ако ви свършат твърде много твърде бързо (т.е. няма забавяне между мнения), сървърът не разполага с време, за да се подготви за околната среда във временната папка, заради това, което конзолата паднаха съобщения, като по-долу. За да се преодолее погрешна операция може да забави инсталация Mezhuyev изпращане на файл (използвайки usleep отбор).

В резултат на това, сортиране на файлове, за да се изпълни условието е по-скоро на ресурсите по-малък и ми отне около двайсет и едно минути 5 секунди.

Това е всичко. Разбира се, можете да изпълните всяка друга произволна команда в допълнение към кражба на знамето. All. Благодаря на всички ви за вниманието.