Занятие 3. Основные атаки и паттерны https://portswigger.net/web-security 1. SQL-injection уязвимости: 1.1 https://portswigger.net/web-security/sql-injection/lab-login-bypass Чтобы реализовать атаку Sql иньекции в данной лаборатории, для начала найдем запрос с учетными данными, который взаимодействует с базой данных. Этим запросом является POST запрос авторизации. ![](https://i.imgur.com/ftb7o2i.png) Введем логин и любой пароль.Включим в бурп режим перехвата. При перехвате запроса изменим в нем параметр username на administrator и закомментируем остальную часть запроса с паролем. ![](https://i.imgur.com/pQok8q9.png) В результате получен доступ к аккаунту администратора. ![](https://i.imgur.com/l6bSUJ9.png) 1.2 https://portswigger.net/web-security/sql-injection/lab-retrieve-hidden-data В данной лаборатории сказано,что имеется уязвимость в фильтре категорий продуктов. ![](https://i.imgur.com/0OLdU5L.png) Перехватим запрос выбора категории продуктов бурпом. ![](https://i.imgur.com/gPxjU3H.png) Если поставить кавычку, получим внутреннюю ошибку сервера,что говорит о возможном наличии иньекции. Так как в условии сказано что запрос к базе данных будет иметь вид: 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. ![](https://i.imgur.com/Lo13xr3.png) В результате получим доступ к скрытым данным, без ограничения relesed = 1. ![](https://i.imgur.com/o94oI7F.png) 1.3 https://portswigger.net/web-security/sql-injection/union-attacks/lab-retrieve-data-from-other-tables По условию лабораторной работы база данных содержит таблицу users, со столбцами username и password. Чтобы решить лабораторную задачу, выполните атаку UNION с внедрением SQL , которая извлекает все имена пользователей и пароли и использует эту информацию для входа в систему как administrator. Найдем уязвимый параметр с помощью подстановки кавычки, и анализируя поведение сервера. Им окажется параметр категория,в фильтре продуктов. ![](https://i.imgur.com/KmJIvM4.png) Из условия известно что количество столбцов 2. Выясним тип данных. C помощью UNION объединения введем строковый тип данных,если один из столбцов окажется не строковым увидим ошибку. ![](https://i.imgur.com/JJGDiAO.png) ![](https://i.imgur.com/LQuAZ4A.png) Видим что данные отображаются на странице. Сформируем запрос к таблице users, с объединением столбцов username и password. '+UNION+SELECT+username,+password+FROM+users-- ![](https://i.imgur.com/FtMMVCi.png) Получим данные администратора и зайдем в админку. ![](https://i.imgur.com/LWaEXRs.png) ![](https://i.imgur.com/JOeu3AT.png) 1.4 https://portswigger.net/web-security/sql-injection/examining-the-database/lab-querying-database-version-mysql-microsoft Эта лабораторная работа содержит уязвимость SQL-инъекции в фильтре категорий продуктов. Вы можете использовать атаку UNION для получения результатов введенного запроса. Чтобы решить лабораторную работу, отобразите строку версии базы данных. При вводе кавычки в параметр категории получим ошибку. ![](https://i.imgur.com/XUQSx1y.png) Определим количество столбцов с помощью запроса ' order by-- ![](https://i.imgur.com/pojcIW8.png) ' order by 1-- выдает 500 ошибку. Используем шпаргалку по Sql инъекциям.Видим что в базах данных MySql символ комментария может быть #. ![](https://i.imgur.com/HR3Nxwg.png) Ошибки не возникает при замене комментария. Ищем количество столбцов. ' order by 1# При запросе 3 столбца выдает ошибку. Выясняем что столбцов 2. ![](https://i.imgur.com/sBITpW7.png) Попытаемся понять какой тип данных.Попробуем строковый тип в оба столбца,используя запрос объединения. ' UNION SELECT 'aaa','bbb'# ![](https://i.imgur.com/0hJcVaQ.png) Наш запрос отобразился. Так как мы знаем,что тип комментария #, который используется в MySql. То запрос версии будет @@version. ' UNION SELECT @@version,'bbb'# ![](https://i.imgur.com/O7ePbKY.png) ![](https://i.imgur.com/6O4JPkF.png) 2. XSS уязвимости: 2.1 https://portswigger.net/web-security/cross-site-scripting/stored/lab-html-context-nothing-encoded По описанию эта лабораторная работа содержит сохраненную уязвимость межсайтового скриптинга в функции комментариев. Чтобы решить эту лабораторную задачу, отправьте комментарий, который вызывает alert функцию при просмотре сообщения в блоге. ![](https://i.imgur.com/rPMxwAh.png) ![](https://i.imgur.com/mgiHmeg.png) При просмотре блога скрипт исполняется. ![](https://i.imgur.com/Rv0OChl.png) 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. ![](https://i.imgur.com/mIrAtdj.png) img src="/resources/images/tracker.gif?searchTerms=asd123" Соответственно,чтобы выйти из этого атрибута, закроем его. Используем обработчик событий загрузки svg Onload. ![](https://i.imgur.com/XlUQRUP.png) У нас получилось выйти за пределы атрибута. img src="/resources/images/tracker.gif?searchTerms=">< svg onload= alert(1)> Так же тут отрабатывает и обычный скрипт ">< script> alert(1)</script > (Пробелы в полезной нагрузке здесь в Hack.md умышленны,так как браузер себя странно ведет при виде скрипта) ![](https://i.imgur.com/PioDyWW.png) 2.3 https://portswigger.net/web-security/cross-site-scripting/contexts/lab-javascript-string-angle-brackets-html-encoded Эта лабораторная работа содержит отраженную уязвимость межсайтового скриптинга в функции отслеживания поисковых запросов, где закодированы угловые скобки. Отражение происходит внутри строки JavaScript. Чтобы решить эту лабораторную задачу, выполните атаку межсайтового скриптинга, которая вырывается из строки JavaScript и вызывает alert функцию. Для начала введем обычные символы.Посмотрим куда они попадают. Функция Document Write. ![](https://i.imgur.com/1OY68xz.png) Введем полезную нагрузку для проверки. ![](https://i.imgur.com/pMjnjnd.png) Посмотрим ответ в бурп,чтобы увидеть что произошло с наши скриптом. Мы не вырвались из контекста, и угловые скобки заенкодились. Обычный пэйлоад здесь не подойдет. ![](https://i.imgur.com/gHSHkyf.png) Используем вот такую нагрузку,чтобы вырваться из контекста функции. '-script(1)-' ![](https://i.imgur.com/uhwHuif.png) ![](https://i.imgur.com/GdedEnD.png) 2.4 https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-dom-xss-reflected Эта лабораторная работа демонстрирует отраженную уязвимость DOM. Уязвимости отраженной модели DOM возникают, когда приложение на стороне сервера обрабатывает данные из запроса и повторяет данные в ответе. Откроем бурп и введем какие нибудь данные. Видим что помимо обычного запроса GET и ответа с HTML,есть еще такой же запрос, но с ответом Json, в котором отражаются наши данные. ![](https://i.imgur.com/QnSjN40.png) Протестируем на предмет защиты входных данных. Заметим у обратной косой черты интересное поведение. ![](https://i.imgur.com/m4zzvZ1.png) ![](https://i.imgur.com/3bfRFWp.png) ![](https://i.imgur.com/l1IbXaH.png) Окончательный пэйлоад будет вот таким: \"+alert(1)}// ![](https://i.imgur.com/8kAhL41.png) В результате формируется следующий ответ: {"results":[ ],"searchTerm":"\\" alert(1)}//"} ![](https://i.imgur.com/JlNldEv.png) ![](https://i.imgur.com/vmN3tat.png) 3. CSRF: 3.1 https://portswigger.net/web-security/csrf/lab-no-defenses Функция изменения электронной почты в этой лаборатории уязвима для CSRF. Чтобы решить лабораторную задачу, создайте некоторый HTML-код, который использует атаку CSRF для изменения адреса электронной почты зрителя и загрузите его на свой сервер эксплойтов. ![](https://i.imgur.com/kWqrZ8U.png) Перехватим запрос на изменение почты пользователя. ![](https://i.imgur.com/HUI2J3G.png) Перейдем на сервер эксплойтов и напишем HTML который будет отправлять запрос на изменение почты при переходе. ![](https://i.imgur.com/xLM5Ysz.png) Протестируем на себе. Адрес изменился. ![](https://i.imgur.com/kAnLu8v.png) Нажмем отправить эксплойт жертве. ![](https://i.imgur.com/6SQLP9l.png) 3.2 https://portswigger.net/web-security/csrf/lab-token-validation-depends-on-request-method Функция изменения электронной почты в этой лаборатории уязвима для CSRF. Он пытается блокировать CSRF-атаки, но применяет защиту только к определенным типам запросов. Отправим запрос на изменение почты. ![](https://i.imgur.com/W1WhgAg.png) Видим что смена ящика защищена токеном CSRF. ![](https://i.imgur.com/TlnPkZ5.png) Но,при измении метода запроса токен перестает работать. ![](https://i.imgur.com/e8rRoM0.png) Создадим эксплойт и проверим на себе,меняет ли он адрес почты. ![](https://i.imgur.com/NTcIkD7.png) ![](https://i.imgur.com/QclNqDn.png) Отправим жертве чтобы пройти лабораторию. ![](https://i.imgur.com/0Y8IoBM.png) 4. SSRF: 4.1 https://portswigger.net/web-security/ssrf/lab-basic-ssrf-against-localhost В этой лаборатории есть функция проверки запасов, которая извлекает данные из внутренней системы. Чтобы решить лабораторную задачу, измените URL-адрес проверки акций, чтобы получить доступ к интерфейсу администратора, http://localhost/admin и удалите пользователя carlos. Попробуем получить доступ к панели администратора. Нас не пускают. ![](https://i.imgur.com/oY6OP46.png) Найдем запрос проверки складских остатков. ![](https://i.imgur.com/G9UdAmG.png) Используем его чтобы попасть в панель адм-ра и удалить Карлоса. ![](https://i.imgur.com/pcp8e95.png) ![](https://i.imgur.com/Cp8Mgfy.png) ![](https://i.imgur.com/m1ekRSn.png) 4.2 https://portswigger.net/web-security/ssrf/lab-ssrf-filter-bypass-via-open-redirection В этой лаборатории есть функция проверки запасов, которая извлекает данные из внутренней системы. Чтобы решить лабораторную задачу, измените URL-адрес проверки акций, чтобы получить доступ к интерфейсу администратора, http://192.168.0.12:8080/adminи удалите пользователя carlos. Средство проверки продуктов ограничено доступом только к локальному приложению, поэтому вам сначала нужно будет найти открытое перенаправление, влияющее на приложение. По условию лабораторной работы найдем открытое перенаправление. ![](https://i.imgur.com/xCL5qzl.png) Найдем уязвимое место проверки продуктов. ![](https://i.imgur.com/0ETmsQW.png) Используем перенаправление,чтобы обойти защиту. ![](https://i.imgur.com/5HvScYz.png) Добавим полный путь для удаления Карлоса. ![](https://i.imgur.com/os6uzrx.png) ![](https://i.imgur.com/tORFvOa.png) 5. RCE: 5.1 https://portswigger.net/web-security/os-command-injection/lab-simple Эта лабораторная работа содержит уязвимость, связанную с внедрением команд ОС в средстве проверки запасов продукта. Перехватим запрос на проверку наличия продуктов. ![](https://i.imgur.com/9mjh7MV.png) Проверим первый,а затем второй параметр. ![](https://i.imgur.com/DOQjqBV.png) ![](https://i.imgur.com/KPyLVnp.png) ![](https://i.imgur.com/3vJs578.png) 6. Path traversal: 6.1 https://portswigger.net/web-security/file-path-traversal/lab-simple Эта лабораторная работа содержит уязвимость обхода пути к файлу при отображении изображений продуктов. Чтобы решить лабораторную работу, извлеките содержимое /etc/passwdфайла. Нажмем посмотреть фото продукта и перехватим запрос. Подставим путь к файлу. ![](https://i.imgur.com/ihlEcmJ.png) ![](https://i.imgur.com/pmaUuGh.png) 6.2 https://portswigger.net/web-security/file-path-traversal/lab-absolute-path-bypass Эта лабораторная работа содержит уязвимость обхода пути к файлу при отображении изображений продуктов. Приложение блокирует последовательности обхода, но обрабатывает предоставленное имя файла как относящееся к рабочему каталогу по умолчанию. Нажмем просмотреть изображение в новой вкладке, изменим путь до изображения на путь к /etc/passwd. ![](https://i.imgur.com/CYac1CY.png) Перехватим запрос и увидим файл etc/passwd ![](https://i.imgur.com/YqbsiLM.png) ![](https://i.imgur.com/Qk8lsrW.png)