Скорая Компьютерная Помощь г. Калуга

Полный спектр компьютерных услуг!

Здравствуйте, гость ( Вход | Регистрация )

> Внимание!

  • Вся информация, расположенная в данном и других разделах форума получена из открытых источников (интернет-ресурсы, средства массовой информации, печатные издания и т.п.) и/или добавлена самими пользователями. Администрация форума предоставляет его участникам площадку для общения / размещения файлов / статей и т.п. и не несет ответственности за содержание сообщений, а также за возможное нарушение авторских, смежных и каких-либо иных прав, которое может повлечь за собой информация, содержащаяся в сообщениях.
Ремонт компьютеров в калуге Рекламное место сдается
27 страниц V  « < 8 9 10 11 12 > »   
Ответить в эту темуОткрыть новую тему
> Конкурс "Системный Администратор 2013", Первые IT-шные олимпийские игры
Decker
сообщение 24.8.2013, 14:56
Сообщение #181


Администратор
*****

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1



Цитата(nowlar @ 24.8.2013, 13:29) *
Decker, а ты чем реверсил? я Восстанавливал код ручками с дизасма IDA. у тебя гораздо читабелнее получилось.

IDA + HexRays Decompiler. Айс вещь.


--------------------

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Decker
сообщение 24.8.2013, 17:39
Сообщение #182


Администратор
*****

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1



Идеи по-поводу crypto есть какие-нибудь? Заменить его нельзя ... нет прав ... что происходит с /tmp/root/encrypted в конечном итоге-то? Мы туда можем записать что хотим. Алгоритм шифрования известен. Что это нам даст? Запустить /tmp/root/encrypted мы к сожалению не можем ((

Я вытащил оттуда бинарник open_door, дизассемблировал, вообщем оно пишет в /dev/clipboard некий правильный ответ. Больше ничего в open_door не происходит. Плюс, для выполнения задания надо так или иначе ее запустить, но сделать этого мы тоже не можем )


--------------------

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
AntonDevil
сообщение 24.8.2013, 18:05
Сообщение #183


Newbie
*

Группа: Пользователи
Сообщений: 5
Регистрация: 24.8.2013
Пользователь №: 1680



У меня есть единственное предположение - это написать эксплоит. Там шифрованная строка передаётся аргументом для fprintf, по идее, можно эксплуатировать переполнение буфера и запустить shellcode, который запустит open_door. Скажите, я совсем отчаился или это требуемый вариант =)? Мне кажется это сложнова-то так то.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Decker
сообщение 24.8.2013, 18:12
Сообщение #184


Администратор
*****

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1



Цитата(AntonDevil @ 24.8.2013, 18:05) *
У меня есть единственное предположение - это написать эксплоит. Там шифрованная строка передаётся аргументом для fprintf, по идее, можно эксплуатировать переполнение буфера и запустить shellcode, который запустит open_door. Скажите, я совсем отчаился или это требуемый вариант =)? Мне кажется это сложнова-то так то.

Да ну ... как-то это ... ) Вообщем за такое задание надо 5000 баллов давать по местным меркам. Надо подумать где может использоваться (или как можно использовать) /tmp/root/encrypted ... Алгоритм мы знаем, туда можно записать что угодно. Есть наверняка какая-то фишка, которая его использует. Только вот какая?

p.s. Сейчас читаем SUID и безопасность ))
p.p.s. А может быть дело в аргументах fprintf? Там она вызывается как fprintf(v3, (const char *)&v1);, где v1 - зашифрованная строка. Насколько я помню формат-то такой: fprintf (stream, format-string [, argument ...]); ... т.е. первым аргументом идет форматная строка ... может быть за счет форматной строки мы как-то можем перенаправить вывод в другой файл, нет?


--------------------

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
AntonDevil
сообщение 24.8.2013, 19:08
Сообщение #185


Newbie
*

Группа: Пользователи
Сообщений: 5
Регистрация: 24.8.2013
Пользователь №: 1680



Цитата(Decker @ 24.8.2013, 18:12) *
p.p.s. А может быть дело в аргументах fprintf? Там она вызывается как fprintf(v3, (const char *)&v1);, где v1 - зашифрованная строка. Насколько я помню формат-то такой: fprintf (stream, format-string [, argument ...]); ... т.е. первым аргументом идет форматная строка ... может быть за счет форматной строки мы как-то можем перенаправить вывод в другой файл, нет?

Decker, я тебе про это и писал =). такая уязвимость называется переолнение буфера. Можно прочитать из памяти, записать в память, выполнить свой код. Вот последнее очень подойдёт, только нужно сгенерировать shellcode, а я никак не могу на этой виртуалки закомпилить примеры, что бы загенерировать себе shellcode
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Decker
сообщение 24.8.2013, 19:15
Сообщение #186


Администратор
*****

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1



Цитата(AntonDevil @ 24.8.2013, 19:08) *
Decker, я тебе про это и писал =). такая уязвимость называется переолнение буфера. Можно прочитать из памяти, записать в память, выполнить свой код. Вот последнее очень подойдёт, только нужно сгенерировать shellcode, а я никак не могу на этой виртуалки закомпилить примеры, что бы загенерировать себе shellcode

Хорошо ... ты думаешь что если после шифрования на вход fprintf подастся строка, например, '%s\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90 ...' (ну может быть большей длины), то в конечном итоге fprintf будет искать данные для аргумента %s и NOP'ы (0x90) выполнятся?

p.s.
Судя по стене разработчиков один человек уже решил это задание ... Чертос-2 ... )

p.p.s. Кстати, вот полный текст того как инициализируется это задание (вытащить можно из hda000001395 и hda000001396) ... Т.е. помимо того, что можно посмотреть в исходном коде html.

Прикрепленный файл  init_q5.7z ( 3,44 килобайт ) Кол-во скачиваний: 36


--------------------

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Trianit
сообщение 24.8.2013, 19:30
Сообщение #187


Junior Member
**

Группа: Пользователи
Сообщений: 99
Регистрация: 14.8.2013
Пользователь №: 1665



Цитата(Decker @ 24.8.2013, 14:56) *
Ну и если у кого какой другой план зреет - пишите, не стесняйтесь ))

Вроде бы получилась рабочая программа, посчитал все, но результат баллов не принес sad.gif Два раза проверил, вроде бы все верно. Надо еще раз с самого начала все обдумать и проверить...

Алгоритм основан на методе перебора всех возможных комбинаций головоломок (верных и не верных). Их у меня получилось ровно 4000. При переборе выбираются те головоломки, которые могут быть решены перестановкой одной спички (верные и не верные равенства) и параллельно подсчетом только верных вариантов. Т.к. некоторые головоломки можно решить несколькими способами, а посчитать требуется головоломки, имеющие хотябы одно решение, при подсчете учитывается этот момент, иначе результат будет завышен.
Перебор осуществляется последовательным выполнением 2х процедур (примерно как Decker предлагал):
1. Перестановка спички в пределах одной цифры или знака (как показано в примере к заданию).
2. Перестановка спички с одной цифры (знака) на другую.
Каждая цифра и знак проверяется по 3м таблицам (как и предлагал Decker): МИНУС_СПИЧКА, ПЛЮС_СПИЧКА, ПЛЮС_МИНУС_СПИЧКА:

ПЛЮС_СПИЧКА:
0->8
1->7
5->6
5->9
6->8
9->8
'-'->'+'
'-'->'='

МИНУС_СПИЧКА:
6->5
7->1
8->0
8->6
8->9
9->3
9->5
'+'->'-'
'='->'-'

МИНУС_ПЛЮС_СПИЧКА:
0->6
0->9
2->3
3->2
3->5
5->3
6->0
6->9
9->0
9->6

Итого имеем:
Всего головоломок для перебора: 4000
Всего возможных решений: 26280
Правильных решений головоломок: 1352
и наконец, головоломок, имеющих хотя бы одно правильное решение: xxxx (не буду публиковать тут цифру, хотя она и не правильная).
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
AntonDevil
сообщение 24.8.2013, 19:40
Сообщение #188


Newbie
*

Группа: Пользователи
Сообщений: 5
Регистрация: 24.8.2013
Пользователь №: 1680



Цитата(Decker @ 24.8.2013, 19:15) *
Хорошо ... ты думаешь что если после шифрования на вход fprintf подастся строка, например, '%s\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90 ...' (ну может быть большей длины), то в конечном итоге fprintf будет искать данные для аргумента %s и NOP'ы (0x90) выполнятся?

Ну примерно так. Написать в этот шелл код вызов /root/open_door и всё. Мы вызвали открыте двери всего лишь правильно сформировав сообщение для crypto. Только, для чистоты, сначала нужно вызвать ls -ls /root чтобы подтвердить знания о существовании этого файла (пумните, там же всё логируется. если будет читинг, то не хасчитают =))
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
AntonDevil
сообщение 24.8.2013, 19:56
Сообщение #189


Newbie
*

Группа: Пользователи
Сообщений: 5
Регистрация: 24.8.2013
Пользователь №: 1680



Поповоду спичек. У меня получилось 3 ответа для трёх разных вариантов задания =D. Ну принципы везде одни и те же, отличается генерация следующего выражения. с объектной точки зрения всё просто. Есть класс СПИЧКА, которая хранит значени использована спичка или нет. Есть интерфейс СИМВОЛ (или абстрактный класс, смотря на чём пишете) который содержим методы для выдачи списка неиспользованных СПИЧЕК в СИМВОЛЕ, списока использованных, преобразования численного представления СИМВОЛА в СПИЧЕЧНОЕ (для простоты "+" - 0, "-" - 1, "=" - 2) и преобразование СИМВОЛА в строковое представление. Есть классы ЦИФРА и ЗНАК, реализующие интеррфейс СИМВОЛ. Есть класс ВЫРАЖЕНИЕ, которое хранит 5 СИМВОЛОВ, а точнее 3 ЦИФРЫ и 2 ЗНАКА. Теперь всё что нужно это написать генерацию выражений от первого до последнего (вот здесь и проблема =)) и далее, для каждого сгенерированного выражения взять список использованных спичек и список неиспользованных (это сделать просто, просто склеить все списки от всех символов в выражении). Далее пробовать каждую использованную спичку помечать как неиспользованную, и эту спичку ставить на каждое из неиспоьзованных мест по очереди и проверять, получилось ли верное выражение или нет. Как то так.

P.S.: Собственно 3 варианта. Первый. берём вообще всевозможные варианты престановки спичек в ВЫРАЖЕНИИ. Второй. Берём всеможные комбинациии допустимых символов, тогда могут быть выражения типа 1=6=7, что не допустимый шаблон, но он может стать жопустимым 1+6=7. Ну и третий это когда генерируются только допустимые шаблоны. Ответ во втором и третьем 3-его порядка, а в первом 4-ого. Вот так вот =)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Decker
сообщение 24.8.2013, 20:25
Сообщение #190


Администратор
*****

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1



Может кому пригодится для задания про дверь. Версия утилиты cryptomy, которая пишет в /tmp/encrypted ... можно использовать для тестов. Как запустить?

1. В консоли вставляем текст - Прикрепленный файл  console.7z ( 3,27 килобайт ) Кол-во скачиваний: 45
или http://pastebin.com/mJpR4kxU
2. Жмем paste to clipboard
3. В консоли . /dev/clipboard
4. Потом /tmp/cryptomy




--------------------

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Decker
сообщение 24.8.2013, 21:11
Сообщение #191


Администратор
*****

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1



По-поводу спичек ... может попробовать погуглить на тему "Matchstick Equations", "matchstick equation problems"? Наверняка подобные классы уже кем-то реализованы. Я пока что нагуглил только ролик в котором наглядно показывают что одна головоломка имеет несколько решений ) Вообщем пока что прогресса особенного нигде нет ((

p.s. По-поводу двери ... я попробовал подавать на вход fprintf различные форматные строки. Например '%s%s%s%s%s%s%s%s' ни к каким ошибкам не приводит, а если например подать туда '0x%08x\n' то в encrypted мы увидим форматированное в hex число ... Не думаю что там дело в exploit'e ... решение должно быть более простым.

p.p.s. Ну и плюс я начал писать класс работы со спичками ... ) Правда когда смогу закончить - не знаю. Trianit прав, всего вариантов головоломок (т.е. изначального размещения спичек) - 4000.

p.p.p.s. Да ... еще у меня пробует перебираться пароль root'а от двери )) Пробует - потому что скорость перебора SHA-512 составляет ~95p/s ))


--------------------

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Decker
сообщение 24.8.2013, 21:38
Сообщение #192


Администратор
*****

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1



Trianit Алгоритм простой на самом деле. Берем перебор по 4000 головоломок. Дальше всего два варианта - последовательный вызов МИНУС_СПИЧКА, ПЛЮС_СПИЧКА (перебор по очереди с какого места берем и на какое ставим), второй вариант - вызов МИНУС_ПЛЮС_СПИЧКА. Если программим на PHP пишем ВСЕ получившиеся варианты в массив (!) ... в итоге для одной изначальной комбинации мы получаем массив выражений, которые можно получить перестановкой одной спички. Далее проверяем их ... например с помощью функции check_eq:

(просьба не ржать, накидал на коленке только что)
Код
function check_eq($eq) {

$res = false;
$sign1 = $eq[1];
$sign2 = $eq[3];
$a = intval($eq[0]);
$b = intval($eq[2]);
$c = intval($eq[4]);

// a op b = c
if (($sign1 != "=") && ($sign2 == "=")) {
    if ($sign1 == "+") { $res = ($a+$b==$c); }
    if ($sign1 == "-") { $res = ($a-$b==$c); }
}

// a = b op c
if (($sign1 == "=") && ($sign2 != "=")) {
    if ($sign2 == "+") { $res = ($a==$b+$c); }
    if ($sign2 == "-") { $res = ($a==$b-$c); }

}
return (boolean)$res;

}

Если она true для хотя бы одного элемента массива (дальше можно не проверять), значит выражение верное и мы увеличиваем счетчик решений на 1 ... т.е. изначальное положение спичек - есть верная головоломка. Ну и так по всем 4000 ... Результат будет ответом ))


--------------------

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
AntonDevil
сообщение 24.8.2013, 21:42
Сообщение #193


Newbie
*

Группа: Пользователи
Сообщений: 5
Регистрация: 24.8.2013
Пользователь №: 1680



Цитата(Decker @ 24.8.2013, 21:11) *
p.s. По-поводу двери ... я попробовал подавать на вход fprintf различные форматные строки. Например '%s%s%s%s%s%s%s%s' ни к каким ошибкам не приводит, а если например подать туда '0x%08x\n' то в encrypted мы увидим форматированное в hex число ... Не думаю что там дело в exploit'e ... решение должно быть более простым.

Ну блин, что ты всякую хрень пробовал =)? Нужно конкретно взять и написать shellcode для вызова execve("/root/open_door", NULL, NULL); во всё. Те форматные строки что ты подавал это чушь. Я просто заколебался уже с этим тормознуты эмулятором, там просто не компилируются некоторые вещи, бесит, в общем.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
nowlar
сообщение 24.8.2013, 21:47
Сообщение #194


Junior Member
**

Группа: Пользователи
Сообщений: 124
Регистрация: 10.8.2012
Пользователь №: 1249



Так, к списку минус_плюс_спичка надо добавить
+-> =
= -> +
у меня одна пара была пропущена в списке плюс_спичка, в итоге получил ответ меньше 1000
я делал так - перебирал всевозможные варианты валидных начальных условий, а затем гонял сначала плюс минус спичка для каждого символа по таблице и проверял валидность решения
Код
sub check_solution {
  my $expr = shift;
  my @parts = split( "=", $expr );
  return 0 if ($#parts != 1);
  my $val0 = eval( $parts[0] );
  my $val1 = eval( $parts[1] );
  my $res = ($val0==$val1)?1:0;
  $solution = $expr if $res;
  return $res;
}

потом гонял минус спичка с символа, плюс спичка на каждый из остальных и опять проверял валидность решения


--------------------
-- Real programmers never sleep. They enter brainsaver mode.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Decker
сообщение 24.8.2013, 21:47
Сообщение #195


Администратор
*****

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1



Цитата(AntonDevil @ 24.8.2013, 21:42) *
Ну блин, что ты всякую хрень пробовал =)? Нужно конкретно взять и написать shellcode для вызова execve("/root/open_door", NULL, NULL); во всё. Те форматные строки что ты подавал это чушь. Я просто заколебался уже с этим тормознуты эмулятором, там просто не компилируются некоторые вещи, бесит, в общем.

У меня нет опыта написания шеллкодов ... т.е. теоретически я все представляю ... и если бы был удобный отладчик ... все бы было видно, я бы может и написал (спустя пару месяцев wink.gif) ... но ... увы )

Мне кажется эксплоит это перегиб. Так можно дойти и до того, что вообще попробовать найти какой-то эксплоит для Linux reverse-me 2.6.20 #1 Fri Aug 16 16:52:59 YEKT 2013 i586 GNU/Linux, скомпилить его там же и запустить, получив root ))

p.s. Почему бы сразу не копать, допустим в направлении Local root exploit in kernel 2.6.17 - 2.6.24 (vmsplice) ? ))


--------------------

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
nowlar
сообщение 24.8.2013, 21:57
Сообщение #196


Junior Member
**

Группа: Пользователи
Сообщений: 124
Регистрация: 10.8.2012
Пользователь №: 1249



по поводу переполнения во fprintf - там не получится - только два параметра, файловый дескриптор и строка, никаких аргументов нет. Причем строка всего 255 символов


--------------------
-- Real programmers never sleep. They enter brainsaver mode.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Decker
сообщение 24.8.2013, 22:08
Сообщение #197


Администратор
*****

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1



Цитата(nowlar @ 24.8.2013, 21:57) *
по поводу переполнения во fprintf - там не получится - только два параметра, файловый дескриптор и строка, никаких аргументов нет. Причем строка всего 255 символов

Передаются в функцию - да, но строка интерпретируется самой функцией fprintf как форматная строка. Идея не в переполнении буфера, а в использовании атаки на строку форматирования. Чуть подробнее теории - тут.

Код
Пример некорректного кода:
printf(" Current status: 99 % stored.");




--------------------

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
nowlar
сообщение 24.8.2013, 22:10
Сообщение #198


Junior Member
**

Группа: Пользователи
Сообщений: 124
Регистрация: 10.8.2012
Пользователь №: 1249



Ясно, был неправл, но думаю, что это не тот путь.


--------------------
-- Real programmers never sleep. They enter brainsaver mode.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
NastyaBondar
сообщение 24.8.2013, 22:33
Сообщение #199


Junior Member
**

Группа: Пользователи
Сообщений: 40
Регистрация: 10.8.2012
Пользователь №: 1262



Ребята, подскажите пожалуйста по 4 вопросу, там где список адресов. Или здесь или в личку.

Что с ними уже не делалось, от рисования карт до преобразования в различные хеши и производные алгоритмы. От игр со странами до шаманства с ДНС данными. huh.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Decker
сообщение 24.8.2013, 22:37
Сообщение #200


Администратор
*****

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1



Цитата(NastyaBondar @ 24.8.2013, 22:33) *
Ребята, подскажите пожалуйста по 4 вопросу, там где список адресов. Или здесь или в личку.

Что с ними уже не делалось, от рисования карт до преобразования в различные хеши и производные алгоритмы. От игр со странами до шаманства с ДНС данными. huh.gif

Ууух ... все проще ... байты IP'шников просто пишешь в файл ... как символы ... ну а дальше все увидишь и поймешь.


--------------------

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

27 страниц V  « < 8 9 10 11 12 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Рекламное место сдается Рекламное место сдается
Текстовая версия Сейчас: 31.1.2025, 9:56
Рейтинг@Mail.ru
Яндекс.Метрика Яндекс цитирования