Занятие 3. Основные атаки и паттерны
https://portswigger.net/web-security
1. SQL-injection уязвимости:
1.1 https://portswigger.net/web-security/sql-injection/lab-login-bypass
Чтобы реализовать атаку Sql иньекции в данной лаборатории, для начала найдем запрос с учетными данными, который взаимодействует с базой данных.
Этим запросом является POST запрос авторизации.

Введем логин и любой пароль.Включим в бурп режим перехвата. При перехвате запроса изменим в нем параметр username на administrator и закомментируем остальную часть запроса с паролем.

В результате получен доступ к аккаунту администратора.

1.2 https://portswigger.net/web-security/sql-injection/lab-retrieve-hidden-data
В данной лаборатории сказано,что имеется уязвимость в фильтре категорий продуктов.

Перехватим запрос выбора категории продуктов бурпом.

Если поставить кавычку, получим внутреннюю ошибку сервера,что говорит о возможном наличии иньекции.
Так как в условии сказано что запрос к базе данных будет иметь вид:
SELECT * FROM products WHERE category = 'Acessories' AND released = 1
Добавим к значению параметра категории пэйлоад
' OR 1 = 1 -- , для того чтобы закрыть релиз 1 как коментарий, и логика запроса к БД получится что-то вроде этого:
SELECT * FROM products WHERE category = 'Acessories'+ OR + 1 = 1 -- AND released = 1.

В результате получим доступ к скрытым данным, без ограничения relesed = 1.

1.3 https://portswigger.net/web-security/sql-injection/union-attacks/lab-retrieve-data-from-other-tables
По условию лабораторной работы база данных содержит таблицу users, со столбцами username и password.
Чтобы решить лабораторную задачу, выполните атаку UNION с внедрением SQL , которая извлекает все имена пользователей и пароли и использует эту информацию для входа в систему как administrator.
Найдем уязвимый параметр с помощью подстановки кавычки, и анализируя поведение сервера.
Им окажется параметр категория,в фильтре продуктов.

Из условия известно что количество столбцов 2.
Выясним тип данных.
C помощью UNION объединения введем строковый тип данных,если один из столбцов окажется не строковым увидим ошибку.


Видим что данные отображаются на странице.
Сформируем запрос к таблице users, с объединением столбцов username и password.
'+UNION+SELECT+username,+password+FROM+users--

Получим данные администратора и зайдем в админку.


1.4 https://portswigger.net/web-security/sql-injection/examining-the-database/lab-querying-database-version-mysql-microsoft
Эта лабораторная работа содержит уязвимость SQL-инъекции в фильтре категорий продуктов. Вы можете использовать атаку UNION для получения результатов введенного запроса.
Чтобы решить лабораторную работу, отобразите строку версии базы данных.
При вводе кавычки в параметр категории получим ошибку.

Определим количество столбцов с помощью запроса ' order by--

' order by 1-- выдает 500 ошибку.
Используем шпаргалку по Sql инъекциям.Видим что в базах данных MySql символ комментария может быть #.

Ошибки не возникает при замене комментария.
Ищем количество столбцов. ' order by 1# При запросе 3 столбца выдает ошибку. Выясняем что столбцов 2.

Попытаемся понять какой тип данных.Попробуем строковый тип в оба столбца,используя запрос объединения. ' UNION SELECT 'aaa','bbb'#

Наш запрос отобразился.
Так как мы знаем,что тип комментария #, который используется в MySql. То запрос версии будет @@version.
' UNION SELECT @@version,'bbb'#


2. XSS уязвимости:
2.1 https://portswigger.net/web-security/cross-site-scripting/stored/lab-html-context-nothing-encoded
По описанию эта лабораторная работа содержит сохраненную уязвимость межсайтового скриптинга в функции комментариев.
Чтобы решить эту лабораторную задачу, отправьте комментарий, который вызывает alert функцию при просмотре сообщения в блоге.


При просмотре блога скрипт исполняется.

2.2 https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-document-write-sink
По условию лабораторная работа содержит уязвимость межсайтового скриптинга на основе модели DOM в функции отслеживания поисковых запросов. Он использует функцию JavaScript document.write, которая записывает данные на страницу. Функция document.write вызывается с данными из location.search, которыми вы можете управлять с помощью URL-адреса веб-сайта.
Введем любую строку чтобы посмотреть в какой атрибут тега мы попадаем. Это атрибут img src.

img src="/resources/images/tracker.gif?searchTerms=asd123"
Соответственно,чтобы выйти из этого атрибута, закроем его.
Используем обработчик событий загрузки svg Onload.

У нас получилось выйти за пределы атрибута.
img src="/resources/images/tracker.gif?searchTerms=">< svg onload= alert(1)>
Так же тут отрабатывает и обычный скрипт ">< script> alert(1)</script >
(Пробелы в полезной нагрузке здесь в Hack.md умышленны,так как браузер себя странно ведет при виде скрипта)

2.3 https://portswigger.net/web-security/cross-site-scripting/contexts/lab-javascript-string-angle-brackets-html-encoded
Эта лабораторная работа содержит отраженную уязвимость межсайтового скриптинга в функции отслеживания поисковых запросов, где закодированы угловые скобки.
Отражение происходит внутри строки JavaScript. Чтобы решить эту лабораторную задачу, выполните атаку межсайтового скриптинга, которая вырывается из строки JavaScript и вызывает alert функцию.
Для начала введем обычные символы.Посмотрим куда они попадают. Функция Document Write.

Введем полезную нагрузку для проверки.

Посмотрим ответ в бурп,чтобы увидеть что произошло с наши скриптом.
Мы не вырвались из контекста, и угловые скобки заенкодились. Обычный пэйлоад здесь не подойдет.

Используем вот такую нагрузку,чтобы вырваться из контекста функции.
'-script(1)-'


2.4 https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-dom-xss-reflected
Эта лабораторная работа демонстрирует отраженную уязвимость DOM. Уязвимости отраженной модели DOM возникают, когда приложение на стороне сервера обрабатывает данные из запроса и повторяет данные в ответе.
Откроем бурп и введем какие нибудь данные.
Видим что помимо обычного запроса GET и ответа с HTML,есть еще такой же запрос, но с ответом Json, в котором отражаются наши данные.

Протестируем на предмет защиты входных данных.
Заметим у обратной косой черты интересное поведение.



Окончательный пэйлоад будет вот таким: \"+alert(1)}//

В результате формируется следующий ответ:
{"results":[ ],"searchTerm":"\\" alert(1)}//"}


3. CSRF:
3.1 https://portswigger.net/web-security/csrf/lab-no-defenses
Функция изменения электронной почты в этой лаборатории уязвима для CSRF.
Чтобы решить лабораторную задачу, создайте некоторый HTML-код, который использует атаку CSRF для изменения адреса электронной почты зрителя и загрузите его на свой сервер эксплойтов.

Перехватим запрос на изменение почты пользователя.

Перейдем на сервер эксплойтов и напишем HTML который будет отправлять запрос на изменение почты при переходе.

Протестируем на себе. Адрес изменился.

Нажмем отправить эксплойт жертве.

3.2 https://portswigger.net/web-security/csrf/lab-token-validation-depends-on-request-method
Функция изменения электронной почты в этой лаборатории уязвима для CSRF. Он пытается блокировать CSRF-атаки, но применяет защиту только к определенным типам запросов.
Отправим запрос на изменение почты.

Видим что смена ящика защищена токеном CSRF.

Но,при измении метода запроса токен перестает работать.

Создадим эксплойт и проверим на себе,меняет ли он адрес почты.


Отправим жертве чтобы пройти лабораторию.

4. SSRF:
4.1 https://portswigger.net/web-security/ssrf/lab-basic-ssrf-against-localhost
В этой лаборатории есть функция проверки запасов, которая извлекает данные из внутренней системы.
Чтобы решить лабораторную задачу, измените URL-адрес проверки акций, чтобы получить доступ к интерфейсу администратора, http://localhost/admin и удалите пользователя carlos.
Попробуем получить доступ к панели администратора.
Нас не пускают.

Найдем запрос проверки складских остатков.

Используем его чтобы попасть в панель адм-ра и удалить Карлоса.



4.2 https://portswigger.net/web-security/ssrf/lab-ssrf-filter-bypass-via-open-redirection
В этой лаборатории есть функция проверки запасов, которая извлекает данные из внутренней системы.
Чтобы решить лабораторную задачу, измените URL-адрес проверки акций, чтобы получить доступ к интерфейсу администратора, http://192.168.0.12:8080/adminи удалите пользователя carlos.
Средство проверки продуктов ограничено доступом только к локальному приложению, поэтому вам сначала нужно будет найти открытое перенаправление, влияющее на приложение.
По условию лабораторной работы найдем открытое перенаправление.

Найдем уязвимое место проверки продуктов.

Используем перенаправление,чтобы обойти защиту.

Добавим полный путь для удаления Карлоса.


5. RCE:
5.1 https://portswigger.net/web-security/os-command-injection/lab-simple
Эта лабораторная работа содержит уязвимость, связанную с внедрением команд ОС в средстве проверки запасов продукта.
Перехватим запрос на проверку наличия продуктов.

Проверим первый,а затем второй параметр.



6. Path traversal:
6.1 https://portswigger.net/web-security/file-path-traversal/lab-simple
Эта лабораторная работа содержит уязвимость обхода пути к файлу при отображении изображений продуктов.
Чтобы решить лабораторную работу, извлеките содержимое /etc/passwdфайла.
Нажмем посмотреть фото продукта и перехватим запрос.
Подставим путь к файлу.


6.2 https://portswigger.net/web-security/file-path-traversal/lab-absolute-path-bypass
Эта лабораторная работа содержит уязвимость обхода пути к файлу при отображении изображений продуктов.
Приложение блокирует последовательности обхода, но обрабатывает предоставленное имя файла как относящееся к рабочему каталогу по умолчанию.
Нажмем просмотреть изображение в новой вкладке, изменим путь до изображения на путь к /etc/passwd.

Перехватим запрос и увидим файл etc/passwd

