Является ли эта JavaScript инъекция (на основе DOM) реальной или ложноположительной? - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь улучшить asp JavaScript атаки на основе DOM, поэтому я был бы признателен за некоторую информацию об этом.

У меня есть этот вывод из Burpsuite как "фирменный", указывающий на будь что-то здесь. Таким образом, главная страница загружает файл. js с кодом ниже. Данные читаются из document.location и передаются в eval () с помощью следующих операторов:

var _9f=document.location.toString();
var _a0=_9f.split("?",2);
var _a1=_a0[1];
var _a2=_a1.split("&");
var sp=_a2[x].split("=");
djConfig[opt]=eval(sp[1]);

Если я правильно понимаю, он получает содержимое после '?' в URL, затем разделяет параметры после '=' и затем уничтожает второй массив этого. Итак, www.domain.tld?first=nothing&second= полезная нагрузка , это правильно?

Учитывая, что он уже находится внутри файла js, я бы предположил, что мне не нужны теги в Полезная нагрузка? Я действительно не могу заставить его стрелять, поэтому я, очевидно, делаю это неправильно. Был бы признателен за некоторые материалы, чтобы лучше это понять, не только за фрагмент кода, но и за какое-то объяснение.

1 Ответ

0 голосов
/ 23 марта 2020

... он получает контент после '?' в URL, затем разделяет параметры после '=' и затем уничтожает второй массив этого ...

Почти. Он получает часть строки после первого ?, разбивает ее на массив параметров (путем разделения на &), затем получает значение x-го параметра (тот, который имеет индекс x) , разделяет его, чтобы получить его значение, и eval s.

Это означает, что страница выполняет код, введенный в нее через строку запроса, что означает, что Мэри может дать Джо URL-адрес с кодом, который затем выполнить на странице, когда Джо откроет ее, что представляет потенциальную угрозу безопасности для Джо.

Скажем, x равно 2. Этот URL будет отображать предупреждение: http://example.com/?a=1&b=2&c=alert(42)

var x = 2;
var _9f="http://example.com/?a=1&b=2&c=alert(42)";
var _a0=_9f.split("?",2);
var _a1=_a0[1];
var _a2=_a1.split("&");
var sp=_a2[x].split("=");
/*djConfig[opt]=*/eval(sp[1]);

Вот пример на JSBin: https://output.jsbin.com/cibusixeqe?a=1&b=2&c=alert(42)

Насколько велик риск, зависит от того, на какой странице находится этот код .

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

...