# Web Basic Модуль Занятие 3 ## Атаки на WEB ## SQL-инъекции Вставки SQL-кода с целью получения доступа к базам данных ### Обход процесса входа Переносим ссылку для выполнения работы в браузер BlupSuite, переходим во вкладку *My Account*, вводим какие-то данные в поля входа и отсылаем данные на сервер ![](https://i.imgur.com/p1Gw86Y.png) Получаем ошибку, потому что наши данные неверные ![](https://i.imgur.com/WA0hDzJ.png) Повторяем действия, но теперь задерживаем запрос с помощью интерцептора ![](https://i.imgur.com/9SL5UWr.png) В поле username можем произвести изменение данных. К примеру, вставить administrator\`-- (-- заблокирует часть запроса с паролем в SQL-запросе, из-за чего произойдет вход без ввода пароля только с логином пользователя) ![](https://i.imgur.com/i3n6XVj.png) После применения изменений и отправки запроса получаем такой ответ. Теперь мы администраторы. ![](https://i.imgur.com/1WUQunu.png) ### Инъекция в струкруту запроса WHERE с получением дополнительных данных Здесь можно встроить инъекцию в фильтр category При нажатии на любую картегорию в URL добавляется дополнительный ключ ![](https://i.imgur.com/VP90qrs.png) Мы можем модифицировать его, давбив в категорию SQL выражение \`+OR+1=1-- (<что-то> OR 1=1, что выдаст все результаты) ![](https://i.imgur.com/7mXOnf7.png) Нажмем *Enter* и получим скрытые изначально товары ![](https://i.imgur.com/Q6IwTNB.png) ![](https://i.imgur.com/Cf1HeHM.png) ### Инъекция с запросом UNION и извлечение данных из других таблиц С помощью интерцептора словим запрос при выборе категории товаров. Как и с прошлым вариантом, мы можем вторгунться и дописать свою часть запроса, но в этом раз добавим \'+UNION+SELECT+username,+password+FROM+users-- (SQL запись для получения данных username и password из таблицы users и объединения запроса с ранее вставленным значением) ![](https://i.imgur.com/yoAciz5.png) При получении ответа получаем и данные аккаунтов и паролей пользователей ![](https://i.imgur.com/BEJ5Jkp.png) ![](https://i.imgur.com/RGSzlsz.png) ### Инъекция с запросом типа и версии базы данных Отлавливаем запрос категории и вставляем \'+UNION+SELECT+@@version,+NULL# (выдаст тип и версию базы данных) ![](https://i.imgur.com/sZTUHs1.png) Теперь в конце страницы будут расположены тип и версия базы данных ![](https://i.imgur.com/purpSpW.png) ## XSS уязвимости Вставки HTML-гипертекста, в который можно вставить JS-код, который сохраняется на сервере ### XSS в HTML ввод без каких-либо кодировок Попробуем оставить комментарий к одной из записей Если поле с комментариями никак не обрабатывается, мы сможем загрузить даже тег script с JS-кодом внутри ![](https://i.imgur.com/O8HNIlL.png) ![](https://i.imgur.com/5R1ei97.png) Теперь при открытии странциы с комментариями, будем получать такое уведомление ![](https://i.imgur.com/UVaEKUD.png) ### XSS с доступом к DOM-модели документа Мы имеем поле поиска. Попробуем вставить какой-то текст и посмотреть, где окажется результат поиска в ответной странице ![](https://i.imgur.com/tdBeXmQ.png) При просмотре через инспектор текст запроса оказался в теге img ![](https://i.imgur.com/lI81Kpd.png) Используем в запросе поиска какой-то тег и при его загрузке запустим JS код (предварительно для этого понадобится закрыть тег img) ![](https://i.imgur.com/3popY5L.png) В ответном сообщении выполнится вставленный в поиск JS-код ![](https://i.imgur.com/zRnAKLN.png) ### XSS через отражение в JS-коде Впишем в строку поиска любой текст. ![](https://i.imgur.com/nGUvaKE.png) При перехвате текст окажеся в search= ![](https://i.imgur.com/YtmITdj.png) Теперь посмотрим на ответ сервера, если мы посмотрим через инспектор на поле поиска, то рядом с ним в документе будет тег script, в него вставлен наш поисковый текст. ![](https://i.imgur.com/OCx6JMX.png) Можем этим воспользоваться и вставить туда свой JS-код ![](https://i.imgur.com/eNGqAHE.png) Код выполнится при получении ответа ![](https://i.imgur.com/MadqfD9.png) ### XSS через отражение во внешний JS-файл Отправим запрос с любым текстом. В ответе от сервера получим место, к которому происхоидло обращение. ![](https://i.imgur.com/IDRIYrt.png) С помощью инспектора откроем файл searchResults.js, в нем увидим код, который использует наш запрос (запрос обрабатвается в eval()). Просто вставка JS-кода в запрос не выполнится ![](https://i.imgur.com/OXtCUFo.png) Мы можем воспользоваться eval() и вставить свой код с помощью экранирования символов ![](https://i.imgur.com/awWUv5P.png) После экранирования код запустится в ответной странцие. ![](https://i.imgur.com/Gz9DXbC.png) ## CSRF уязвимости При таких уязвимостях происходит подделка запросов клиента и отправка нужных злоумышленнику данных на сервер ### CSRF и изменение электронной почты пользоватея Войдем на сайте с помощью данных wiener:peter. После входа у нас появляется возможность изменять email-адрес ![](https://i.imgur.com/BOU2z9b.png) Произведем изменение email-а ![](https://i.imgur.com/FLGCWYR.png) Найдем в истории запросов Burp Suitе наш запрос на изменение адреса ![](https://i.imgur.com/6gX6byf.png) Теперь мы знаем, к какому месту можно обратиться, чтобы изменить email. Напишем на основе этого HTML форму, котрая будет скрыта и уже содержать нужные нам данные email-a, вставим его на эксплойт-сервер и посмотрим поведение (кнопка View exploit) ```html= <html> <body> <form method="POST" action="https://0a4f00190429347dc0b2401100d70081.web-security-academy.net/my-account/change-email"> <input type="hidden" name="email" value="noany@mail.com"/> <input type="submit" value="Submit request"/> </form> <script> document.forms[0].submit(); </script> </body> </html> ``` ![](https://i.imgur.com/xDo6wD1.png) Захватим пакет перед отправкой. Теперь мы увидим, что при использовании эксплойта email-адрес в запросе поменялся на наш ![](https://i.imgur.com/xFVD3qo.png) При отправке ответа браузеру увидим, что эмейл пользователя поменялся на нужный нам ![](https://i.imgur.com/qEC6p3m.png) Теперь можем отправить эксплойт жертве ![](https://i.imgur.com/FSgwTAS.png) ### CSRF с токеном, валидация которого зависит от типа запроса Заходим на сайт и находим запрос со входом в аккаунт. У нас теперь есть csrf-метка, которая мешает просто вставить код. ![](https://i.imgur.com/XxXfsLU.png) Отправим запрос в репитер ![](https://i.imgur.com/Qxgf2bJ.png) Если просто поменяем данные в запросе, получим ошибку о несоответствии токена. ![](https://i.imgur.com/jPffdhK.png) Но если мы поменяем тип запроса ![](https://i.imgur.com/N7JGo8R.png) То сервер обработает наши новые данные ![](https://i.imgur.com/4k6wxNS.png) Теперь построим HTML форму, которая отдаст данные серверу, и отдадим ее на эксплойт-сервер ![](https://i.imgur.com/1sL7eqW.png) Протестируем, что она меняет почту ![](https://i.imgur.com/S77w5iK.png) И отправим запрос жертве ![](https://i.imgur.com/oah9dAn.png) ## SSRF уязвимости Тип атак подделывает сервер для клиента с отправкой необычных ответов клиенту ### Базовая SSRF атака на локальный сервер Для начала проверим, есть ли у нас доступ к админ-панели. Для этого добавим в url /admin ![](https://i.imgur.com/jlvpJlv.png) Доступа не имеем. Перейдем на любую страницу описания товара и нажмем проверку количества ![](https://i.imgur.com/FlNLkKe.png) В перехваченном запросе увидим strockAPI - замаскированную ссылку ![](https://i.imgur.com/lst1H0h.png) Перекинем запрос в репитер и попробуем изменить ссылку stockAPI так, чтобы получить доступ к админ-панели (зайдем через localhost/admin) ![](https://i.imgur.com/QFTey7r.png) В ответе получим HTML страницу, которая соответсвует admin панели ![](https://i.imgur.com/pQPCIqB.png) В этой странице найдем ссылку, которая удаляет пользователя carlos ![](https://i.imgur.com/tjKRLb2.png) Отредактируем stockAPI, добавив туда путь для удаления пользователя и отправим запрос ![](https://i.imgur.com/kAfi5Gz.png) Получим ответ о случившейся операции ![](https://i.imgur.com/6xdqedK.png) Теперь пользователь удален. ![](https://i.imgur.com/XILgHza.png) ### SSRF c обходом фильтра через перенаправление Выполним запрос на наличие товара ![](https://i.imgur.com/RSAa2nH.png) Отловим этом запрос ![](https://i.imgur.com/BOE8REp.png) Теперь в запросе видим не ссылку, а путь. Это значит, что сервер больше не воспримит ссылки для перехода в панель администратора ![](https://i.imgur.com/opkWIm6.png) ![](https://i.imgur.com/8j6gKrH.png) Тогда попробуем исследовать переход на следующий продукт ![](https://i.imgur.com/8oTAaLx.png) ![](https://i.imgur.com/Uvf7y2L.png) Он тоже содержит путь, но в атрибуте path содержится ссылка на порт сервера. Отправим запрос на репитер. Попробуем приписать к этой ссылке /admin в stockAPI ![](https://i.imgur.com/38pqdWE.png) Получим доступ к панели администратора ![](https://i.imgur.com/1lZie2T.png) Промотаем ниже и найдем ссылку для удаления пользователя carlos ![](https://i.imgur.com/bgXUgq6.png) Добавим эту ссылку к атрибу path ![](https://i.imgur.com/8I2K3Zd.png) В ответе от сервера получим сообщение, что пользователь удален ![](https://i.imgur.com/IapowLk.png) ![](https://i.imgur.com/rS9I1be.png) ## RCE уязвимости Позволяют запустить код на сервере ### Инъекция команд OC Перехватим запрос на получение количетсва какого-либо товара. Видим интересную строку ![](https://i.imgur.com/4r8YrwC.png) Добавим к этой строке команду whoami ![](https://i.imgur.com/8XDbFSg.png) В ответе получим результат команды whoami (имя учетной записи) ![](https://i.imgur.com/JW45D8k.png) ![](https://i.imgur.com/zBenn55.png) ## Path traversal уязвимость Позволяет злоумышленнику получить доступ к файлам в системе ### Обход пути к файлу Попробуем попросить сервер отдать изображение и перехватим запрос на выдачу ![](https://i.imgur.com/cxXTQeM.png) В запросе видим имя файла. Что, если к нему можно применить переход между папками? ![](https://i.imgur.com/7jt3P7X.png) Добавим выход из трех папко, после чего переход в /etc/passwd ![](https://i.imgur.com/suddTdh.png) В ответе увидим данные из файла /etc/passwd ![](https://i.imgur.com/eo0OMMI.png) ![](https://i.imgur.com/fDCdtmT.png) ### Обход пути к файлу через абсолютный путь Попробуем также попросить сервер отдать изображение и перехватим запрос. ![](https://i.imgur.com/AamOPd8.png) Также видим путь к файлу. Попробуем обратиться к файловой системе и получить данные через переход по папкам ![](https://i.imgur.com/UGuWWXN.png) В ответ получим отсуствие файла, значит мы не можем так обратиться. ![](https://i.imgur.com/pRdJWxj.png) Тогда попробуем обратиться от корня ![](https://i.imgur.com/y409YEV.png) Доступ к данным внутри файла получим ![](https://i.imgur.com/OibPT71.png) ![](https://i.imgur.com/b0weG29.png)