<?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=Romankholin94</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=Romankholin94"/>
	<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/Romankholin94"/>
	<updated>2026-07-01T10:26:18Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2025)&amp;diff=973</id>
		<title>Практикум на ЭВМ (2025)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2025)&amp;diff=973"/>
		<updated>2026-05-05T18:59:44Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Криптография и криптоанализ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 391 и 392.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по понедельникам 12:50, &lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 790&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом «Безопасность компьютерных систем», который читается для группы 392, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара — т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2025/2026 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько «флагов», выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний («_»).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса &amp;lt;code&amp;gt;main_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [http://dashboard.prak.seclab.cs.msu.ru/ принимающую систему]. Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова — возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
Доступ к заданиям осуществляется через VPN, доступы к которому можно получить у старосты. &lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2025)/Бонусное_задание|Бонусное задание]]&lt;br /&gt;
* http://pwnitter.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.11.2024 23:59)&lt;br /&gt;
* http://corporate.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.11.2024 23:59)&lt;br /&gt;
* http://bank.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.11.2024 23:59)&lt;br /&gt;
* http://shop.tasks.prak.seclab.cs.msu.ru/  (deadline - 14.11.2024 23:59)&lt;br /&gt;
* http://hard.tasks.prak.seclab.cs.msu.ru (deadline - 06.12.2025 23:59)&lt;br /&gt;
* http://jpg.tasks.prak.seclab.cs.msu.ru (deadline - 06.12.2025 23:59)&lt;br /&gt;
* http://club.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.12.2025 23:43)&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
* [[Media:2025 reverse tasks.zip|Задания по реверсу]] (deadline - 17.12.2025 23:59:59.999999 MSK)&lt;br /&gt;
* [[Media:2025 pwn tasks.zip|Задания по бинарной эксплутации]] (deadline - 23.12.2025 23:59:59)&lt;br /&gt;
* [https://drive.google.com/file/d/1QcgUUOuKrBB0zce9Er5OCAPIVTQ5jig5/view?usp=sharing task 2]  &amp;lt;code&amp;gt;nc fdca:22c8:7316::1 16966&amp;lt;/code&amp;gt;   (deadline - 23.12.2025 23:59:59)&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
* RSA: [[Практикум_на_ЭВМ_(2026)/broadcast | broadcast]], [[ Практикум_на_ЭВМ_(2026)/common-sense | common-sense]] (deadline - 31.03.2026 23:53)&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2020)/Задание_на_блочные_шифры|Задание на блочные шифры]] (deadline - 02.04.2026 23:53)&lt;br /&gt;
* Padding oracle: [http://even.tasks.prak.seclab.cs.msu.ru/ even], [http://bleichenbacher.tasks.prak.seclab.cs.msu.ru/ bleichenbacher] (deadline - &amp;lt;s&amp;gt;06.05.2026&amp;lt;/s&amp;gt; 11.05.2026 23:59)&lt;br /&gt;
&lt;br /&gt;
=== Сетевая безопасность ===&lt;br /&gt;
&lt;br /&gt;
* [[Media:amplification.tar.gz| Задания на амплификацию]] – &amp;lt;code&amp;gt;nc -6 fdca:22c8:7316::1 16969&amp;lt;/code&amp;gt; (deadline – 2026-05-15 23:59)&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (15 сентября 2025) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (22 сентября 2025) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (29 сентября 2025) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (6 октября 2025) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (13 октября 2025) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (20 октября 2025) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (27 октября 2025) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
Семинар 8 (10 ноября 2025) [[Бинарные_уязвимости/Инструменты_поиска_бинарных_уязвимостей]]&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (19 февраля 2026) [[Криптография/Асимметричная криптография на примере RSA]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (26 февраля 2026) [[Криптография/Блочные шифры. Атаки на блочные шифры]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (5 марта 2026) [[Криптография/Атака Padding oracle на RSA]]&lt;br /&gt;
&lt;br /&gt;
=== Сетевая безопасность ===&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (19 марта 2026) [[Сетевая_безопасность/Анализ_сетевого_трафика]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (26 марта 2026) [[Сетевая безопасность/Сетевой стек и DNS]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2025)&amp;diff=972</id>
		<title>Практикум на ЭВМ (2025)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2025)&amp;diff=972"/>
		<updated>2026-05-03T20:28:18Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Криптография и криптоанализ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 391 и 392.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по понедельникам 12:50, &lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 790&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом «Безопасность компьютерных систем», который читается для группы 392, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара — т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2025/2026 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько «флагов», выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний («_»).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса &amp;lt;code&amp;gt;main_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [http://dashboard.prak.seclab.cs.msu.ru/ принимающую систему]. Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова — возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
Доступ к заданиям осуществляется через VPN, доступы к которому можно получить у старосты. &lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2025)/Бонусное_задание|Бонусное задание]]&lt;br /&gt;
* http://pwnitter.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.11.2024 23:59)&lt;br /&gt;
* http://corporate.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.11.2024 23:59)&lt;br /&gt;
* http://bank.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.11.2024 23:59)&lt;br /&gt;
* http://shop.tasks.prak.seclab.cs.msu.ru/  (deadline - 14.11.2024 23:59)&lt;br /&gt;
* http://hard.tasks.prak.seclab.cs.msu.ru (deadline - 06.12.2025 23:59)&lt;br /&gt;
* http://jpg.tasks.prak.seclab.cs.msu.ru (deadline - 06.12.2025 23:59)&lt;br /&gt;
* http://club.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.12.2025 23:43)&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
* [[Media:2025 reverse tasks.zip|Задания по реверсу]] (deadline - 17.12.2025 23:59:59.999999 MSK)&lt;br /&gt;
* [[Media:2025 pwn tasks.zip|Задания по бинарной эксплутации]] (deadline - 23.12.2025 23:59:59)&lt;br /&gt;
* [https://drive.google.com/file/d/1QcgUUOuKrBB0zce9Er5OCAPIVTQ5jig5/view?usp=sharing task 2]  &amp;lt;code&amp;gt;nc fdca:22c8:7316::1 16966&amp;lt;/code&amp;gt;   (deadline - 23.12.2025 23:59:59)&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
* RSA: [[Практикум_на_ЭВМ_(2026)/broadcast | broadcast]], [[ Практикум_на_ЭВМ_(2026)/common-sense | common-sense]] (deadline - 31.03.2026 23:53)&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2020)/Задание_на_блочные_шифры|Задание на блочные шифры]] (deadline - 02.04.2026 23:53)&lt;br /&gt;
* Padding oracle: [http://even.tasks.prak.seclab.cs.msu.ru/ even], [http://bleichenbacher.tasks.prak.seclab.cs.msu.ru/ bleichenbacher] (deadline - 06.05.2026 23:59)&lt;br /&gt;
&lt;br /&gt;
=== Сетевая безопасность ===&lt;br /&gt;
&lt;br /&gt;
* [[Media:amplification.tar.gz| Задания на амплификацию]] – &amp;lt;code&amp;gt;nc -6 fdca:22c8:7316::1 16969&amp;lt;/code&amp;gt; (deadline – 2026-05-15 23:59)&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (15 сентября 2025) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (22 сентября 2025) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (29 сентября 2025) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (6 октября 2025) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (13 октября 2025) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (20 октября 2025) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (27 октября 2025) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
Семинар 8 (10 ноября 2025) [[Бинарные_уязвимости/Инструменты_поиска_бинарных_уязвимостей]]&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (19 февраля 2026) [[Криптография/Асимметричная криптография на примере RSA]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (26 февраля 2026) [[Криптография/Блочные шифры. Атаки на блочные шифры]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (5 марта 2026) [[Криптография/Атака Padding oracle на RSA]]&lt;br /&gt;
&lt;br /&gt;
=== Сетевая безопасность ===&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (19 марта 2026) [[Сетевая_безопасность/Анализ_сетевого_трафика]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (26 марта 2026) [[Сетевая безопасность/Сетевой стек и DNS]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_Padding_oracle_%D0%BD%D0%B0_RSA&amp;diff=971</id>
		<title>Криптография/Атака Padding oracle на RSA</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_Padding_oracle_%D0%BD%D0%B0_RSA&amp;diff=971"/>
		<updated>2026-05-03T20:26:53Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Мультипликативное свойство RSA==&lt;br /&gt;
Пусть E(M) - функция шифрования, N - модуль, X mod Y - остаток от деления X на Y. Тогда:&lt;br /&gt;
&amp;lt;pre&amp;gt; E(M1)E(M2) mod N = E(M1M2 mod N)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Данной свойство очевидно выводится из определения функции шифрования E(M).&lt;br /&gt;
&lt;br /&gt;
==Pairing Oracle==&lt;br /&gt;
Разберем следующи пример: пусть есть сервис по заказу яиц. Но он позваляет заказывать только четное количество яиц. Заказы принимаются в зашифрованном RSA виде. Нужно, имея подслушанный зашифрованный текст C, получить его дешифрованный текст M.&lt;br /&gt;
&lt;br /&gt;
Атака выглядит следующим образом: пусть M &amp;lt; N. Можно послать сервису заказ на &amp;lt;code&amp;gt;2M mod N&amp;lt;/code&amp;gt; яиц (для этого нужно послать &amp;lt;code&amp;gt;(C*2^e) mod N)&amp;lt;/code&amp;gt;. Тогда есть два варинта:&lt;br /&gt;
# &amp;lt;code&amp;gt;M &amp;gt; N/2&amp;lt;/code&amp;gt;, тогда &amp;lt;code&amp;gt;2M mod N = 2M - N&amp;lt;/code&amp;gt; - нечетное число, сервис не принимает заказ&lt;br /&gt;
# &amp;lt;code&amp;gt;M &amp;lt;= N/2&amp;lt;/code&amp;gt;, тогда &amp;lt;code&amp;gt;2M mod N = 2M&amp;lt;/code&amp;gt; - четное число, сервис принимает заказ&lt;br /&gt;
Аналогичные суждения можно сделать, домножая C на 2^ie mod N (где i - натуральное число) и, используя метод двоичного поиска, выяснить, чему же равно M.&lt;br /&gt;
&lt;br /&gt;
==PKCS==&lt;br /&gt;
Согласно этому стандарту, паддинг текста, длина которого недостаточна для шифрования происходит следующим образом:&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#B22222&amp;quot;&amp;gt;0002&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d0f95f9836b07907669f2527&lt;br /&gt;
eda22e1f80e6e2e4dac062326f5716fca45&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;4c65616b696e672070617269747920616c6c6f777320666f7&lt;br /&gt;
22064656372797074696e6720612077686f6c652052534120656e63727970746564206d6573736167650a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#B22222&amp;quot;&amp;gt;0002&amp;lt;/span&amp;gt; - первые два байта определяют тип падинга&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d&lt;br /&gt;
0f95f9836b07907669f2527eda22e1f80e6e2e4dac062326f5716fca45&amp;lt;/span&amp;gt; - ненулевые случайные байты&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt; - сепаратор, после которого идёт собственно сам текст&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
* [https://drive.google.com/file/d/1fUPsAYoyjbuAFJ5PFbc1uO22AkR1t4ZN/view?usp=sharing Презинтация лекции]&lt;br /&gt;
* [http://archiv.infsec.ethz.ch/education/fs08/secsem/bleichenbacher98.pdf Оригинал статьи по атаке Блехенбахера]&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_Padding_oracle_%D0%BD%D0%B0_RSA&amp;diff=963</id>
		<title>Криптография/Атака Padding oracle на RSA</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_Padding_oracle_%D0%BD%D0%B0_RSA&amp;diff=963"/>
		<updated>2026-04-17T05:39:10Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Ссылки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Мультипликативное свойство RSA==&lt;br /&gt;
Пусть E(M) - функция шифрования, N - модуль, X mod Y - остаток от деления X на Y. Тогда:&lt;br /&gt;
&amp;lt;pre&amp;gt; E(M1)E(M2) mod N = E(M1M2 mod N)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Данной свойство очевидно выводится из определения функции шифрования E(M).&lt;br /&gt;
&lt;br /&gt;
==Pairing Oracle==&lt;br /&gt;
Разберем следующи пример: пусть есть сервис по заказу яиц. Но он позваляет заказывать только четное количество яиц. Заказы принимаются в зашифрованном RSA виде. Нужно, имея подслушанный зашифрованный текст C, получить его дешифрованный текст M.&lt;br /&gt;
&lt;br /&gt;
Атака выглядит следующим образом: пусть M &amp;lt; N. Можно послать сервису заказ на &amp;lt;code&amp;gt;2M mod N&amp;lt;/code&amp;gt; яиц (для этого нужно послать &amp;lt;code&amp;gt;(C*2^e) mod N)&amp;lt;/code&amp;gt;. Тогда есть два варинта:&lt;br /&gt;
# &amp;lt;code&amp;gt;M &amp;gt; N/2&amp;lt;/code&amp;gt;, тогда &amp;lt;code&amp;gt;2M mod N = 2M - N&amp;lt;/code&amp;gt; - нечетное число, сервис не принимает заказ&lt;br /&gt;
# &amp;lt;code&amp;gt;M &amp;lt;= N/2&amp;lt;/code&amp;gt;, тогда &amp;lt;code&amp;gt;2M mod N = 2M&amp;lt;/code&amp;gt; - четное число, сервис принимает заказ&lt;br /&gt;
Аналогичные суждения можно сделать, домножая C на 2^ie mod N (где i - натуральное число) и, используя метод двоичного поиска, выяснить, чему же равно M.&lt;br /&gt;
&lt;br /&gt;
==PKCS==&lt;br /&gt;
Согласно этому стандарту, паддинг текста, длина которого недостаточна для шифрования происходит следующим образом:&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#B22222&amp;quot;&amp;gt;0002&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d0f95f9836b07907669f2527&lt;br /&gt;
eda22e1f80e6e2e4dac062326f5716fca45&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;4c65616b696e672070617269747920616c6c6f777320666f7&lt;br /&gt;
22064656372797074696e6720612077686f6c652052534120656e63727970746564206d6573736167650a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#B22222&amp;quot;&amp;gt;0002&amp;lt;/span&amp;gt; - первые два байта определяют тип падинга&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d&lt;br /&gt;
0f95f9836b07907669f2527eda22e1f80e6e2e4dac062326f5716fca45&amp;lt;/span&amp;gt; - ненулевые случайные байты&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt; - сепаратор, после которого идёт собственно сам текст&lt;br /&gt;
&lt;br /&gt;
==Атака Блехенбахера==&lt;br /&gt;
[[Файл:Padding.zip|200px|thumb|left|Описание атаки]]&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
* [https://docs.google.com/presentation/d/19sGLccnP5IcVm3l3ie3UJZ_nMTxu62SMCFHCd_M2fFc/edit?usp=sharing Презинтация лекции]&lt;br /&gt;
* [http://archiv.infsec.ethz.ch/education/fs08/secsem/bleichenbacher98.pdf Оригинал статьи по атаке Блехенбахера]&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2025)&amp;diff=962</id>
		<title>Практикум на ЭВМ (2025)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2025)&amp;diff=962"/>
		<updated>2026-04-17T05:38:18Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Криптография и криптоанализ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 391 и 392.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по понедельникам 12:50, &lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 790&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом «Безопасность компьютерных систем», который читается для группы 392, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара — т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2025/2026 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько «флагов», выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний («_»).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса &amp;lt;code&amp;gt;main_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [http://dashboard.prak.seclab.cs.msu.ru/ принимающую систему]. Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова — возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
Доступ к заданиям осуществляется через VPN, доступы к которому можно получить у старосты. &lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2025)/Бонусное_задание|Бонусное задание]]&lt;br /&gt;
* http://pwnitter.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.11.2024 23:59)&lt;br /&gt;
* http://corporate.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.11.2024 23:59)&lt;br /&gt;
* http://bank.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.11.2024 23:59)&lt;br /&gt;
* http://shop.tasks.prak.seclab.cs.msu.ru/  (deadline - 14.11.2024 23:59)&lt;br /&gt;
* http://hard.tasks.prak.seclab.cs.msu.ru (deadline - 06.12.2025 23:59)&lt;br /&gt;
* http://jpg.tasks.prak.seclab.cs.msu.ru (deadline - 06.12.2025 23:59)&lt;br /&gt;
* http://club.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.12.2025 23:43)&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
* [[Media:2025 reverse tasks.zip|Задания по реверсу]] (deadline - 17.12.2025 23:59:59.999999 MSK)&lt;br /&gt;
* [[Media:2025 pwn tasks.zip|Задания по бинарной эксплутации]] (deadline - 23.12.2025 23:59:59)&lt;br /&gt;
* [https://drive.google.com/file/d/1QcgUUOuKrBB0zce9Er5OCAPIVTQ5jig5/view?usp=sharing task 2]  &amp;lt;code&amp;gt;nc fdca:22c8:7316::1 16966&amp;lt;/code&amp;gt;   (deadline - 23.12.2025 23:59:59)&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
* RSA: [[Практикум_на_ЭВМ_(2026)/broadcast | broadcast]], [[ Практикум_на_ЭВМ_(2026)/common-sense | common-sense]] (deadline - 31.03.2026 23:53)&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2020)/Задание_на_блочные_шифры|Задание на блочные шифры]] (deadline - 02.04.2026 23:53)&lt;br /&gt;
* Padding oracle: [http://even.tasks.prak.seclab.cs.msu.ru/ even], [http://bleichenbacher.tasks.prak.seclab.cs.msu.ru/ bleichenbacher] (deadline - 03.06.2026 23:59)&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (15 сентября 2025) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (22 сентября 2025) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (29 сентября 2025) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (6 октября 2025) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (13 октября 2025) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (20 октября 2025) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (27 октября 2025) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
Семинар 8 (10 ноября 2025) [[Бинарные_уязвимости/Инструменты_поиска_бинарных_уязвимостей]]&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (19 февраля 2026) [[Криптография/Асимметричная криптография на примере RSA]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (26 февраля 2026) [[Криптография/Блочные шифры. Атаки на блочные шифры]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (5 марта 2026) [[Криптография/Атака Padding oracle на RSA]]&lt;br /&gt;
&lt;br /&gt;
=== Сетевая безопасность ===&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (19 марта 2026) [[Сетевая_безопасность/Анализ_сетевого_трафика]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (26 марта 2026) [[Сетевая безопасность/Сетевой стек и DNS]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B5_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%B1%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D1%85_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B5%D0%B9&amp;diff=931</id>
		<title>Бинарные уязвимости/Инструменты поиска бинарных уязвимостей</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B5_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%B1%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D1%85_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B5%D0%B9&amp;diff=931"/>
		<updated>2025-11-10T19:11:40Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Примеры с занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== strings ==&lt;br /&gt;
&lt;br /&gt;
Выводит константные строки, которые есть в бинарнике. Строки определяются эвристикой, поэтому часто бывают ложные срабатывания. IDA тоже умеет определять строки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ strings reverse_example_1&lt;br /&gt;
/lib64/ld-linux-x86-64.so.2&lt;br /&gt;
libcrypto.so.1.0.0&lt;br /&gt;
_ITM_deregisterTMCloneTable&lt;br /&gt;
/lib64/ld-linux-x86-64.so.2&lt;br /&gt;
libcrypto.so.1.0.0&lt;br /&gt;
_ITM_deregisterTMCloneTable&lt;br /&gt;
__gmon_start__&lt;br /&gt;
_Jv_RegisterClasses&lt;br /&gt;
_ITM_registerTMCloneTable&lt;br /&gt;
MD5_Final&lt;br /&gt;
MD5_Init&lt;br /&gt;
MD5_Update&lt;br /&gt;
libc.so.6&lt;br /&gt;
fopen&lt;br /&gt;
__stack_chk_fail&lt;br /&gt;
fgets&lt;br /&gt;
malloc&lt;br /&gt;
stderr&lt;br /&gt;
fwrite&lt;br /&gt;
__sprintf_chk&lt;br /&gt;
__libc_start_main&lt;br /&gt;
free&lt;br /&gt;
GLIBC_2.3.4&lt;br /&gt;
GLIBC_2.4&lt;br /&gt;
GLIBC_2.2.5&lt;br /&gt;
OPENSSL_1.0.0&lt;br /&gt;
D$(1&lt;br /&gt;
T$(dH3&lt;br /&gt;
AUATH&lt;br /&gt;
D$h1&lt;br /&gt;
|$hdH3&amp;lt;%(&lt;br /&gt;
x[]A\A]&lt;br /&gt;
AWAVA&lt;br /&gt;
AUATL&lt;br /&gt;
[]A\A]A^A_&lt;br /&gt;
%02X&lt;br /&gt;
./cd-key.txt&lt;br /&gt;
failed to open CD key file&lt;br /&gt;
failed to read CD key file&lt;br /&gt;
invalid cdkey&lt;br /&gt;
Good job!&lt;br /&gt;
;*3$&amp;quot;&lt;br /&gt;
.shstrtab&lt;br /&gt;
.interp&lt;br /&gt;
.note.ABI-tag&lt;br /&gt;
.gnu.hash&lt;br /&gt;
.dynsym&lt;br /&gt;
.dynstr&lt;br /&gt;
.gnu.version&lt;br /&gt;
.gnu.version_r&lt;br /&gt;
.rela.dyn&lt;br /&gt;
.rela.plt&lt;br /&gt;
.init&lt;br /&gt;
.plt.got&lt;br /&gt;
.text&lt;br /&gt;
.fini&lt;br /&gt;
.rodata&lt;br /&gt;
.eh_frame_hdr&lt;br /&gt;
.eh_frame&lt;br /&gt;
.init_array&lt;br /&gt;
.fini_array&lt;br /&gt;
.jcr&lt;br /&gt;
.dynamic&lt;br /&gt;
.got.plt&lt;br /&gt;
.data&lt;br /&gt;
.bss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== strace ==&lt;br /&gt;
&lt;br /&gt;
Выводит трассу системных вызовов. Полезно, чтобы определить, какие файлы читает программа, и как вообще взаимодействует с внешним миром (в том числе сеть).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ strace ./reverse_example_1&lt;br /&gt;
...&lt;br /&gt;
openat(AT_FDCWD, &amp;quot;./cd-key.txt&amp;quot;, O_RDONLY) = 3&lt;br /&gt;
fstat(3, {st_mode=S_IFREG|0644, st_size=24, ...}) = 0&lt;br /&gt;
read(3, &amp;quot;AAAAA-BBBBB-CCCCC-DDDDD\n&amp;quot;, 4096) = 24&lt;br /&gt;
write(2, &amp;quot;invalid cdkey\n&amp;quot;, 14)         = 14&lt;br /&gt;
exit_group(1)                           = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IDA ==&lt;br /&gt;
&lt;br /&gt;
Интерактивный дизассемблер и декомпилятор.&lt;br /&gt;
&lt;br /&gt;
Версия IDA Free вполне подходит для наших задач, её можно [https://hex-rays.com/ida-free/ скачать с официального сайта]. Ссылки на скачивание могут не открываться из РФ, вот на всякий случай зеркала:&lt;br /&gt;
&lt;br /&gt;
* https://course.secsem.ru/idafree83_linux.run&lt;br /&gt;
* https://course.secsem.ru/idafree83_windows.exe&lt;br /&gt;
* https://course.secsem.ru/idafree83_mac.app.zip&lt;br /&gt;
&lt;br /&gt;
=== Шорткаты ===&lt;br /&gt;
&amp;lt;center style=&amp;quot;font-size: 500%&amp;quot;&amp;gt;&lt;br /&gt;
{{клавиша|F5}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
==== Режим дизассемблера ====&lt;br /&gt;
* {{клавиша|P}} — создать функцию, начиная с текущей позиции курсора&lt;br /&gt;
* {{клавиша|F5}} — декомпилировать функцию&lt;br /&gt;
* {{клавиша|Enter}} — проследовать по курсору (например, перейти к функции или массиву)&lt;br /&gt;
* {{клавиша|Esc}} — назад (противоположность {{клавиша|Enter}})&lt;br /&gt;
* {{клавиша|X}} — показать ссылки на то, что под курсором (на функцию, переменную, строку, etc.)&lt;br /&gt;
* {{клавиша|C}} — переопределить байты, начиная с курсора, как код.&lt;br /&gt;
* {{клавиша|D}} — переопределить байты, начиная с курсора, как данные (последовательные нажатия переключают размер переменной byte-word-dword(-qword))&lt;br /&gt;
* {{клавиша|A}} — переопределить байты, начиная с курсора, как строку&lt;br /&gt;
* {{клавиша|R}} — переопределить число в инструкции как строку (&amp;lt;code&amp;gt;mov rdx, 335F47414C465Fh&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;mov rdx, &#039;3_GALF_&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Режим декомпилятора (Hex-Rays) ====&lt;br /&gt;
* {{клавиша|N}} — переименовать&lt;br /&gt;
* {{клавиша|Y}} — поменять тип&lt;br /&gt;
** Может показаться, что с помощью {{клавиша|Y}} можно и переименовать, или с помощью {{клавиша|N}} задать тип, однако это не так&lt;br /&gt;
* {{клавиша|Enter}} — проследовать по курсору&lt;br /&gt;
* {{клавиша|Esc}} — назад &lt;br /&gt;
* {{клавиша|Tab}} — перейти к данному месту из декомпилированного в дизассемблированный код и обратно&lt;br /&gt;
&lt;br /&gt;
[https://www.hex-rays.com/products/decompiler/manual/interactive.shtml Полный список] на официальном сайте.&lt;br /&gt;
&lt;br /&gt;
== gdb ==&lt;br /&gt;
&lt;br /&gt;
С &#039;&#039;&#039;gdb&#039;&#039;&#039; можно познакомиться по любому туториалу в интернете.&lt;br /&gt;
&lt;br /&gt;
Однако в отладке приложений без исходников есть некоторая специфика, и тут могут быть особенно полезные такие команды:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;b * 0x400155&amp;lt;/code&amp;gt; - поставить брэйкпоинт на адрес.&lt;br /&gt;
* &amp;lt;code&amp;gt;p (char*)$rdi&amp;lt;/code&amp;gt; - напечатать как строку содержимое памяти, на которую указывает регистр &amp;lt;code&amp;gt;rdi&amp;lt;/code&amp;gt;. См. также [https://en.wikipedia.org/wiki/X86_calling_conventions#System_V_AMD64_ABI статью про соглашения вызовов на Википедии].&lt;br /&gt;
* &amp;lt;code&amp;gt;help x&amp;lt;/code&amp;gt; - почитать справку по команде &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, которая очень полезна для изучения содержимого памяти.&lt;br /&gt;
* &amp;lt;code&amp;gt;x/10i $pc&amp;lt;/code&amp;gt; - посмотреть несколько инструкций вперед.&lt;br /&gt;
* &amp;lt;code&amp;gt;layout asm&amp;lt;/code&amp;gt; - переключиться в псевдографический режим с листингом ассемблерных команд.&lt;br /&gt;
* &amp;lt;code&amp;gt;info proc mappings&amp;lt;/code&amp;gt; - показать карту памяти процесса&lt;br /&gt;
&lt;br /&gt;
== Примеры с занятия ==&lt;br /&gt;
&lt;br /&gt;
Бинарник, который были рассмотрен на семинаре: [[Media:Reverse examples 2025.zip]].&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B5_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%B1%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D1%85_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B5%D0%B9&amp;diff=930</id>
		<title>Бинарные уязвимости/Инструменты поиска бинарных уязвимостей</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B5_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%B1%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D1%85_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B5%D0%B9&amp;diff=930"/>
		<updated>2025-11-10T19:11:22Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Примеры с занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== strings ==&lt;br /&gt;
&lt;br /&gt;
Выводит константные строки, которые есть в бинарнике. Строки определяются эвристикой, поэтому часто бывают ложные срабатывания. IDA тоже умеет определять строки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ strings reverse_example_1&lt;br /&gt;
/lib64/ld-linux-x86-64.so.2&lt;br /&gt;
libcrypto.so.1.0.0&lt;br /&gt;
_ITM_deregisterTMCloneTable&lt;br /&gt;
/lib64/ld-linux-x86-64.so.2&lt;br /&gt;
libcrypto.so.1.0.0&lt;br /&gt;
_ITM_deregisterTMCloneTable&lt;br /&gt;
__gmon_start__&lt;br /&gt;
_Jv_RegisterClasses&lt;br /&gt;
_ITM_registerTMCloneTable&lt;br /&gt;
MD5_Final&lt;br /&gt;
MD5_Init&lt;br /&gt;
MD5_Update&lt;br /&gt;
libc.so.6&lt;br /&gt;
fopen&lt;br /&gt;
__stack_chk_fail&lt;br /&gt;
fgets&lt;br /&gt;
malloc&lt;br /&gt;
stderr&lt;br /&gt;
fwrite&lt;br /&gt;
__sprintf_chk&lt;br /&gt;
__libc_start_main&lt;br /&gt;
free&lt;br /&gt;
GLIBC_2.3.4&lt;br /&gt;
GLIBC_2.4&lt;br /&gt;
GLIBC_2.2.5&lt;br /&gt;
OPENSSL_1.0.0&lt;br /&gt;
D$(1&lt;br /&gt;
T$(dH3&lt;br /&gt;
AUATH&lt;br /&gt;
D$h1&lt;br /&gt;
|$hdH3&amp;lt;%(&lt;br /&gt;
x[]A\A]&lt;br /&gt;
AWAVA&lt;br /&gt;
AUATL&lt;br /&gt;
[]A\A]A^A_&lt;br /&gt;
%02X&lt;br /&gt;
./cd-key.txt&lt;br /&gt;
failed to open CD key file&lt;br /&gt;
failed to read CD key file&lt;br /&gt;
invalid cdkey&lt;br /&gt;
Good job!&lt;br /&gt;
;*3$&amp;quot;&lt;br /&gt;
.shstrtab&lt;br /&gt;
.interp&lt;br /&gt;
.note.ABI-tag&lt;br /&gt;
.gnu.hash&lt;br /&gt;
.dynsym&lt;br /&gt;
.dynstr&lt;br /&gt;
.gnu.version&lt;br /&gt;
.gnu.version_r&lt;br /&gt;
.rela.dyn&lt;br /&gt;
.rela.plt&lt;br /&gt;
.init&lt;br /&gt;
.plt.got&lt;br /&gt;
.text&lt;br /&gt;
.fini&lt;br /&gt;
.rodata&lt;br /&gt;
.eh_frame_hdr&lt;br /&gt;
.eh_frame&lt;br /&gt;
.init_array&lt;br /&gt;
.fini_array&lt;br /&gt;
.jcr&lt;br /&gt;
.dynamic&lt;br /&gt;
.got.plt&lt;br /&gt;
.data&lt;br /&gt;
.bss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== strace ==&lt;br /&gt;
&lt;br /&gt;
Выводит трассу системных вызовов. Полезно, чтобы определить, какие файлы читает программа, и как вообще взаимодействует с внешним миром (в том числе сеть).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ strace ./reverse_example_1&lt;br /&gt;
...&lt;br /&gt;
openat(AT_FDCWD, &amp;quot;./cd-key.txt&amp;quot;, O_RDONLY) = 3&lt;br /&gt;
fstat(3, {st_mode=S_IFREG|0644, st_size=24, ...}) = 0&lt;br /&gt;
read(3, &amp;quot;AAAAA-BBBBB-CCCCC-DDDDD\n&amp;quot;, 4096) = 24&lt;br /&gt;
write(2, &amp;quot;invalid cdkey\n&amp;quot;, 14)         = 14&lt;br /&gt;
exit_group(1)                           = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IDA ==&lt;br /&gt;
&lt;br /&gt;
Интерактивный дизассемблер и декомпилятор.&lt;br /&gt;
&lt;br /&gt;
Версия IDA Free вполне подходит для наших задач, её можно [https://hex-rays.com/ida-free/ скачать с официального сайта]. Ссылки на скачивание могут не открываться из РФ, вот на всякий случай зеркала:&lt;br /&gt;
&lt;br /&gt;
* https://course.secsem.ru/idafree83_linux.run&lt;br /&gt;
* https://course.secsem.ru/idafree83_windows.exe&lt;br /&gt;
* https://course.secsem.ru/idafree83_mac.app.zip&lt;br /&gt;
&lt;br /&gt;
=== Шорткаты ===&lt;br /&gt;
&amp;lt;center style=&amp;quot;font-size: 500%&amp;quot;&amp;gt;&lt;br /&gt;
{{клавиша|F5}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
==== Режим дизассемблера ====&lt;br /&gt;
* {{клавиша|P}} — создать функцию, начиная с текущей позиции курсора&lt;br /&gt;
* {{клавиша|F5}} — декомпилировать функцию&lt;br /&gt;
* {{клавиша|Enter}} — проследовать по курсору (например, перейти к функции или массиву)&lt;br /&gt;
* {{клавиша|Esc}} — назад (противоположность {{клавиша|Enter}})&lt;br /&gt;
* {{клавиша|X}} — показать ссылки на то, что под курсором (на функцию, переменную, строку, etc.)&lt;br /&gt;
* {{клавиша|C}} — переопределить байты, начиная с курсора, как код.&lt;br /&gt;
* {{клавиша|D}} — переопределить байты, начиная с курсора, как данные (последовательные нажатия переключают размер переменной byte-word-dword(-qword))&lt;br /&gt;
* {{клавиша|A}} — переопределить байты, начиная с курсора, как строку&lt;br /&gt;
* {{клавиша|R}} — переопределить число в инструкции как строку (&amp;lt;code&amp;gt;mov rdx, 335F47414C465Fh&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;mov rdx, &#039;3_GALF_&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Режим декомпилятора (Hex-Rays) ====&lt;br /&gt;
* {{клавиша|N}} — переименовать&lt;br /&gt;
* {{клавиша|Y}} — поменять тип&lt;br /&gt;
** Может показаться, что с помощью {{клавиша|Y}} можно и переименовать, или с помощью {{клавиша|N}} задать тип, однако это не так&lt;br /&gt;
* {{клавиша|Enter}} — проследовать по курсору&lt;br /&gt;
* {{клавиша|Esc}} — назад &lt;br /&gt;
* {{клавиша|Tab}} — перейти к данному месту из декомпилированного в дизассемблированный код и обратно&lt;br /&gt;
&lt;br /&gt;
[https://www.hex-rays.com/products/decompiler/manual/interactive.shtml Полный список] на официальном сайте.&lt;br /&gt;
&lt;br /&gt;
== gdb ==&lt;br /&gt;
&lt;br /&gt;
С &#039;&#039;&#039;gdb&#039;&#039;&#039; можно познакомиться по любому туториалу в интернете.&lt;br /&gt;
&lt;br /&gt;
Однако в отладке приложений без исходников есть некоторая специфика, и тут могут быть особенно полезные такие команды:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;b * 0x400155&amp;lt;/code&amp;gt; - поставить брэйкпоинт на адрес.&lt;br /&gt;
* &amp;lt;code&amp;gt;p (char*)$rdi&amp;lt;/code&amp;gt; - напечатать как строку содержимое памяти, на которую указывает регистр &amp;lt;code&amp;gt;rdi&amp;lt;/code&amp;gt;. См. также [https://en.wikipedia.org/wiki/X86_calling_conventions#System_V_AMD64_ABI статью про соглашения вызовов на Википедии].&lt;br /&gt;
* &amp;lt;code&amp;gt;help x&amp;lt;/code&amp;gt; - почитать справку по команде &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, которая очень полезна для изучения содержимого памяти.&lt;br /&gt;
* &amp;lt;code&amp;gt;x/10i $pc&amp;lt;/code&amp;gt; - посмотреть несколько инструкций вперед.&lt;br /&gt;
* &amp;lt;code&amp;gt;layout asm&amp;lt;/code&amp;gt; - переключиться в псевдографический режим с листингом ассемблерных команд.&lt;br /&gt;
* &amp;lt;code&amp;gt;info proc mappings&amp;lt;/code&amp;gt; - показать карту памяти процесса&lt;br /&gt;
&lt;br /&gt;
== Примеры с занятия ==&lt;br /&gt;
&lt;br /&gt;
Бинарник, который были рассмотрен на семинаре: [[Reverse examples 2025.zip]].&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B5_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%B1%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D1%85_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B5%D0%B9&amp;diff=929</id>
		<title>Бинарные уязвимости/Инструменты поиска бинарных уязвимостей</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B5_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%B1%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D1%85_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B5%D0%B9&amp;diff=929"/>
		<updated>2025-11-10T19:11:10Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Примеры с занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== strings ==&lt;br /&gt;
&lt;br /&gt;
Выводит константные строки, которые есть в бинарнике. Строки определяются эвристикой, поэтому часто бывают ложные срабатывания. IDA тоже умеет определять строки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ strings reverse_example_1&lt;br /&gt;
/lib64/ld-linux-x86-64.so.2&lt;br /&gt;
libcrypto.so.1.0.0&lt;br /&gt;
_ITM_deregisterTMCloneTable&lt;br /&gt;
/lib64/ld-linux-x86-64.so.2&lt;br /&gt;
libcrypto.so.1.0.0&lt;br /&gt;
_ITM_deregisterTMCloneTable&lt;br /&gt;
__gmon_start__&lt;br /&gt;
_Jv_RegisterClasses&lt;br /&gt;
_ITM_registerTMCloneTable&lt;br /&gt;
MD5_Final&lt;br /&gt;
MD5_Init&lt;br /&gt;
MD5_Update&lt;br /&gt;
libc.so.6&lt;br /&gt;
fopen&lt;br /&gt;
__stack_chk_fail&lt;br /&gt;
fgets&lt;br /&gt;
malloc&lt;br /&gt;
stderr&lt;br /&gt;
fwrite&lt;br /&gt;
__sprintf_chk&lt;br /&gt;
__libc_start_main&lt;br /&gt;
free&lt;br /&gt;
GLIBC_2.3.4&lt;br /&gt;
GLIBC_2.4&lt;br /&gt;
GLIBC_2.2.5&lt;br /&gt;
OPENSSL_1.0.0&lt;br /&gt;
D$(1&lt;br /&gt;
T$(dH3&lt;br /&gt;
AUATH&lt;br /&gt;
D$h1&lt;br /&gt;
|$hdH3&amp;lt;%(&lt;br /&gt;
x[]A\A]&lt;br /&gt;
AWAVA&lt;br /&gt;
AUATL&lt;br /&gt;
[]A\A]A^A_&lt;br /&gt;
%02X&lt;br /&gt;
./cd-key.txt&lt;br /&gt;
failed to open CD key file&lt;br /&gt;
failed to read CD key file&lt;br /&gt;
invalid cdkey&lt;br /&gt;
Good job!&lt;br /&gt;
;*3$&amp;quot;&lt;br /&gt;
.shstrtab&lt;br /&gt;
.interp&lt;br /&gt;
.note.ABI-tag&lt;br /&gt;
.gnu.hash&lt;br /&gt;
.dynsym&lt;br /&gt;
.dynstr&lt;br /&gt;
.gnu.version&lt;br /&gt;
.gnu.version_r&lt;br /&gt;
.rela.dyn&lt;br /&gt;
.rela.plt&lt;br /&gt;
.init&lt;br /&gt;
.plt.got&lt;br /&gt;
.text&lt;br /&gt;
.fini&lt;br /&gt;
.rodata&lt;br /&gt;
.eh_frame_hdr&lt;br /&gt;
.eh_frame&lt;br /&gt;
.init_array&lt;br /&gt;
.fini_array&lt;br /&gt;
.jcr&lt;br /&gt;
.dynamic&lt;br /&gt;
.got.plt&lt;br /&gt;
.data&lt;br /&gt;
.bss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== strace ==&lt;br /&gt;
&lt;br /&gt;
Выводит трассу системных вызовов. Полезно, чтобы определить, какие файлы читает программа, и как вообще взаимодействует с внешним миром (в том числе сеть).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ strace ./reverse_example_1&lt;br /&gt;
...&lt;br /&gt;
openat(AT_FDCWD, &amp;quot;./cd-key.txt&amp;quot;, O_RDONLY) = 3&lt;br /&gt;
fstat(3, {st_mode=S_IFREG|0644, st_size=24, ...}) = 0&lt;br /&gt;
read(3, &amp;quot;AAAAA-BBBBB-CCCCC-DDDDD\n&amp;quot;, 4096) = 24&lt;br /&gt;
write(2, &amp;quot;invalid cdkey\n&amp;quot;, 14)         = 14&lt;br /&gt;
exit_group(1)                           = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IDA ==&lt;br /&gt;
&lt;br /&gt;
Интерактивный дизассемблер и декомпилятор.&lt;br /&gt;
&lt;br /&gt;
Версия IDA Free вполне подходит для наших задач, её можно [https://hex-rays.com/ida-free/ скачать с официального сайта]. Ссылки на скачивание могут не открываться из РФ, вот на всякий случай зеркала:&lt;br /&gt;
&lt;br /&gt;
* https://course.secsem.ru/idafree83_linux.run&lt;br /&gt;
* https://course.secsem.ru/idafree83_windows.exe&lt;br /&gt;
* https://course.secsem.ru/idafree83_mac.app.zip&lt;br /&gt;
&lt;br /&gt;
=== Шорткаты ===&lt;br /&gt;
&amp;lt;center style=&amp;quot;font-size: 500%&amp;quot;&amp;gt;&lt;br /&gt;
{{клавиша|F5}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
==== Режим дизассемблера ====&lt;br /&gt;
* {{клавиша|P}} — создать функцию, начиная с текущей позиции курсора&lt;br /&gt;
* {{клавиша|F5}} — декомпилировать функцию&lt;br /&gt;
* {{клавиша|Enter}} — проследовать по курсору (например, перейти к функции или массиву)&lt;br /&gt;
* {{клавиша|Esc}} — назад (противоположность {{клавиша|Enter}})&lt;br /&gt;
* {{клавиша|X}} — показать ссылки на то, что под курсором (на функцию, переменную, строку, etc.)&lt;br /&gt;
* {{клавиша|C}} — переопределить байты, начиная с курсора, как код.&lt;br /&gt;
* {{клавиша|D}} — переопределить байты, начиная с курсора, как данные (последовательные нажатия переключают размер переменной byte-word-dword(-qword))&lt;br /&gt;
* {{клавиша|A}} — переопределить байты, начиная с курсора, как строку&lt;br /&gt;
* {{клавиша|R}} — переопределить число в инструкции как строку (&amp;lt;code&amp;gt;mov rdx, 335F47414C465Fh&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;mov rdx, &#039;3_GALF_&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Режим декомпилятора (Hex-Rays) ====&lt;br /&gt;
* {{клавиша|N}} — переименовать&lt;br /&gt;
* {{клавиша|Y}} — поменять тип&lt;br /&gt;
** Может показаться, что с помощью {{клавиша|Y}} можно и переименовать, или с помощью {{клавиша|N}} задать тип, однако это не так&lt;br /&gt;
* {{клавиша|Enter}} — проследовать по курсору&lt;br /&gt;
* {{клавиша|Esc}} — назад &lt;br /&gt;
* {{клавиша|Tab}} — перейти к данному месту из декомпилированного в дизассемблированный код и обратно&lt;br /&gt;
&lt;br /&gt;
[https://www.hex-rays.com/products/decompiler/manual/interactive.shtml Полный список] на официальном сайте.&lt;br /&gt;
&lt;br /&gt;
== gdb ==&lt;br /&gt;
&lt;br /&gt;
С &#039;&#039;&#039;gdb&#039;&#039;&#039; можно познакомиться по любому туториалу в интернете.&lt;br /&gt;
&lt;br /&gt;
Однако в отладке приложений без исходников есть некоторая специфика, и тут могут быть особенно полезные такие команды:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;b * 0x400155&amp;lt;/code&amp;gt; - поставить брэйкпоинт на адрес.&lt;br /&gt;
* &amp;lt;code&amp;gt;p (char*)$rdi&amp;lt;/code&amp;gt; - напечатать как строку содержимое памяти, на которую указывает регистр &amp;lt;code&amp;gt;rdi&amp;lt;/code&amp;gt;. См. также [https://en.wikipedia.org/wiki/X86_calling_conventions#System_V_AMD64_ABI статью про соглашения вызовов на Википедии].&lt;br /&gt;
* &amp;lt;code&amp;gt;help x&amp;lt;/code&amp;gt; - почитать справку по команде &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, которая очень полезна для изучения содержимого памяти.&lt;br /&gt;
* &amp;lt;code&amp;gt;x/10i $pc&amp;lt;/code&amp;gt; - посмотреть несколько инструкций вперед.&lt;br /&gt;
* &amp;lt;code&amp;gt;layout asm&amp;lt;/code&amp;gt; - переключиться в псевдографический режим с листингом ассемблерных команд.&lt;br /&gt;
* &amp;lt;code&amp;gt;info proc mappings&amp;lt;/code&amp;gt; - показать карту памяти процесса&lt;br /&gt;
&lt;br /&gt;
== Примеры с занятия ==&lt;br /&gt;
&lt;br /&gt;
Бинарник, который были рассмотрен на семинаре: [[Media:Reverse examples 2025.zip]].&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Reverse_examples_2025.zip&amp;diff=928</id>
		<title>Файл:Reverse examples 2025.zip</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Reverse_examples_2025.zip&amp;diff=928"/>
		<updated>2025-11-10T19:10:28Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2025)&amp;diff=927</id>
		<title>Практикум на ЭВМ (2025)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2025)&amp;diff=927"/>
		<updated>2025-11-10T19:09:50Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Веб */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 391 и 392.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по понедельникам 12:50, &lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 790&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом «Безопасность компьютерных систем», который читается для группы 392, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара — т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2025/2026 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько «флагов», выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний («_»).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса &amp;lt;code&amp;gt;main_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [http://dashboard.prak.seclab.cs.msu.ru/ принимающую систему]. Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова — возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
Доступ к заданиям осуществляется через VPN, доступы к которому можно получить у старосты. &lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2025)/Бонусное_задание|Бонусное задание]]&lt;br /&gt;
* http://pwnitter.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.11.2024 23:59)&lt;br /&gt;
* http://corporate.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.11.2024 23:59)&lt;br /&gt;
* http://bank.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.11.2024 23:59)&lt;br /&gt;
* http://shop.tasks.prak.seclab.cs.msu.ru/  (deadline - 14.11.2024 23:59)&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;
Семинар 1 (15 сентября 2025) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (22 сентября 2025) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (29 сентября 2025) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (6 октября 2025) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (13 октября 2025) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (20 октября 2025) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (27 октября 2025) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
Семинар 8 (10 ноября 2025) [[Бинарные_уязвимости/Инструменты_поиска_бинарных_уязвимостей]]&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
=== Сетевая безопасность ===&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2025)&amp;diff=926</id>
		<title>Практикум на ЭВМ (2025)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2025)&amp;diff=926"/>
		<updated>2025-11-10T19:09:32Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Реверс-инжиниринг и бинарная эксплуатация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 391 и 392.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по понедельникам 12:50, &lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 790&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом «Безопасность компьютерных систем», который читается для группы 392, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара — т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2025/2026 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько «флагов», выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний («_»).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса &amp;lt;code&amp;gt;main_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [http://dashboard.prak.seclab.cs.msu.ru/ принимающую систему]. Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова — возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
Доступ к заданиям осуществляется через VPN, доступы к которому можно получить у старосты. &lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2025)/Бонусное_задание|Бонусное задание]]&lt;br /&gt;
* http://pwnitter.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.11.2024 23:59)&lt;br /&gt;
* http://corporate.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.11.2024 23:59)&lt;br /&gt;
* http://bank.tasks.prak.seclab.cs.msu.ru/ (deadline - 08.11.2024 23:59)&lt;br /&gt;
* http://shop.tasks.prak.seclab.cs.msu.ru/  (deadline - 14.11.2024 23:59)&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;
Семинар 1 (15 сентября 2025) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (22 сентября 2025) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (29 сентября 2025) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (6 октября 2025) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (13 октября 2025) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (20 октября 2024) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (27 октября 2024) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
Семинар 8 (10 ноября 2025) [[Бинарные_уязвимости/Инструменты_поиска_бинарных_уязвимостей]]&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
=== Сетевая безопасность ===&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2024)&amp;diff=895</id>
		<title>Практикум на ЭВМ (2024)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2024)&amp;diff=895"/>
		<updated>2025-03-20T11:33:07Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Криптография и криптоанализ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по понедельникам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 645&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом «Безопасность компьютерных систем», который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара — т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2024/2025 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько «флагов», выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний («_»).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса &amp;lt;code&amp;gt;main_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [https://dashboard.prak.seclab.cs.msu.ru/ принимающую систему]. В ней нужно заранее зарегистрироваться (ник в формате &#039;&#039;Фамилия Имя&#039;&#039;) и дождаться активации, без этого сдавать флаги не получится. Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова — возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2023)/Бонусное_задание|Бонусное задание]]&lt;br /&gt;
* http://club.tasks.prak.seclab.cs.msu.ru/ (deadline - 07.10.2024 23:43)&lt;br /&gt;
* http://pwnitter.tasks.prak.seclab.cs.msu.ru/ (deadline - 17.10.2024 23:59)&lt;br /&gt;
* http://corporate.tasks.prak.seclab.cs.msu.ru/ (deadline - 17.10.2024 23:59)&lt;br /&gt;
* http://bank.tasks.prak.seclab.cs.msu.ru/ (deadline - 17.10.2024 23:59)&lt;br /&gt;
* http://shop.tasks.prak.seclab.cs.msu.ru/  (deadline - 13.11.2024 23:59)&lt;br /&gt;
* http://hard.tasks.prak.seclab.cs.msu.ru (deadline - 26.11.2024 23:59)&lt;br /&gt;
* http://jpg.tasks.prak.seclab.cs.msu.ru (deadline - 26.11.2024 23:59)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/19qIXrbhGyFUAHY-fG3pTlpse4GLLRgr7/view?usp=sharing task 1] nc 91.214.70.136 16971 (deadline - 17.12.2024 23:59)&lt;br /&gt;
* [https://drive.google.com/file/d/1Mw_BkNZ-QBkbQrRXLtZLkd3FypMdHp-d/view?usp=sharing task 2] nc 91.214.70.136 16972 (deadline - 17.12.2024 23:59)&lt;br /&gt;
* [https://drive.google.com/file/d/1IhG_OD6BDIS4TA_0QXrNxlRqU0xMcV_R/view?usp=sharing task 3] nc 91.214.70.136 16973 (deadline - 17.12.2024 23:59)&lt;br /&gt;
* [https://drive.google.com/file/d/1KF992P4Vt3i_7Hr2O6qPCxb5GOzPBXK8/view?usp=sharing task 4] nc tasks.prak.seclab.cs.msu.ru 16974 (deadline - 17.12.2024 23:59)&lt;br /&gt;
* [[Media:2024-pwn-tasks.zip |task 5]] nc tasks.prak.seclab.cs.msu.ru 16977 (deadline - 20.12.2024 23:59:59)&lt;br /&gt;
* [https://drive.google.com/file/d/1QcgUUOuKrBB0zce9Er5OCAPIVTQ5jig5/view?usp=sharing task 6] nc tasks.prak.seclab.cs.msu.ru 16966  (deadline - 20.12.2024 23:59:59)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
* RSA: [https://khashaev.ru/secsem/rsa/#broadcast broadcast], [https://khashaev.ru/secsem/rsa/#common-sense common-sense] (deadline - 20.03.2025 23:53)&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2020)/Задание_на_блочные_шифры|Задание на блочные шифры]] (deadline - 24.03.2024 23:53)&lt;br /&gt;
* Padding oracle: [http://even.tasks.prak.seclab.cs.msu.ru/ even], [http://bleichenbacher.tasks.prak.seclab.cs.msu.ru/ bleichenbacher] (deadline - 03.04.2025 23:59)&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (9 сентября 2024) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (16 сентября 2024) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (23 сентября 2024) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (30 сентября 2024) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (7 октября 2024) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (14 октября 2024) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (21 октября 2024) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
Семинар 8 (28 октября 2024) [[Бинарные_уязвимости/Инструменты_поиска_бинарных_уязвимостей]]&lt;br /&gt;
&lt;br /&gt;
Семинар 9 (25 ноября 2024) [[Бинарные_уязвимости/Переполнение_стека | Бинарные_уязвимости/Переполнение_стека_1]]&lt;br /&gt;
&lt;br /&gt;
Семинар 10 (2 декабря 2024) [[Бинарные_уязвимости/Stack_overflow | Бинарные_уязвимости/Переполнение_стека_2]] [[Бинарные_уязвимости/Off-by-one]]&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (20 февраля 2025) [[Криптография/Асимметричная криптография на примере RSA]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (27 февраля 2025) [[Криптография/Блочные шифры. Атаки на блочные шифры]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (6 марта 2025) [[Криптография/Атака Padding oracle на RSA]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2024)&amp;diff=894</id>
		<title>Практикум на ЭВМ (2024)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2024)&amp;diff=894"/>
		<updated>2025-03-20T11:32:17Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Криптография и криптоанализ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по понедельникам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 645&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом «Безопасность компьютерных систем», который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара — т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2024/2025 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько «флагов», выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний («_»).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса &amp;lt;code&amp;gt;main_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [https://dashboard.prak.seclab.cs.msu.ru/ принимающую систему]. В ней нужно заранее зарегистрироваться (ник в формате &#039;&#039;Фамилия Имя&#039;&#039;) и дождаться активации, без этого сдавать флаги не получится. Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова — возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2023)/Бонусное_задание|Бонусное задание]]&lt;br /&gt;
* http://club.tasks.prak.seclab.cs.msu.ru/ (deadline - 07.10.2024 23:43)&lt;br /&gt;
* http://pwnitter.tasks.prak.seclab.cs.msu.ru/ (deadline - 17.10.2024 23:59)&lt;br /&gt;
* http://corporate.tasks.prak.seclab.cs.msu.ru/ (deadline - 17.10.2024 23:59)&lt;br /&gt;
* http://bank.tasks.prak.seclab.cs.msu.ru/ (deadline - 17.10.2024 23:59)&lt;br /&gt;
* http://shop.tasks.prak.seclab.cs.msu.ru/  (deadline - 13.11.2024 23:59)&lt;br /&gt;
* http://hard.tasks.prak.seclab.cs.msu.ru (deadline - 26.11.2024 23:59)&lt;br /&gt;
* http://jpg.tasks.prak.seclab.cs.msu.ru (deadline - 26.11.2024 23:59)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/19qIXrbhGyFUAHY-fG3pTlpse4GLLRgr7/view?usp=sharing task 1] nc 91.214.70.136 16971 (deadline - 17.12.2024 23:59)&lt;br /&gt;
* [https://drive.google.com/file/d/1Mw_BkNZ-QBkbQrRXLtZLkd3FypMdHp-d/view?usp=sharing task 2] nc 91.214.70.136 16972 (deadline - 17.12.2024 23:59)&lt;br /&gt;
* [https://drive.google.com/file/d/1IhG_OD6BDIS4TA_0QXrNxlRqU0xMcV_R/view?usp=sharing task 3] nc 91.214.70.136 16973 (deadline - 17.12.2024 23:59)&lt;br /&gt;
* [https://drive.google.com/file/d/1KF992P4Vt3i_7Hr2O6qPCxb5GOzPBXK8/view?usp=sharing task 4] nc tasks.prak.seclab.cs.msu.ru 16974 (deadline - 17.12.2024 23:59)&lt;br /&gt;
* [[Media:2024-pwn-tasks.zip |task 5]] nc tasks.prak.seclab.cs.msu.ru 16977 (deadline - 20.12.2024 23:59:59)&lt;br /&gt;
* [https://drive.google.com/file/d/1QcgUUOuKrBB0zce9Er5OCAPIVTQ5jig5/view?usp=sharing task 6] nc tasks.prak.seclab.cs.msu.ru 16966  (deadline - 20.12.2024 23:59:59)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
* RSA: [https://khashaev.ru/secsem/rsa/#broadcast broadcast], [https://khashaev.ru/secsem/rsa/#common-sense common-sense] (deadline - 20.03.2025 23:53)&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2020)/Задание_на_блочные_шифры|Задание на блочные шифры]] (deadline - 24.03.2024 23:53)&lt;br /&gt;
* Padding oracle: [http://even.tasks.prak.seclab.cs.msu.ru/ even], [http://bleichenbacher.tasks.prak.seclab.cs.msu.ru/ bleichenbacher] (deadline - 03.04.2025 23:59)&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (9 сентября 2024) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (16 сентября 2024) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (23 сентября 2024) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (30 сентября 2024) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (7 октября 2024) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (14 октября 2024) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (21 октября 2024) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
Семинар 8 (28 октября 2024) [[Бинарные_уязвимости/Инструменты_поиска_бинарных_уязвимостей]]&lt;br /&gt;
&lt;br /&gt;
Семинар 9 (25 ноября 2024) [[Бинарные_уязвимости/Переполнение_стека | Бинарные_уязвимости/Переполнение_стека_1]]&lt;br /&gt;
&lt;br /&gt;
Семинар 10 (2 декабря 2024) [[Бинарные_уязвимости/Stack_overflow | Бинарные_уязвимости/Переполнение_стека_2]] [[Бинарные_уязвимости/Off-by-one]]&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (20 февраля 2025) [[Криптография/Асимметричная криптография на примере RSA]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (27 февраля 2025) [[Криптография/Блочные шифры. Атаки на блочные шифры]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2024)&amp;diff=878</id>
		<title>Практикум на ЭВМ (2024)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2024)&amp;diff=878"/>
		<updated>2024-10-29T05:55:36Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Материалы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по понедельникам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 645&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом «Безопасность компьютерных систем», который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара — т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2024/2025 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько «флагов», выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний («_»).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса &amp;lt;code&amp;gt;main_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [https://dashboard.prak.seclab.cs.msu.ru/ принимающую систему]. В ней нужно заранее зарегистрироваться (ник в формате &#039;&#039;Фамилия Имя&#039;&#039;) и дождаться активации, без этого сдавать флаги не получится. Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова — возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
* &amp;lt;s&amp;gt;[[Практикум_на_ЭВМ_(2023)/Бонусное_задание|Бонусное задание]]&amp;lt;/s&amp;gt;&lt;br /&gt;
* http://club.tasks.prak.seclab.cs.msu.ru/ (deadline - 07.10.2024 23:43)&lt;br /&gt;
* http://pwnitter.tasks.prak.seclab.cs.msu.ru/ (deadline - 17.10.2024 23:59)&lt;br /&gt;
* http://corporate.tasks.prak.seclab.cs.msu.ru/ (deadline - 17.10.2024 23:59)&lt;br /&gt;
* http://bank.tasks.prak.seclab.cs.msu.ru/ (deadline - 17.10.2024 23:59)&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (9 сентября 2024) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (16 сентября 2024) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (23 сентября 2024) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (30 сентября 2024) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (14 октября 2024) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (21 октября 2024) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
Семинар 8 (28 октября 2024) [[Бинарные_уязвимости/Инструменты_поиска_бинарных_уязвимостей]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2023)&amp;diff=848</id>
		<title>Практикум на ЭВМ (2023)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2023)&amp;diff=848"/>
		<updated>2024-05-16T22:00:09Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Криптография и криптоанализ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по четвергам, 10:30&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 790 или 71&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом «Безопасность компьютерных систем», который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара — т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2023/2024 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько «флагов», выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний («_»).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса &amp;lt;code&amp;gt;main_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [https://dashboard.prak.seclab.cs.msu.ru/ принимающую систему]. В ней нужно заранее зарегистрироваться (ник в формате &#039;&#039;Фамилия Имя&#039;&#039;) и дождаться активации, без этого сдавать флаги не получится. Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова — возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;[[Практикум_на_ЭВМ_(2023)/Бонусное_задание|Бонусное задание]]&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;http://club.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 17.10.2023 23:43)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://bank.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 24.10.2023 23:59)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://corporate.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 24.10.2023 23:59)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://pwnitter.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 24.10.2023 23:59)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://hard.tasks.prak.seclab.cs.msu.ru&amp;lt;/s&amp;gt; (deadline - 31.10.2023 14:00)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://jpg.tasks.prak.seclab.cs.msu.ru&amp;lt;/s&amp;gt; (deadline - 31.10.2023 14:00)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://shop.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt;  (dedline - 23.11.2023 23:59)&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
* [[Media:2023 reverse tasks.zip|Задания по реверсу]] (deadline - 16.11.2023 23:59:59.999999 MSK)&lt;br /&gt;
* [[Media:2023 pwn tasks.tar.gz|Задания по бинарной эксплутации]] (deadline - 17.12.2023 23:59:59.999999 MSK)&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Padding oracle: [http://even.tasks.prak.seclab.cs.msu.ru/ even], [http://bleichenbacher.tasks.prak.seclab.cs.msu.ru/ bleichenbacher] (deadline - 01.05.2024 23:59)&lt;br /&gt;
* RSA: [https://khashaev.ru/secsem/rsa/#broadcast broadcast], [https://khashaev.ru/secsem/rsa/#common-sense common-sense] (deadline - 1.04.2024 23:53)&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2020)/Задание_на_блочные_шифры|Задание на блочные шифры]] (deadline - 24.03.2024 23:53)&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (11 сентября 2023) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (18 сентября 2023) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (25 сентября 2023) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (2 октября 2023) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (9 октября 2023) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (16 октября 2022) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (23 октября 2020) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
Семинар 8 (30 октября 2023) [[Бинарные_уязвимости/Инструменты_поиска_бинарных_уязвимостей]]&lt;br /&gt;
&lt;br /&gt;
Семинар 10 (20 ноября 2022) [[Бинарные_уязвимости/Переполнение_стека]]&lt;br /&gt;
&lt;br /&gt;
Семинар 11 (27 ноября 2022) [[Бинарные_уязвимости/ROP]]&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (22 февраля 2024) [[Криптография/Асимметричная криптография на примере RSA]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (29 февраля 2021) [[Криптография/Блочные шифры. Атаки на блочные шифры]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (14 марта 2021) [[Криптография/Атака Padding oracle на RSA]]&lt;br /&gt;
&lt;br /&gt;
=== Сетевая безопасность ===&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (4 апреля 2024) [[Сетевая безопасность/Анализ сетевого трафика]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (11 апреля 2024) [[Сетевая безопасность/Сетевой стек и DNS]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2023)&amp;diff=839</id>
		<title>Практикум на ЭВМ (2023)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2023)&amp;diff=839"/>
		<updated>2024-04-10T19:26:08Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Криптография и криптоанализ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по четвергам, 10:30&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 790 или 71&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом «Безопасность компьютерных систем», который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара — т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2023/2024 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько «флагов», выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний («_»).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса &amp;lt;code&amp;gt;main_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [https://dashboard.prak.seclab.cs.msu.ru/ принимающую систему]. В ней нужно заранее зарегистрироваться (ник в формате &#039;&#039;Фамилия Имя&#039;&#039;) и дождаться активации, без этого сдавать флаги не получится. Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова — возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;[[Практикум_на_ЭВМ_(2023)/Бонусное_задание|Бонусное задание]]&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;http://club.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 17.10.2023 23:43)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://bank.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 24.10.2023 23:59)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://corporate.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 24.10.2023 23:59)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://pwnitter.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 24.10.2023 23:59)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://hard.tasks.prak.seclab.cs.msu.ru&amp;lt;/s&amp;gt; (deadline - 31.10.2023 14:00)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://jpg.tasks.prak.seclab.cs.msu.ru&amp;lt;/s&amp;gt; (deadline - 31.10.2023 14:00)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://shop.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt;  (dedline - 23.11.2023 23:59)&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
* [[Media:2023 reverse tasks.zip|Задания по реверсу]] (deadline - 16.11.2023 23:59:59.999999 MSK)&lt;br /&gt;
* [[Media:2023 pwn tasks.tar.gz|Задания по бинарной эксплутации]] (deadline - 17.12.2023 23:59:59.999999 MSK)&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
* RSA: [https://khashaev.ru/secsem/rsa/#broadcast broadcast], [https://khashaev.ru/secsem/rsa/#common-sense common-sense] (deadline - 1.04.2024 23:53)&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2020)/Задание_на_блочные_шифры|Задание на блочные шифры]] (deadline - 24.03.2024 23:53)&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (11 сентября 2023) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (18 сентября 2023) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (25 сентября 2023) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (2 октября 2023) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (9 октября 2023) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (16 октября 2022) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (23 октября 2020) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
Семинар 8 (30 октября 2023) [[Бинарные_уязвимости/Инструменты_поиска_бинарных_уязвимостей]]&lt;br /&gt;
&lt;br /&gt;
Семинар 10 (20 ноября 2022) [[Бинарные_уязвимости/Переполнение_стека]]&lt;br /&gt;
&lt;br /&gt;
Семинар 11 (27 ноября 2022) [[Бинарные_уязвимости/ROP]]&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (22 февраля 2024) [[Криптография/Асимметричная криптография на примере RSA]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (29 февраля 2021) [[Криптография/Блочные шифры. Атаки на блочные шифры]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (14 марта 2021) [[Криптография/Атака Padding oracle на RSA]]&lt;br /&gt;
&lt;br /&gt;
=== Сетевая безопасность ===&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (4 апреля 2024) [[Сетевая безопасность/Анализ сетевого трафика]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2021)&amp;diff=661</id>
		<title>Практикум на ЭВМ (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2021)&amp;diff=661"/>
		<updated>2022-04-18T12:50:26Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Криптография и криптоанализ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по четвергам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 609&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом &amp;quot;Безопасность компьютерных систем&amp;quot;, который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара - т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2021/2022 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
&lt;br /&gt;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько &amp;quot;флагов&amp;quot;, выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний (&amp;quot;_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса main_&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в принимающую систему. В ней нужно заранее зарегистрироваться (ник в формате &#039;&#039;Фамилия Имя&#039;&#039;) и дождаться активации, без этого сдавать флаги не получится Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова - возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2021)/Бонусное_задание|Бонусное задание]]&lt;br /&gt;
* http://club.tasks.prak.seclab.cs.msu.ru/ (deadline - 12.10.2021 15:53)&lt;br /&gt;
* http://corporate.tasks.prak.seclab.cs.msu.ru/ (deadline -  23.10.2021 23:59)&lt;br /&gt;
* http://bank.tasks.prak.seclab.cs.msu.ru (deadline -  23.10.2021 23:59)&lt;br /&gt;
* http://pwnitter.tasks.prak.seclab.cs.msu.ru/ (deadline -  23.10.2021 23:59)&lt;br /&gt;
* http://hard.tasks.prak.seclab.cs.msu.ru/ (deadline - 28.10.2021 15:30)&lt;br /&gt;
* http://jpg.tasks.prak.seclab.cs.msu.ru/ (deadline - 28.10.2021 15:30)&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/19qIXrbhGyFUAHY-fG3pTlpse4GLLRgr7/view?usp=sharing task 1] nc 91.214.70.136 16971 (deadline - 24.12.2021 12:00)&lt;br /&gt;
* [https://drive.google.com/file/d/1Mw_BkNZ-QBkbQrRXLtZLkd3FypMdHp-d/view?usp=sharing task 2] nc 91.214.70.136 16972 (deadline - 24.12.2021 12:00)&lt;br /&gt;
* [https://drive.google.com/file/d/1IhG_OD6BDIS4TA_0QXrNxlRqU0xMcV_R/view?usp=sharing task 3] nc 91.214.70.136 16973 (deadline - 24.12.2021 12:00)&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/1KF992P4Vt3i_7Hr2O6qPCxb5GOzPBXK8/view?usp=sharing task 4] nc tasks.prak.seclab.cs.msu.ru 16974 (deadline - 24.12.2021 12:00)&lt;br /&gt;
* [https://drive.google.com/file/d/1ENAVVDKlKIGgELZh6sCaP1wJ4SiOAYwz/view?usp=sharing task 5] nc tasks.prak.seclab.cs.msu.ru 16965 (deadline - 24.12.2021 12:00)&lt;br /&gt;
* [https://drive.google.com/file/d/1QcgUUOuKrBB0zce9Er5OCAPIVTQ5jig5/view?usp=sharing task 6] nc tasks.prak.seclab.cs.msu.ru 16966  (deadline - 24.12.2021 12:00)&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
* RSA: [https://khashaev.ru/secsem/rsa/#broadcast broadcast], [https://khashaev.ru/secsem/rsa/#common-sense common-sense] (deadline - 12.04.2022 15:53)&lt;br /&gt;
* Padding oracle [http://even.tasks.prak.seclab.cs.msu.ru/ even], [http://bleichenbacher.tasks.prak.seclab.cs.msu.ru/ bleichenbacher]  (deadline - 03.05.2022 23:59)&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (9 сентября 2021) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (16 сентября 2021) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (23 сентября 2021) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (30 сентября 2021) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (7 октября 2021) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (14 октября 2021) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (21 октября 2021) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
Семинар 8 (28 октября 2021) [[Бинарные_уязвимости/Инструменты_поиска_бинарных_уязвимостей]]&lt;br /&gt;
&lt;br /&gt;
Семинар 10 (22 ноября 2021) [[Бинарные_уязвимости/Stack_overflow]]&lt;br /&gt;
&lt;br /&gt;
=== Уязвимости мобильных приложений ===&lt;br /&gt;
&lt;br /&gt;
Семинар 16 декабря 2021 [[Уязвимости_мобильных_приложений/Уязвимости]]&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
Семинар 1 (21 февраля 2021) [[Введение в практическую безопасность (2019)/Асимметричная криптография на примере RSA]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (5 марта 2021) [[Криптография/Блочные шифры. Атаки на блочные шифры]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (14 марта 2021) [[Криптография/Атака Padding oracle на RSA]]&lt;br /&gt;
&lt;br /&gt;
=== Сетевая безопасность ===&lt;br /&gt;
Семинар 5 (4 апреля 2022) [[Сетевая безопасность/Анализ сетевого трафика]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (11 апреля 2021) [[Сетевая безопасность/Сетевой стек и DNS]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_Padding_oracle_%D0%BD%D0%B0_RSA&amp;diff=631</id>
		<title>Криптография/Атака Padding oracle на RSA</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_Padding_oracle_%D0%BD%D0%B0_RSA&amp;diff=631"/>
		<updated>2022-04-01T11:54:43Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Атака Блехенбахера */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Мультипликативное свойство RSA==&lt;br /&gt;
Пусть E(M) - функция шифрования, N - модуль, X mod Y - остаток от деления X на Y. Тогда:&lt;br /&gt;
&amp;lt;pre&amp;gt; E(M1)E(M2) mod N = E(M1M2 mod N)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Данной свойство очевидно выводится из определения функции шифрования E(M).&lt;br /&gt;
&lt;br /&gt;
==Pairing Oracle==&lt;br /&gt;
Разберем следующи пример: пусть есть сервис по заказу яиц. Но он позваляет заказывать только четное количество яиц. Заказы принимаются в зашифрованном RSA виде. Нужно, имея подслушанный зашифрованный текст C, получить его дешифрованный текст M.&lt;br /&gt;
&lt;br /&gt;
Атака выглядит следующим образом: пусть M &amp;lt; N. Можно послать сервису заказ на &amp;lt;code&amp;gt;2M mod N&amp;lt;/code&amp;gt; яиц (для этого нужно послать &amp;lt;code&amp;gt;(C*2^e) mod N)&amp;lt;/code&amp;gt;. Тогда есть два варинта:&lt;br /&gt;
# &amp;lt;code&amp;gt;M &amp;gt; N/2&amp;lt;/code&amp;gt;, тогда &amp;lt;code&amp;gt;2M mod N = 2M - N&amp;lt;/code&amp;gt; - нечетное число, сервис не принимает заказ&lt;br /&gt;
# &amp;lt;code&amp;gt;M &amp;lt;= N/2&amp;lt;/code&amp;gt;, тогда &amp;lt;code&amp;gt;2M mod N = 2M&amp;lt;/code&amp;gt; - четное число, сервис принимает заказ&lt;br /&gt;
Аналогичные суждения можно сделать, домножая C на 2^ie mod N (где i - натуральное число) и, используя метод двоичного поиска, выяснить, чему же равно M.&lt;br /&gt;
&lt;br /&gt;
==PKCS==&lt;br /&gt;
Согласно этому стандарту, паддинг текста, длина которого недостаточна для шифрования происходит следующим образом:&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#B22222&amp;quot;&amp;gt;0002&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d0f95f9836b07907669f2527&lt;br /&gt;
eda22e1f80e6e2e4dac062326f5716fca45&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;4c65616b696e672070617269747920616c6c6f777320666f7&lt;br /&gt;
22064656372797074696e6720612077686f6c652052534120656e63727970746564206d6573736167650a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#B22222&amp;quot;&amp;gt;0002&amp;lt;/span&amp;gt; - первые два байта определяют тип падинга&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d&lt;br /&gt;
0f95f9836b07907669f2527eda22e1f80e6e2e4dac062326f5716fca45&amp;lt;/span&amp;gt; - ненулевые случайные байты&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt; - сепаратор, после которого идёт собственно сам текст&lt;br /&gt;
&lt;br /&gt;
==Атака Блехенбахера==&lt;br /&gt;
[[Файл:Padding.zip|200px|thumb|left|Описание атаки]]&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
* [https://youtu.be/J8j2LHiKS0I Видео лекции 2021]&lt;br /&gt;
* [https://disk.yandex.ru/i/SyvbTKG5PBZVEA Видео лекции 2022]&lt;br /&gt;
* [https://docs.google.com/presentation/d/19sGLccnP5IcVm3l3ie3UJZ_nMTxu62SMCFHCd_M2fFc/edit?usp=sharing Презинтация лекции]&lt;br /&gt;
* [http://archiv.infsec.ethz.ch/education/fs08/secsem/bleichenbacher98.pdf Оригинал статьи по атаке Блехенбахера]&lt;br /&gt;
* [http://secgroup.dais.unive.it/wp-content/uploads/2012/11/Practical-Padding-Oracle-Attacks-on-RSA.html Ещё одна статья про padding oracle]&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Padding.zip&amp;diff=630</id>
		<title>Файл:Padding.zip</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Padding.zip&amp;diff=630"/>
		<updated>2022-04-01T11:53:18Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_Padding_oracle_%D0%BD%D0%B0_RSA&amp;diff=629</id>
		<title>Криптография/Атака Padding oracle на RSA</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_Padding_oracle_%D0%BD%D0%B0_RSA&amp;diff=629"/>
		<updated>2022-03-31T13:37:14Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Ссылки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Мультипликативное свойство RSA==&lt;br /&gt;
Пусть E(M) - функция шифрования, N - модуль, X mod Y - остаток от деления X на Y. Тогда:&lt;br /&gt;
&amp;lt;pre&amp;gt; E(M1)E(M2) mod N = E(M1M2 mod N)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Данной свойство очевидно выводится из определения функции шифрования E(M).&lt;br /&gt;
&lt;br /&gt;
==Pairing Oracle==&lt;br /&gt;
Разберем следующи пример: пусть есть сервис по заказу яиц. Но он позваляет заказывать только четное количество яиц. Заказы принимаются в зашифрованном RSA виде. Нужно, имея подслушанный зашифрованный текст C, получить его дешифрованный текст M.&lt;br /&gt;
&lt;br /&gt;
Атака выглядит следующим образом: пусть M &amp;lt; N. Можно послать сервису заказ на &amp;lt;code&amp;gt;2M mod N&amp;lt;/code&amp;gt; яиц (для этого нужно послать &amp;lt;code&amp;gt;(C*2^e) mod N)&amp;lt;/code&amp;gt;. Тогда есть два варинта:&lt;br /&gt;
# &amp;lt;code&amp;gt;M &amp;gt; N/2&amp;lt;/code&amp;gt;, тогда &amp;lt;code&amp;gt;2M mod N = 2M - N&amp;lt;/code&amp;gt; - нечетное число, сервис не принимает заказ&lt;br /&gt;
# &amp;lt;code&amp;gt;M &amp;lt;= N/2&amp;lt;/code&amp;gt;, тогда &amp;lt;code&amp;gt;2M mod N = 2M&amp;lt;/code&amp;gt; - четное число, сервис принимает заказ&lt;br /&gt;
Аналогичные суждения можно сделать, домножая C на 2^ie mod N (где i - натуральное число) и, используя метод двоичного поиска, выяснить, чему же равно M.&lt;br /&gt;
&lt;br /&gt;
==PKCS==&lt;br /&gt;
Согласно этому стандарту, паддинг текста, длина которого недостаточна для шифрования происходит следующим образом:&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#B22222&amp;quot;&amp;gt;0002&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d0f95f9836b07907669f2527&lt;br /&gt;
eda22e1f80e6e2e4dac062326f5716fca45&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;4c65616b696e672070617269747920616c6c6f777320666f7&lt;br /&gt;
22064656372797074696e6720612077686f6c652052534120656e63727970746564206d6573736167650a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#B22222&amp;quot;&amp;gt;0002&amp;lt;/span&amp;gt; - первые два байта определяют тип падинга&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d&lt;br /&gt;
0f95f9836b07907669f2527eda22e1f80e6e2e4dac062326f5716fca45&amp;lt;/span&amp;gt; - ненулевые случайные байты&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt; - сепаратор, после которого идёт собственно сам текст&lt;br /&gt;
&lt;br /&gt;
==Атака Блехенбахера== &lt;br /&gt;
[https://disk.yandex.ru/i/-_ohdI9lqwgqyg| Ссылка на описание атаки]&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
* [https://youtu.be/J8j2LHiKS0I Видео лекции 2021]&lt;br /&gt;
* [https://disk.yandex.ru/i/SyvbTKG5PBZVEA Видео лекции 2022]&lt;br /&gt;
* [https://docs.google.com/presentation/d/19sGLccnP5IcVm3l3ie3UJZ_nMTxu62SMCFHCd_M2fFc/edit?usp=sharing Презинтация лекции]&lt;br /&gt;
* [http://archiv.infsec.ethz.ch/education/fs08/secsem/bleichenbacher98.pdf Оригинал статьи по атаке Блехенбахера]&lt;br /&gt;
* [http://secgroup.dais.unive.it/wp-content/uploads/2012/11/Practical-Padding-Oracle-Attacks-on-RSA.html Ещё одна статья про padding oracle]&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2021)&amp;diff=628</id>
		<title>Практикум на ЭВМ (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2021)&amp;diff=628"/>
		<updated>2022-03-31T12:55:01Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Криптография и криптоанализ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по четвергам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 609&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом &amp;quot;Безопасность компьютерных систем&amp;quot;, который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара - т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2021/2022 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
&lt;br /&gt;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько &amp;quot;флагов&amp;quot;, выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний (&amp;quot;_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса main_&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в принимающую систему. В ней нужно заранее зарегистрироваться (ник в формате &#039;&#039;Фамилия Имя&#039;&#039;) и дождаться активации, без этого сдавать флаги не получится Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова - возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2021)/Бонусное_задание|Бонусное задание]]&lt;br /&gt;
* http://club.tasks.prak.seclab.cs.msu.ru/ (deadline - 12.10.2021 15:53)&lt;br /&gt;
* http://corporate.tasks.prak.seclab.cs.msu.ru/ (deadline -  23.10.2021 23:59)&lt;br /&gt;
* http://bank.tasks.prak.seclab.cs.msu.ru (deadline -  23.10.2021 23:59)&lt;br /&gt;
* http://pwnitter.tasks.prak.seclab.cs.msu.ru/ (deadline -  23.10.2021 23:59)&lt;br /&gt;
* http://hard.tasks.prak.seclab.cs.msu.ru/ (deadline - 28.10.2021 15:30)&lt;br /&gt;
* http://jpg.tasks.prak.seclab.cs.msu.ru/ (deadline - 28.10.2021 15:30)&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/19qIXrbhGyFUAHY-fG3pTlpse4GLLRgr7/view?usp=sharing task 1] nc 91.214.70.136 16971 (deadline - 24.12.2021 12:00)&lt;br /&gt;
* [https://drive.google.com/file/d/1Mw_BkNZ-QBkbQrRXLtZLkd3FypMdHp-d/view?usp=sharing task 2] nc 91.214.70.136 16972 (deadline - 24.12.2021 12:00)&lt;br /&gt;
* [https://drive.google.com/file/d/1IhG_OD6BDIS4TA_0QXrNxlRqU0xMcV_R/view?usp=sharing task 3] nc 91.214.70.136 16973 (deadline - 24.12.2021 12:00)&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/1KF992P4Vt3i_7Hr2O6qPCxb5GOzPBXK8/view?usp=sharing task 4] nc tasks.prak.seclab.cs.msu.ru 16974 (deadline - 24.12.2021 12:00)&lt;br /&gt;
* [https://drive.google.com/file/d/1ENAVVDKlKIGgELZh6sCaP1wJ4SiOAYwz/view?usp=sharing task 5] nc tasks.prak.seclab.cs.msu.ru 16965 (deadline - 24.12.2021 12:00)&lt;br /&gt;
* [https://drive.google.com/file/d/1QcgUUOuKrBB0zce9Er5OCAPIVTQ5jig5/view?usp=sharing task 6] nc tasks.prak.seclab.cs.msu.ru 16966  (deadline - 24.12.2021 12:00)&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
* RSA: [https://khashaev.ru/secsem/rsa/#broadcast broadcast], [https://khashaev.ru/secsem/rsa/#common-sense common-sense] (deadline - 12.04.2022 15:53)&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (9 сентября 2021) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (16 сентября 2021) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (23 сентября 2021) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (30 сентября 2021) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (7 октября 2021) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (14 октября 2021) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (21 октября 2021) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
Семинар 8 (28 октября 2021) [[Бинарные_уязвимости/Инструменты_поиска_бинарных_уязвимостей]]&lt;br /&gt;
&lt;br /&gt;
Семинар 10 (22 ноября 2021) [[Бинарные_уязвимости/Stack_overflow]]&lt;br /&gt;
&lt;br /&gt;
=== Уязвимости мобильных приложений ===&lt;br /&gt;
&lt;br /&gt;
Семинар 16 декабря 2021 [[Уязвимости_мобильных_приложений/Уязвимости]]&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
Семинар 1 (21 февраля 2021) [[Введение в практическую безопасность (2019)/Асимметричная криптография на примере RSA]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (5 марта 2021) [[Криптография/Блочные шифры. Атаки на блочные шифры]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (14 марта 2021) [[Криптография/Атака Padding oracle на RSA]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B5_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%B1%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D1%85_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B5%D0%B9&amp;diff=607</id>
		<title>Бинарные уязвимости/Инструменты поиска бинарных уязвимостей</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B5_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%B1%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D1%85_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B5%D0%B9&amp;diff=607"/>
		<updated>2021-10-28T08:20:57Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Примеры с занятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== strings ==&lt;br /&gt;
&lt;br /&gt;
Выводит константные строки, которые есть в бинарнике. Строки определяются эвристикой, поэтому часто бывают ложные срабатывания. IDA тоже умеет определять строки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ strings reverse_example_1&lt;br /&gt;
/lib64/ld-linux-x86-64.so.2&lt;br /&gt;
libcrypto.so.1.0.0&lt;br /&gt;
_ITM_deregisterTMCloneTable&lt;br /&gt;
/lib64/ld-linux-x86-64.so.2&lt;br /&gt;
libcrypto.so.1.0.0&lt;br /&gt;
_ITM_deregisterTMCloneTable&lt;br /&gt;
__gmon_start__&lt;br /&gt;
_Jv_RegisterClasses&lt;br /&gt;
_ITM_registerTMCloneTable&lt;br /&gt;
MD5_Final&lt;br /&gt;
MD5_Init&lt;br /&gt;
MD5_Update&lt;br /&gt;
libc.so.6&lt;br /&gt;
fopen&lt;br /&gt;
__stack_chk_fail&lt;br /&gt;
fgets&lt;br /&gt;
malloc&lt;br /&gt;
stderr&lt;br /&gt;
fwrite&lt;br /&gt;
__sprintf_chk&lt;br /&gt;
__libc_start_main&lt;br /&gt;
free&lt;br /&gt;
GLIBC_2.3.4&lt;br /&gt;
GLIBC_2.4&lt;br /&gt;
GLIBC_2.2.5&lt;br /&gt;
OPENSSL_1.0.0&lt;br /&gt;
D$(1&lt;br /&gt;
T$(dH3&lt;br /&gt;
AUATH&lt;br /&gt;
D$h1&lt;br /&gt;
|$hdH3&amp;lt;%(&lt;br /&gt;
x[]A\A]&lt;br /&gt;
AWAVA&lt;br /&gt;
AUATL&lt;br /&gt;
[]A\A]A^A_&lt;br /&gt;
%02X&lt;br /&gt;
./cd-key.txt&lt;br /&gt;
failed to open CD key file&lt;br /&gt;
failed to read CD key file&lt;br /&gt;
invalid cdkey&lt;br /&gt;
Good job!&lt;br /&gt;
;*3$&amp;quot;&lt;br /&gt;
.shstrtab&lt;br /&gt;
.interp&lt;br /&gt;
.note.ABI-tag&lt;br /&gt;
.gnu.hash&lt;br /&gt;
.dynsym&lt;br /&gt;
.dynstr&lt;br /&gt;
.gnu.version&lt;br /&gt;
.gnu.version_r&lt;br /&gt;
.rela.dyn&lt;br /&gt;
.rela.plt&lt;br /&gt;
.init&lt;br /&gt;
.plt.got&lt;br /&gt;
.text&lt;br /&gt;
.fini&lt;br /&gt;
.rodata&lt;br /&gt;
.eh_frame_hdr&lt;br /&gt;
.eh_frame&lt;br /&gt;
.init_array&lt;br /&gt;
.fini_array&lt;br /&gt;
.jcr&lt;br /&gt;
.dynamic&lt;br /&gt;
.got.plt&lt;br /&gt;
.data&lt;br /&gt;
.bss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== strace ==&lt;br /&gt;
&lt;br /&gt;
Выводит трассу системных вызовов. Полезно, чтобы определить, какие файлы читает программа, и как вообще взаимодействует с внешним миром (в том числе сеть).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ strace ./reverse_example_1&lt;br /&gt;
...&lt;br /&gt;
openat(AT_FDCWD, &amp;quot;./cd-key.txt&amp;quot;, O_RDONLY) = 3&lt;br /&gt;
fstat(3, {st_mode=S_IFREG|0644, st_size=24, ...}) = 0&lt;br /&gt;
read(3, &amp;quot;AAAAA-BBBBB-CCCCC-DDDDD\n&amp;quot;, 4096) = 24&lt;br /&gt;
write(2, &amp;quot;invalid cdkey\n&amp;quot;, 14)         = 14&lt;br /&gt;
exit_group(1)                           = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IDA Pro ==&lt;br /&gt;
&lt;br /&gt;
Интерактивный дизассемблер и декомпилятор.&lt;br /&gt;
&lt;br /&gt;
=== Шорткаты ===&lt;br /&gt;
&amp;lt;center style=&amp;quot;font-size: 500%&amp;quot;&amp;gt;&lt;br /&gt;
{{клавиша|F5}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
==== IDA ====&lt;br /&gt;
* {{клавиша|P}} — создать функцию, начиная с текущей позиции курсора&lt;br /&gt;
* {{клавиша|F5}} — декомпилировать функцию&lt;br /&gt;
* {{клавиша|Enter}} — проследовать по курсору (например, перейти к функции или массиву)&lt;br /&gt;
* {{клавиша|Esc}} — назад (противоположность {{клавиша|Enter}})&lt;br /&gt;
* {{клавиша|X}} — показать ссылки на то, что под курсором (на функцию, переменную, строку, etc.)&lt;br /&gt;
* {{клавиша|C}} — переопределить байты, начиная с курсора, как код.&lt;br /&gt;
* {{клавиша|D}} — переопределить байты, начиная с курсора, как данные (последовательные нажатия переключают размер переменной byte-word-dword(-qword))&lt;br /&gt;
* {{клавиша|A}} — переопределить байты, начиная с курсора, как строку&lt;br /&gt;
* {{клавиша|R}} — переопределить число в инструкции как строку (&amp;lt;code&amp;gt;mov rdx, 335F47414C465Fh&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;mov rdx, &#039;3_GALF_&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
Неплохой [https://radare.gitbooks.io/radare2book/content/debugger/migration.html#shortcuts список] из доков по radare2.&lt;br /&gt;
&lt;br /&gt;
==== Hex-Rays ====&lt;br /&gt;
* {{клавиша|N}} — переименовать&lt;br /&gt;
* {{клавиша|Y}} — поменять тип&lt;br /&gt;
** Может показаться, что с помощью {{клавиша|Y}} можно и переименовать, или с помощью {{клавиша|N}} задать тип, однако это не так&lt;br /&gt;
* {{клавиша|Enter}} — проследовать по курсору&lt;br /&gt;
* {{клавиша|Esc}} — назад &lt;br /&gt;
* {{клавиша|Tab}} — перейти к данному месту из декомпилированного в дизассемблированный код и обратно&lt;br /&gt;
&lt;br /&gt;
[https://www.hex-rays.com/products/decompiler/manual/interactive.shtml Полный список] на официальном сайте.&lt;br /&gt;
&lt;br /&gt;
== gdb ==&lt;br /&gt;
&lt;br /&gt;
С &#039;&#039;&#039;gdb&#039;&#039;&#039; можно познакомиться по любому туториалу в интернете.&lt;br /&gt;
&lt;br /&gt;
Однако в отладке приложений без исходников есть некоторая специфика, и тут могут быть особенно полезные такие команды:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;b * 0x400155&amp;lt;/code&amp;gt; - поставить брэйкпоинт на адрес.&lt;br /&gt;
* &amp;lt;code&amp;gt;p (char*)$rdi&amp;lt;/code&amp;gt; - напечатать как строку содержимое памяти, на которую указывает регистр &amp;lt;code&amp;gt;rdi&amp;lt;/code&amp;gt;. См. также [https://en.wikipedia.org/wiki/X86_calling_conventions#System_V_AMD64_ABI статью про соглашения вызовов на Википедии].&lt;br /&gt;
* &amp;lt;code&amp;gt;help x&amp;lt;/code&amp;gt; - почитать справку по команде &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, которая очень полезна для изучения содержимого памяти.&lt;br /&gt;
* &amp;lt;code&amp;gt;x/10i $pc&amp;lt;/code&amp;gt; - посмотреть несколько инструкций вперед.&lt;br /&gt;
* &amp;lt;code&amp;gt;layout asm&amp;lt;/code&amp;gt; - переключиться в псевдографический режим с листингом ассемблерных команд.&lt;br /&gt;
&lt;br /&gt;
== Примеры с занятия ==&lt;br /&gt;
&lt;br /&gt;
Бинарники, которые были рассмотрены на семинаре: [[Media:2019 reverse examples.zip]].&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2021)&amp;diff=606</id>
		<title>Практикум на ЭВМ (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2021)&amp;diff=606"/>
		<updated>2021-10-28T08:18:37Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Материалы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по четвергам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 609&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом &amp;quot;Безопасность компьютерных систем&amp;quot;, который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара - т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2021/2022 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
&lt;br /&gt;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько &amp;quot;флагов&amp;quot;, выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний (&amp;quot;_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса main_&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в принимающую систему. В ней нужно заранее зарегистрироваться (ник в формате &#039;&#039;Фамилия Имя&#039;&#039;) и дождаться активации, без этого сдавать флаги не получится Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова - возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2021)/Бонусное_задание|Бонусное задание]]&lt;br /&gt;
* http://club.tasks.prak.seclab.cs.msu.ru/ (deadline - 12.10.2021 15:53)&lt;br /&gt;
* http://corporate.tasks.prak.seclab.cs.msu.ru/ (deadline -  23.10.2021 23:59)&lt;br /&gt;
* http://bank.tasks.prak.seclab.cs.msu.ru (deadline -  23.10.2021 23:59)&lt;br /&gt;
* http://pwnitter.tasks.prak.seclab.cs.msu.ru/ (deadline -  23.10.2021 23:59)&lt;br /&gt;
* http://hard.tasks.prak.seclab.cs.msu.ru/ (deadline - 28.10.2021 15:30)&lt;br /&gt;
* http://jpg.tasks.prak.seclab.cs.msu.ru/ (deadline - 28.10.2021 15:30)&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (9 сентября 2021) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (16 сентября 2021) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (23 сентября 2021) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (30 сентября 2021) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (7 октября 2021) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (14 октября 2021) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (21 октября 2021) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
Семинар 8 (28 октября 2021) [[Бинарные_уязвимости/Инструменты_поиска_бинарных_уязвимостей]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2021)&amp;diff=605</id>
		<title>Практикум на ЭВМ (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2021)&amp;diff=605"/>
		<updated>2021-10-28T08:17:56Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Веб */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по четвергам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 609&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом &amp;quot;Безопасность компьютерных систем&amp;quot;, который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара - т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2021/2022 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
&lt;br /&gt;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько &amp;quot;флагов&amp;quot;, выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний (&amp;quot;_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса main_&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в принимающую систему. В ней нужно заранее зарегистрироваться (ник в формате &#039;&#039;Фамилия Имя&#039;&#039;) и дождаться активации, без этого сдавать флаги не получится Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова - возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2021)/Бонусное_задание|Бонусное задание]]&lt;br /&gt;
* http://club.tasks.prak.seclab.cs.msu.ru/ (deadline - 12.10.2021 15:53)&lt;br /&gt;
* http://corporate.tasks.prak.seclab.cs.msu.ru/ (deadline -  23.10.2021 23:59)&lt;br /&gt;
* http://bank.tasks.prak.seclab.cs.msu.ru (deadline -  23.10.2021 23:59)&lt;br /&gt;
* http://pwnitter.tasks.prak.seclab.cs.msu.ru/ (deadline -  23.10.2021 23:59)&lt;br /&gt;
* http://hard.tasks.prak.seclab.cs.msu.ru/ (deadline - 28.10.2021 15:30)&lt;br /&gt;
* http://jpg.tasks.prak.seclab.cs.msu.ru/ (deadline - 28.10.2021 15:30)&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (9 сентября 2021) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (16 сентября 2021) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (23 сентября 2021) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (30 сентября 2021) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (7 октября 2021) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (14 октября 2021) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (21 октября 2021) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_FileUpload&amp;diff=602</id>
		<title>Веб-безопасность/Уязвимости FileUpload</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_FileUpload&amp;diff=602"/>
		<updated>2021-10-07T12:20:41Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Подключение файлов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Введение=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Загрузка файлов пользователями&#039;&#039;&#039; - довольно частая часть функциональности веб-приложения (аватарки, хостинг файлов, посылка вложений вместе с сообщениями и т. д.). Небезопасная реализация этого механизма может приводить к очень серьезным уязвимостям.&lt;br /&gt;
Загрузка файлов необходима многим сервисам, таким как файлообменники, социальные сети, онлайн-конверторы и редакторы. &lt;br /&gt;
&lt;br /&gt;
Самый простой способ реализации механизма загрузки файлов - просто создавать на файловой системе сервера файл с таким же содержимым как файл, отправленный пользователем (проще говоря, &amp;quot;класть&amp;quot; присланный пользователем файл куда-то на файловую систему сервера). После загрузки файл либо доступен пользователю по прямой ссылке (т. е. определенные URL-адреса отображаются на загруженные файлы и существует URL, обращение к которому ведет к отдаче загруженного файла), либо как то еще обрабатывается веб-приложением. Само веб-приложение во многом состоит из файлов на диске, поэтому добавление файлов на сервер может быть небезопасным, так как (в общем случае) может изменить логику работы приложения. &lt;br /&gt;
Соответственно, могут появляться следующие уязвимости: &lt;br /&gt;
* Remote Code Execution&lt;br /&gt;
* перезапись или удаление файлов&lt;br /&gt;
* Local File Read, SSRF&lt;br /&gt;
* Denial of Service&lt;br /&gt;
* Information Disclosure&lt;br /&gt;
* XSS&lt;br /&gt;
=PHP=&lt;br /&gt;
PHP (PHP: Hypertext Preprocessor) — скриптовый язык общего назначения, интенсивно применяемый для разработки веб-приложений.&lt;br /&gt;
==Привет, мир!==&lt;br /&gt;
Простейшая программа, выводящая надпись &amp;quot;Привет, мир!&amp;quot;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php print(&amp;quot;Привет, мир!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Каждый скрипт должен начинаться с &amp;lt;code&amp;gt; &amp;lt;?php &amp;lt;/code&amp;gt; и желательно (но не всегда обязательно) на &amp;lt;code&amp;gt; ?&amp;gt; &amp;lt;/code&amp;gt;. Пример кода, где &amp;lt;code&amp;gt; ?&amp;gt; &amp;lt;/code&amp;gt; обязателен:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&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;Наша первая php страница&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&amp;lt;?php print(&amp;quot;Привет, мир&amp;quot;); ?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Переменные==&lt;br /&gt;
В синтаксисе PHP имя переменной записывается латинскими символами, но первым символом всегда должен быть знак доллара $, после чего идёт имя. Не допускается начинать имя переменной с цифры, а также использовать любые значения, кроме букв алфавита и знака подчеркивания.&lt;br /&gt;
&lt;br /&gt;
Правильные переменные:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$age&lt;br /&gt;
$favorite_color&lt;br /&gt;
$name2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Неправильные переменные:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
age&lt;br /&gt;
$42&lt;br /&gt;
$my-age&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Переменные бывают нескольких типов:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$favorite_color = &amp;quot;green&amp;quot;; // строка&lt;br /&gt;
$favorite_number = 42; // целое число&lt;br /&gt;
$favorite_float_number = 0.5; // число с плавающей точкой&lt;br /&gt;
$favorite_bool = true; // boolean&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Числа можно складывать, вычитать, делить, умножать опреаторы стандартные, как и во всех языках: +, -, *, /, % - плюсь, минус, умножить, делить (деление не целочисленное), остаток от деления.&lt;br /&gt;
==Конкатенация==&lt;br /&gt;
Конкатенация - &amp;quot;cклейка&amp;quot; нескольких строчек в одну.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$united_string = &amp;quot;Мой любимый цвет - &amp;quot; . $favorite_color . &amp;quot;, а любимое число - &amp;quot; . $favorite_number;&lt;br /&gt;
print($united_string);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В коде выше $favorite_number - число. Поэтому данная переменная приводится к типу данных &amp;quot;строка&amp;quot;, после чего уже происходит конкатенация.&lt;br /&gt;
==Ввод данных==&lt;br /&gt;
Данная функциональность редко используется, но нам это нужно было для решения задач на лекии. readline - функция ввода данных:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$line = readline();&lt;br /&gt;
print($line);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Массивы==&lt;br /&gt;
Массив — структура данных, хранящая набор значений (элементов массива), идентифицируемых по индексу.&lt;br /&gt;
&lt;br /&gt;
В обычных массивах в PHP индекс значение - целое число. Нумеруются массивы с 0:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$fav_shows = [&amp;quot;game of thrones&amp;quot;, &amp;quot;american horror story&amp;quot;, &amp;quot;walking dead&amp;quot;];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В ассоциативных массивах в качестве индекса может использоваться не только число. Например, строка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$user = [&#039;age&#039; =&amp;gt; 42, &#039;name&#039; =&amp;gt; &#039;Иннокентий&#039;, &#039;fav_shows&#039; =&amp;gt; [&amp;quot;game of thrones&amp;quot;, &amp;quot;american horror story&amp;quot;, &amp;quot;walking dead&amp;quot;] ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Условный оператор==&lt;br /&gt;
Синтаксис: if (условие):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
if ($gender == &amp;quot;мужчина&amp;quot;) {&lt;br /&gt;
    print(&amp;quot;Приветствую тебя, мой Господин!&amp;quot;);&lt;br /&gt;
} else if ($gender == &amp;quot;женщина&amp;quot;) {&lt;br /&gt;
    print(&amp;quot;Приветствую тебя, о Госпожа!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;Не хватает гендеров.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* оператор присваивания: =&lt;br /&gt;
* операторы сравнения: ==, ===, !=, !==, &amp;gt;, &amp;lt;, &amp;lt;=, &amp;gt;=&lt;br /&gt;
* and, or - логические и и или соответственно&lt;br /&gt;
==Циклы==&lt;br /&gt;
Синтаксис while: while (условие_остановки):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$i = 0;&lt;br /&gt;
while ($i &amp;lt; 10) {&lt;br /&gt;
    print($i);&lt;br /&gt;
    $i = $i + 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Синтаксис for: for (команда,_выполняемая_до_цикла; условие_осатновки; команда,_выполняемая_в_ конце_каждой_операции):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
for ($x = 0; $x &amp;lt; 10; ++$x) {&lt;br /&gt;
    print($x);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Для асоциативных массивах есть цикл foreach:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$user = [&lt;br /&gt;
    &#039;Имя&#039; =&amp;gt; &#039;Евгений&#039;,&lt;br /&gt;
    &#039;Возраст&#039; =&amp;gt; &#039;27&#039;,&lt;br /&gt;
    &#039;Род занятий&#039; =&amp;gt; &#039;Программист&#039;&lt;br /&gt;
];&lt;br /&gt;
foreach ($user as $key =&amp;gt; $value) {&lt;br /&gt;
    print($key . &#039;: &#039;);&lt;br /&gt;
    print($value . &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Функции==&lt;br /&gt;
Синтаксис: имя_функции(аргументы_функции):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
function is_even($number) {&lt;br /&gt;
    if ($number % 2 != 0) {&lt;br /&gt;
        return false;&lt;br /&gt;
    } else {&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
if (is_even(3)) {&lt;br /&gt;
    print(&amp;quot;3 - четное число&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;3 - нечетное число&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Подключение файлов==&lt;br /&gt;
Чтобы не писать всё в одном файле, используется команда require.&lt;br /&gt;
Содержимое файла sub.php:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
print(&amp;quot;Привет, я содержимое из sub.php!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Содержимое файла index.php:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require &#039;sub.php&#039;;&lt;br /&gt;
print(&amp;quot;А я - index.php!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
После подключения sub.php, содержимого этого файла доступно в index.php. Есть также include. Отличия между require() и include() таковы, что require() возвращает FATAL ERROR, если файл не найден, include() же возвращает только WARNING.&lt;br /&gt;
&lt;br /&gt;
==Полезные константы==&lt;br /&gt;
* __DIR__ — полный путь к директории, в которой находится текущий сценарий&lt;br /&gt;
* __FILE__ — полный путь к текущему сценарию&lt;br /&gt;
* $_COOKIE — ассоциативный массив, содержащий куки&lt;br /&gt;
* $_SESSION — ассоциативный массив, содержащий информацию о сессии&lt;br /&gt;
* $_POST — ассоциативный массив, содержащий данные, полученные после POST запроса&lt;br /&gt;
* $_GET — ассоциативный массив, содержащий данные, полученные после GET запроса&lt;br /&gt;
=Примеры=&lt;br /&gt;
1. Пусть есть сайт с формой:&lt;br /&gt;
Клиент:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;feedback&amp;quot; method=&amp;quot;POST&amp;quot; action=&amp;quot;form.php&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваше имя: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваш email: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Сообщение: &amp;lt;textarea name=&amp;quot;message&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;send&amp;quot; value=&amp;quot;Отправить&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При получении формы сервером, данные из неё можно получить следующим образом:&lt;br /&gt;
Сервер:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (isset($_POST)) {&lt;br /&gt;
    print(&amp;quot;Имя: &amp;quot; . $_POST[&#039;name&#039;]);&lt;br /&gt;
    print(&amp;quot;&amp;lt;br&amp;gt;Email: &amp;quot; . $_POST[&#039;email&#039;]);&lt;br /&gt;
    print(&amp;quot;&amp;lt;br&amp;gt;Сообщение: &amp;quot; . $_POST[&#039;message&#039;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
2. Другой пример - отправка формы:&lt;br /&gt;
Клиент:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;file_upload&amp;quot; method=&amp;quot;POST&amp;quot; action=&amp;quot;form.php&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваш аватар: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;avatar&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;send&amp;quot; value=&amp;quot;Отправить файл&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Работать с файлом ожно следующим образом:&lt;br /&gt;
Сервер:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (isset($_FILES[&#039;avatar&#039;])) {&lt;br /&gt;
    $file = $_FILES[&#039;avatar&#039;];&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Загружен файл с именем &amp;quot; . $file[&#039;name&#039;] . &amp;quot; и размером &amp;quot; . $file[&#039;size&#039;] . &amp;quot; байт&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Если не переместить файл в постаянную папку - файл будет удален:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$current_path = $_FILES[&#039;avatar&#039;][&#039;tmp_name&#039;];&lt;br /&gt;
$filename = $_FILES[&#039;avatar&#039;][&#039;name&#039;];&lt;br /&gt;
$new_path = dirname(__FILE__) . &#039;/&#039; . $filename;&lt;br /&gt;
&lt;br /&gt;
move_uploaded_file($current_path, $new_path);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=SQL=&lt;br /&gt;
Так же можно работать с базами данных. mysqli_connect - функция для подключения к mysql-серверу, mysqli_query - отправка sql-запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$link = mysqli_connect(&amp;quot;localhost&amp;quot;, &amp;quot;root&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$sql = &#039;INSERT INTO cities SET name = &amp;quot;Санкт-Петербург&amp;quot;&#039;;&lt;br /&gt;
$result = mysqli_query($link, $sql);&lt;br /&gt;
&lt;br /&gt;
if ($result == false) {&lt;br /&gt;
    print(&amp;quot;Произошла ошибка при выполнении запроса&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=web shell=&lt;br /&gt;
&lt;br /&gt;
Простейшим примером является загрузка файла с расширением .php на сайт, работающий на PHP (в качестве проверки можно попробовать обратиться по адресу &#039;&#039;&#039;cite.com/index.php&#039;&#039;&#039; и не получить ошибки). По умолчанию PHP-сайты работают так что пользователь обращается по URL к файлу (URL сайта, начиная с первого /, отображаются на определенную директорию на сервере, она называется &#039;&#039;&#039;web root&#039;&#039;&#039;) и, если этот файл имеет расширение php (или другое расширение из предопределенного списка расширений для PHP-файлов), то содержимое этого файла выполняется как код на PHP, вывод этого кода возвращается пользователю в ответе (кстати, так работает не только PHP, но и ASP.NET Web Forms, JSP, ASP). В результате, если пользователь может загрузить на сайт файл c расширением .php и обратиться к нему по URL (т. е. этот файл будет создан где-то внутри &#039;&#039;&#039;web root&#039;&#039;&#039;), то, если сервер специально не настроен чтобы файлы из директории для загрузок не выполнялись, PHP-код в нём будет выполнен. Соответственно, загрузив на уязвимый сайт файл &amp;lt;code&amp;gt;shell.php&amp;lt;/code&amp;gt; с кодом &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
42 * 66613;&lt;br /&gt;
&amp;lt;?php system(&#039;ls -lsa&#039;); ?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и, получив ссылку на него (к примеру, /uploads/5c8e82bb8ad66/attack.php), обратится по ней, то в результате этот PHP-код выполнится и в ответе сервера будет &lt;br /&gt;
произведение чисел 42 и 66613, а также список всех файлов в длинном формате (функция PHP system работает так же как одноимённая функция библиотеки Си - то есть выполняет команду shell). В итоге атакующий получает выполнение произвольного кода на сервере (RCE).&lt;br /&gt;
&lt;br /&gt;
=Обход методов защиты и атака=&lt;br /&gt;
&lt;br /&gt;
==Валидация имени файла==&lt;br /&gt;
&lt;br /&gt;
===Черный список ресширений===&lt;br /&gt;
Обходится с помощью использования двойных расширений (&amp;lt;code&amp;gt;shell.php.png&amp;lt;/code&amp;gt;) или  малоизвестный расширений (&amp;lt;code&amp;gt;.php5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.phtml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.shtml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt;). Кроме того, возможна инъекция нулевого байта (&amp;lt;code&amp;gt;shell.php%00.jpg&amp;lt;/code&amp;gt;) или регистрозависимость при проверке (&amp;lt;code&amp;gt;PHp3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.aSp&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
===Белый список расширений===&lt;br /&gt;
Спасает от использования атакующим малоизвестных и регистрозависимых расширений, но все ещё обходится с помощью двойных расширений или инъекции нулевого байта. &lt;br /&gt;
&lt;br /&gt;
===Санитайзеры===&lt;br /&gt;
Оставляет большую степень свободы. Например, если санитайзер удаляет вхождения подстрок типа &amp;lt;code&amp;gt;.php&amp;lt;/code&amp;gt;, то использования имени файла вида &amp;lt;code&amp;gt;shell.p&#039;&#039;&#039;.php&#039;&#039;&#039;hp&amp;lt;/code&amp;gt; позволяет после загрузки получить файл с именем &amp;lt;code&amp;gt;shell.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Валидация Content-Type==&lt;br /&gt;
Обходится изменением заголовка Content-Type, например, с помощью перехватывающего прокси (burp suite). Соответсвенно, в запросе &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST / HTTP/1.1&lt;br /&gt;
Host: easy.fu.khashaev.ru&lt;br /&gt;
Content-Length: 200&lt;br /&gt;
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary&lt;br /&gt;
------WebKitFormBoundary&lt;br /&gt;
Content-Disposition: form-data; name=&amp;quot;file&amp;quot;; filename=&amp;quot;info.php&amp;quot;&lt;br /&gt;
Content-Type: text/php&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
------WebKitFormBoundary--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
строчка &amp;lt;code&amp;gt;Content-Type: text/php&amp;lt;/code&amp;gt; может быть заменена на строчку &amp;lt;code&amp;gt;Content-Type: image/png&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==Прочее==&lt;br /&gt;
&#039;&#039;&#039;.htaccess&#039;&#039;&#039; - конфигурационный файл веб-сервера Apache, позволяющий управлять работой веб-сервера и настройками сайта с помощью различных параметров (директив) без изменения основного конфигурационного файла веб-сервера.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Server Side Includes&#039;&#039;&#039; - язык для динамической «сборки» веб-страниц на сервере из отдельных составных частей и выдачи клиенту полученного HTML-документа. Имеет расширения .shtml, .stm или .shtm. Например, при загрузке и вызове &#039;&#039;&#039;file.shtml&#039;&#039;&#039;, содержащего код &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;!-- #exec cmd=&amp;quot;ls&amp;quot; --&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
атакующему будет выведен список файлов данной директории. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Static HTML&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
При возможности загрузить на сервис статический HTML, создается HTML-страница, содержащая  вредоносный код (например, крадущего cookie), и ссылка на этот файл отправляется жертве. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Path Traversal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Атака, основанная на использовании специфически составленных имен файлов (например, &amp;lt;code&amp;gt;../config.ini&amp;lt;/code&amp;gt;), позволяющих выйти за пределы директории хранения файлов. Может привести к переписыванию исходных фалов веб-приложения, конфигурационных или системных файлов. &lt;br /&gt;
Атака возможна, если не используется функция &amp;lt;code&amp;gt;basename&amp;lt;/code&amp;gt; (возвращает последний компонент имени из указанного пути) или её аналог. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Filename XSS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Сервис уязвим к XSS, если допускается имя файла вида &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Полиглоты==&lt;br /&gt;
Полиглотами называют файлы, которые могут быть корректно распознаны как файлы разных типов. &lt;br /&gt;
Можно встраивать &lt;br /&gt;
* JavaScript в JPEG, GIF, PNG, PDF&lt;br /&gt;
* HTML в что-нибудь &lt;br /&gt;
* PHP в [https://rdot.org/forum/showthread.php?t=2780 JPEG ], [https://github.com/fakhrizulkifli/Defeating-PHP-GD-imagecreatefromgif GIF], [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/ PNG]&lt;br /&gt;
&lt;br /&gt;
===Структура JPEG===&lt;br /&gt;
Все jpeg-файлы имеют схожую структуру. Рассмотрим в качестве примера изображение&lt;br /&gt;
&lt;br /&gt;
[[Файл:Mini.jpg|128px]]&lt;br /&gt;
 &lt;br /&gt;
В hex-редакторе оно выглядит следующим образом &lt;br /&gt;
&lt;br /&gt;
[[Файл:Hex_print.png]]&lt;br /&gt;
&lt;br /&gt;
В структуре jpeg-файлов содержатся служебные маркеры, состоящие из двух байт и всегда начинающиеся с FF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FF D8&#039;&#039;&#039; - маркер начала jpeg-файла;&lt;br /&gt;
* &#039;&#039;&#039;FF DA&#039;&#039;&#039; - маркер начала секции Start of Scan:&lt;br /&gt;
** в двух байтах хранится длинна заголовка изображения [00 0C];&lt;br /&gt;
** заголовок изображения [03 01 00 02 11 03 11 00 3F 00];&lt;br /&gt;
** непосредственно информацию о самом изображении;&lt;br /&gt;
* &#039;&#039;&#039;FF D9&#039;&#039;&#039; - маркер конца jpeg-файла.&lt;br /&gt;
&lt;br /&gt;
=Image Magic=&lt;br /&gt;
&#039;&#039;&#039;ImageMagick&#039;&#039;&#039; — набор программ для чтения и редактирования файлов множества графических форматов, свободное и кроссплатформенное ПО. Может использоваться с языками Perl, C, C++, Python, Ruby, PHP, Node.js, Pascal, Java, Delphi, в скриптах командной оболочки или самостоятельно.&lt;br /&gt;
ImageMagick обладает широким набором возможностей (конвертация, маскирование, увеличение контрастности и т.п.) и поддерживает работу с различными типами файлов, но так же в нем находили различные уязвимости:&lt;br /&gt;
* RCE [CVE-2016-3714]&lt;br /&gt;
* SSRF [CVE-2016-3718]&lt;br /&gt;
* File deletion [CVE-2016-3715]&lt;br /&gt;
* File moving [CVE-2016-3716]&lt;br /&gt;
* Local File Read [CVE-2016-3717]&lt;br /&gt;
CVE - Common Vulnerabilities and Exposures - база данных общеизвестных уязвимостей информационной безопасности.&lt;br /&gt;
&lt;br /&gt;
Был создан сайт [https://imagetragick.com/ ImageTragick], посвященный описанию некоторых уязвимостей ImageMagic. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Пример.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Допустим, что есть некоторый онлайн-сервис, позволяющих переводить файлы в разные форматы, использующий библиотеку ImageMagic. &lt;br /&gt;
Тогда, создав файл exploit.mvg с содержанием&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
push graphic-context&lt;br /&gt;
viewbox 0 0 640 480&lt;br /&gt;
fill &#039;url(https://example.com/&lt;br /&gt;
image.jpg &amp;quot; ; | ls  &amp;quot;-la)&#039;&lt;br /&gt;
pop graphic-context&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и выполнив запрос на преобразование файла, аналогичный команде &lt;br /&gt;
&amp;lt;pre&amp;gt;$ convert exploit.mvg out.png&amp;lt;/pre&amp;gt;&lt;br /&gt;
атакующий получит список всех файлов директории.&lt;br /&gt;
&lt;br /&gt;
=Стенды=&lt;br /&gt;
* http://easy.stands.prak.seclab.cs.msu.ru&lt;br /&gt;
* http://type.stands.prak.seclab.cs.msu.ru&lt;br /&gt;
&lt;br /&gt;
=Ссылки=&lt;br /&gt;
* [https://drive.google.com/file/d/1Jep20CuBfcfKAeStwnHgR0gCf-O2Wgd0/view?usp=sharing Презинтация]&lt;br /&gt;
* [https://www.php.net/ https://www.php.net/] - сайт PHP&lt;br /&gt;
* [https://htmlacademy.ru/tutorial/php https://htmlacademy.ru/tutorial/php] - учебник PHP&lt;br /&gt;
* [http://www.php.su/php/?php http://www.php.su/php/?php] - ещё один учебник&lt;br /&gt;
* [https://www.alchemistowl.org/pocorgtfo/pocorgtfo15.pdf Полиглоты]&lt;br /&gt;
* [https://drive.google.com/file/d/1Rz0RP5tKIWCmFDP3-_--VYu40ejWf48v/view?usp=sharing Валидация структурных типов]&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2021)&amp;diff=601</id>
		<title>Практикум на ЭВМ (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2021)&amp;diff=601"/>
		<updated>2021-10-07T12:19:40Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Веб */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по четвергам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 609&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом &amp;quot;Безопасность компьютерных систем&amp;quot;, который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара - т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2021/2022 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
&lt;br /&gt;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько &amp;quot;флагов&amp;quot;, выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний (&amp;quot;_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса main_&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в принимающую систему. В ней нужно заранее зарегистрироваться (ник в формате &#039;&#039;Фамилия Имя&#039;&#039;) и дождаться активации, без этого сдавать флаги не получится Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова - возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2021)/Бонусное_задание|Бонусное задание]]&lt;br /&gt;
* http://club.tasks.prak.seclab.cs.msu.ru/ (deadline - 12.10.2021 15:53)&lt;br /&gt;
* http://corporate.tasks.prak.seclab.cs.msu.ru/ (deadline - 20.10.2021 20:13)&lt;br /&gt;
* http://bank.tasks.prak.seclab.cs.msu.ru (deadline - 20.10.2021 20:13)&lt;br /&gt;
* http://pwnitter.tasks.prak.seclab.cs.msu.ru/ (deadline - 20.10.2021 20:13)&lt;br /&gt;
* http://hard.tasks.prak.seclab.cs.msu.ru/ (deadline - 28.10.2021 15:30)&lt;br /&gt;
* http://jpg.tasks.prak.seclab.cs.msu.ru/ (deadline - 28.10.2021 15:30)&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (9 сентября 2021) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (16 сентября 2021) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (23 сентября 2021) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (30 сентября 2021) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (7 октября 2021) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_FileUpload&amp;diff=600</id>
		<title>Веб-безопасность/Уязвимости FileUpload</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_FileUpload&amp;diff=600"/>
		<updated>2021-10-07T12:15:31Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Задания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Введение=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Загрузка файлов пользователями&#039;&#039;&#039; - довольно частая часть функциональности веб-приложения (аватарки, хостинг файлов, посылка вложений вместе с сообщениями и т. д.). Небезопасная реализация этого механизма может приводить к очень серьезным уязвимостям.&lt;br /&gt;
Загрузка файлов необходима многим сервисам, таким как файлообменники, социальные сети, онлайн-конверторы и редакторы. &lt;br /&gt;
&lt;br /&gt;
Самый простой способ реализации механизма загрузки файлов - просто создавать на файловой системе сервера файл с таким же содержимым как файл, отправленный пользователем (проще говоря, &amp;quot;класть&amp;quot; присланный пользователем файл куда-то на файловую систему сервера). После загрузки файл либо доступен пользователю по прямой ссылке (т. е. определенные URL-адреса отображаются на загруженные файлы и существует URL, обращение к которому ведет к отдаче загруженного файла), либо как то еще обрабатывается веб-приложением. Само веб-приложение во многом состоит из файлов на диске, поэтому добавление файлов на сервер может быть небезопасным, так как (в общем случае) может изменить логику работы приложения. &lt;br /&gt;
Соответственно, могут появляться следующие уязвимости: &lt;br /&gt;
* Remote Code Execution&lt;br /&gt;
* перезапись или удаление файлов&lt;br /&gt;
* Local File Read, SSRF&lt;br /&gt;
* Denial of Service&lt;br /&gt;
* Information Disclosure&lt;br /&gt;
* XSS&lt;br /&gt;
=PHP=&lt;br /&gt;
PHP (PHP: Hypertext Preprocessor) — скриптовый язык общего назначения, интенсивно применяемый для разработки веб-приложений.&lt;br /&gt;
==Привет, мир!==&lt;br /&gt;
Простейшая программа, выводящая надпись &amp;quot;Привет, мир!&amp;quot;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php print(&amp;quot;Привет, мир!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Каждый скрипт должен начинаться с &amp;lt;code&amp;gt; &amp;lt;?php &amp;lt;/code&amp;gt; и желательно (но не всегда обязательно) на &amp;lt;code&amp;gt; ?&amp;gt; &amp;lt;/code&amp;gt;. Пример кода, где &amp;lt;code&amp;gt; ?&amp;gt; &amp;lt;/code&amp;gt; обязателен:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&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;Наша первая php страница&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&amp;lt;?php print(&amp;quot;Привет, мир&amp;quot;); ?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Переменные==&lt;br /&gt;
В синтаксисе PHP имя переменной записывается латинскими символами, но первым символом всегда должен быть знак доллара $, после чего идёт имя. Не допускается начинать имя переменной с цифры, а также использовать любые значения, кроме букв алфавита и знака подчеркивания.&lt;br /&gt;
&lt;br /&gt;
Правильные переменные:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$age&lt;br /&gt;
$favorite_color&lt;br /&gt;
$name2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Неправильные переменные:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
age&lt;br /&gt;
$42&lt;br /&gt;
$my-age&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Переменные бывают нескольких типов:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$favorite_color = &amp;quot;green&amp;quot;; // строка&lt;br /&gt;
$favorite_number = 42; // целое число&lt;br /&gt;
$favorite_float_number = 0.5; // число с плавающей точкой&lt;br /&gt;
$favorite_bool = true; // boolean&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Числа можно складывать, вычитать, делить, умножать опреаторы стандартные, как и во всех языках: +, -, *, /, % - плюсь, минус, умножить, делить (деление не целочисленное), остаток от деления.&lt;br /&gt;
==Конкатенация==&lt;br /&gt;
Конкатенация - &amp;quot;cклейка&amp;quot; нескольких строчек в одну.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$united_string = &amp;quot;Мой любимый цвет - &amp;quot; . $favorite_color . &amp;quot;, а любимое число - &amp;quot; . $favorite_number;&lt;br /&gt;
print($united_string);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В коде выше $favorite_number - число. Поэтому данная переменная приводится к типу данных &amp;quot;строка&amp;quot;, после чего уже происходит конкатенация.&lt;br /&gt;
==Ввод данных==&lt;br /&gt;
Данная функциональность редко используется, но нам это нужно было для решения задач на лекии. readline - функция ввода данных:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$line = readline();&lt;br /&gt;
print($line);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Массивы==&lt;br /&gt;
Массив — структура данных, хранящая набор значений (элементов массива), идентифицируемых по индексу.&lt;br /&gt;
&lt;br /&gt;
В обычных массивах в PHP индекс значение - целое число. Нумеруются массивы с 0:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$fav_shows = [&amp;quot;game of thrones&amp;quot;, &amp;quot;american horror story&amp;quot;, &amp;quot;walking dead&amp;quot;];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В ассоциативных массивах в качестве индекса может использоваться не только число. Например, строка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$user = [&#039;age&#039; =&amp;gt; 42, &#039;name&#039; =&amp;gt; &#039;Иннокентий&#039;, &#039;fav_shows&#039; =&amp;gt; [&amp;quot;game of thrones&amp;quot;, &amp;quot;american horror story&amp;quot;, &amp;quot;walking dead&amp;quot;] ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Условный оператор==&lt;br /&gt;
Синтаксис: if (условие):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
if ($gender == &amp;quot;мужчина&amp;quot;) {&lt;br /&gt;
    print(&amp;quot;Приветствую тебя, мой Господин!&amp;quot;);&lt;br /&gt;
} else if ($gender == &amp;quot;женщина&amp;quot;) {&lt;br /&gt;
    print(&amp;quot;Приветствую тебя, о Госпожа!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;Не хватает гендеров.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* оператор присваивания: =&lt;br /&gt;
* операторы сравнения: ==, ===, !=, !==, &amp;gt;, &amp;lt;, &amp;lt;=, &amp;gt;=&lt;br /&gt;
* and, or - логические и и или соответственно&lt;br /&gt;
==Циклы==&lt;br /&gt;
Синтаксис while: while (условие_остановки):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$i = 0;&lt;br /&gt;
while ($i &amp;lt; 10) {&lt;br /&gt;
    print($i);&lt;br /&gt;
    $i = $i + 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Синтаксис for: for (команда,_выполняемая_до_цикла; условие_осатновки; команда,_выполняемая_в_ конце_каждой_операции):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
for ($x = 0; $x &amp;lt; 10; ++$x) {&lt;br /&gt;
    print($x);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Для асоциативных массивах есть цикл foreach:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$user = [&lt;br /&gt;
    &#039;Имя&#039; =&amp;gt; &#039;Евгений&#039;,&lt;br /&gt;
    &#039;Возраст&#039; =&amp;gt; &#039;27&#039;,&lt;br /&gt;
    &#039;Род занятий&#039; =&amp;gt; &#039;Программист&#039;&lt;br /&gt;
];&lt;br /&gt;
foreach ($user as $key =&amp;gt; $value) {&lt;br /&gt;
    print($key . &#039;: &#039;);&lt;br /&gt;
    print($value . &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Функции==&lt;br /&gt;
Синтаксис: имя_функции(аргументы_функции):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
function is_even($number) {&lt;br /&gt;
    if ($number % 2 != 0) {&lt;br /&gt;
        return false;&lt;br /&gt;
    } else {&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
if (is_even(3)) {&lt;br /&gt;
    print(&amp;quot;3 - четное число&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;3 - нечетное число&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Подключение файлов==&lt;br /&gt;
Чтобы не писать всё в одном файле, используется команда require.&lt;br /&gt;
Содержимое файла sub.php:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
print(&amp;quot;Привет, я содержимое из sub.php!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Содержимое файла index.php:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require &#039;sub.php&#039;;&lt;br /&gt;
print(&amp;quot;А я - index.php!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
После подключения sub.php, содержимого этого файла доступно в index.php.&lt;br /&gt;
==Полезные константы==&lt;br /&gt;
* __DIR__ — полный путь к директории, в которой находится текущий сценарий&lt;br /&gt;
* __FILE__ — полный путь к текущему сценарию&lt;br /&gt;
* $_COOKIE — ассоциативный массив, содержащий куки&lt;br /&gt;
* $_SESSION — ассоциативный массив, содержащий информацию о сессии&lt;br /&gt;
* $_POST — ассоциативный массив, содержащий данные, полученные после POST запроса&lt;br /&gt;
* $_GET — ассоциативный массив, содержащий данные, полученные после GET запроса&lt;br /&gt;
=Примеры=&lt;br /&gt;
1. Пусть есть сайт с формой:&lt;br /&gt;
Клиент:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;feedback&amp;quot; method=&amp;quot;POST&amp;quot; action=&amp;quot;form.php&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваше имя: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваш email: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Сообщение: &amp;lt;textarea name=&amp;quot;message&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;send&amp;quot; value=&amp;quot;Отправить&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При получении формы сервером, данные из неё можно получить следующим образом:&lt;br /&gt;
Сервер:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (isset($_POST)) {&lt;br /&gt;
    print(&amp;quot;Имя: &amp;quot; . $_POST[&#039;name&#039;]);&lt;br /&gt;
    print(&amp;quot;&amp;lt;br&amp;gt;Email: &amp;quot; . $_POST[&#039;email&#039;]);&lt;br /&gt;
    print(&amp;quot;&amp;lt;br&amp;gt;Сообщение: &amp;quot; . $_POST[&#039;message&#039;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
2. Другой пример - отправка формы:&lt;br /&gt;
Клиент:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;file_upload&amp;quot; method=&amp;quot;POST&amp;quot; action=&amp;quot;form.php&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваш аватар: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;avatar&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;send&amp;quot; value=&amp;quot;Отправить файл&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Работать с файлом ожно следующим образом:&lt;br /&gt;
Сервер:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (isset($_FILES[&#039;avatar&#039;])) {&lt;br /&gt;
    $file = $_FILES[&#039;avatar&#039;];&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Загружен файл с именем &amp;quot; . $file[&#039;name&#039;] . &amp;quot; и размером &amp;quot; . $file[&#039;size&#039;] . &amp;quot; байт&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Если не переместить файл в постаянную папку - файл будет удален:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$current_path = $_FILES[&#039;avatar&#039;][&#039;tmp_name&#039;];&lt;br /&gt;
$filename = $_FILES[&#039;avatar&#039;][&#039;name&#039;];&lt;br /&gt;
$new_path = dirname(__FILE__) . &#039;/&#039; . $filename;&lt;br /&gt;
&lt;br /&gt;
move_uploaded_file($current_path, $new_path);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=SQL=&lt;br /&gt;
Так же можно работать с базами данных. mysqli_connect - функция для подключения к mysql-серверу, mysqli_query - отправка sql-запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$link = mysqli_connect(&amp;quot;localhost&amp;quot;, &amp;quot;root&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$sql = &#039;INSERT INTO cities SET name = &amp;quot;Санкт-Петербург&amp;quot;&#039;;&lt;br /&gt;
$result = mysqli_query($link, $sql);&lt;br /&gt;
&lt;br /&gt;
if ($result == false) {&lt;br /&gt;
    print(&amp;quot;Произошла ошибка при выполнении запроса&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=web shell=&lt;br /&gt;
&lt;br /&gt;
Простейшим примером является загрузка файла с расширением .php на сайт, работающий на PHP (в качестве проверки можно попробовать обратиться по адресу &#039;&#039;&#039;cite.com/index.php&#039;&#039;&#039; и не получить ошибки). По умолчанию PHP-сайты работают так что пользователь обращается по URL к файлу (URL сайта, начиная с первого /, отображаются на определенную директорию на сервере, она называется &#039;&#039;&#039;web root&#039;&#039;&#039;) и, если этот файл имеет расширение php (или другое расширение из предопределенного списка расширений для PHP-файлов), то содержимое этого файла выполняется как код на PHP, вывод этого кода возвращается пользователю в ответе (кстати, так работает не только PHP, но и ASP.NET Web Forms, JSP, ASP). В результате, если пользователь может загрузить на сайт файл c расширением .php и обратиться к нему по URL (т. е. этот файл будет создан где-то внутри &#039;&#039;&#039;web root&#039;&#039;&#039;), то, если сервер специально не настроен чтобы файлы из директории для загрузок не выполнялись, PHP-код в нём будет выполнен. Соответственно, загрузив на уязвимый сайт файл &amp;lt;code&amp;gt;shell.php&amp;lt;/code&amp;gt; с кодом &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
42 * 66613;&lt;br /&gt;
&amp;lt;?php system(&#039;ls -lsa&#039;); ?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и, получив ссылку на него (к примеру, /uploads/5c8e82bb8ad66/attack.php), обратится по ней, то в результате этот PHP-код выполнится и в ответе сервера будет &lt;br /&gt;
произведение чисел 42 и 66613, а также список всех файлов в длинном формате (функция PHP system работает так же как одноимённая функция библиотеки Си - то есть выполняет команду shell). В итоге атакующий получает выполнение произвольного кода на сервере (RCE).&lt;br /&gt;
&lt;br /&gt;
=Обход методов защиты и атака=&lt;br /&gt;
&lt;br /&gt;
==Валидация имени файла==&lt;br /&gt;
&lt;br /&gt;
===Черный список ресширений===&lt;br /&gt;
Обходится с помощью использования двойных расширений (&amp;lt;code&amp;gt;shell.php.png&amp;lt;/code&amp;gt;) или  малоизвестный расширений (&amp;lt;code&amp;gt;.php5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.phtml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.shtml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt;). Кроме того, возможна инъекция нулевого байта (&amp;lt;code&amp;gt;shell.php%00.jpg&amp;lt;/code&amp;gt;) или регистрозависимость при проверке (&amp;lt;code&amp;gt;PHp3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.aSp&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
===Белый список расширений===&lt;br /&gt;
Спасает от использования атакующим малоизвестных и регистрозависимых расширений, но все ещё обходится с помощью двойных расширений или инъекции нулевого байта. &lt;br /&gt;
&lt;br /&gt;
===Санитайзеры===&lt;br /&gt;
Оставляет большую степень свободы. Например, если санитайзер удаляет вхождения подстрок типа &amp;lt;code&amp;gt;.php&amp;lt;/code&amp;gt;, то использования имени файла вида &amp;lt;code&amp;gt;shell.p&#039;&#039;&#039;.php&#039;&#039;&#039;hp&amp;lt;/code&amp;gt; позволяет после загрузки получить файл с именем &amp;lt;code&amp;gt;shell.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Валидация Content-Type==&lt;br /&gt;
Обходится изменением заголовка Content-Type, например, с помощью перехватывающего прокси (burp suite). Соответсвенно, в запросе &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST / HTTP/1.1&lt;br /&gt;
Host: easy.fu.khashaev.ru&lt;br /&gt;
Content-Length: 200&lt;br /&gt;
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary&lt;br /&gt;
------WebKitFormBoundary&lt;br /&gt;
Content-Disposition: form-data; name=&amp;quot;file&amp;quot;; filename=&amp;quot;info.php&amp;quot;&lt;br /&gt;
Content-Type: text/php&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
------WebKitFormBoundary--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
строчка &amp;lt;code&amp;gt;Content-Type: text/php&amp;lt;/code&amp;gt; может быть заменена на строчку &amp;lt;code&amp;gt;Content-Type: image/png&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==Прочее==&lt;br /&gt;
&#039;&#039;&#039;.htaccess&#039;&#039;&#039; - конфигурационный файл веб-сервера Apache, позволяющий управлять работой веб-сервера и настройками сайта с помощью различных параметров (директив) без изменения основного конфигурационного файла веб-сервера.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Server Side Includes&#039;&#039;&#039; - язык для динамической «сборки» веб-страниц на сервере из отдельных составных частей и выдачи клиенту полученного HTML-документа. Имеет расширения .shtml, .stm или .shtm. Например, при загрузке и вызове &#039;&#039;&#039;file.shtml&#039;&#039;&#039;, содержащего код &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;!-- #exec cmd=&amp;quot;ls&amp;quot; --&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
атакующему будет выведен список файлов данной директории. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Static HTML&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
При возможности загрузить на сервис статический HTML, создается HTML-страница, содержащая  вредоносный код (например, крадущего cookie), и ссылка на этот файл отправляется жертве. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Path Traversal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Атака, основанная на использовании специфически составленных имен файлов (например, &amp;lt;code&amp;gt;../config.ini&amp;lt;/code&amp;gt;), позволяющих выйти за пределы директории хранения файлов. Может привести к переписыванию исходных фалов веб-приложения, конфигурационных или системных файлов. &lt;br /&gt;
Атака возможна, если не используется функция &amp;lt;code&amp;gt;basename&amp;lt;/code&amp;gt; (возвращает последний компонент имени из указанного пути) или её аналог. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Filename XSS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Сервис уязвим к XSS, если допускается имя файла вида &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Полиглоты==&lt;br /&gt;
Полиглотами называют файлы, которые могут быть корректно распознаны как файлы разных типов. &lt;br /&gt;
Можно встраивать &lt;br /&gt;
* JavaScript в JPEG, GIF, PNG, PDF&lt;br /&gt;
* HTML в что-нибудь &lt;br /&gt;
* PHP в [https://rdot.org/forum/showthread.php?t=2780 JPEG ], [https://github.com/fakhrizulkifli/Defeating-PHP-GD-imagecreatefromgif GIF], [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/ PNG]&lt;br /&gt;
&lt;br /&gt;
===Структура JPEG===&lt;br /&gt;
Все jpeg-файлы имеют схожую структуру. Рассмотрим в качестве примера изображение&lt;br /&gt;
&lt;br /&gt;
[[Файл:Mini.jpg|128px]]&lt;br /&gt;
 &lt;br /&gt;
В hex-редакторе оно выглядит следующим образом &lt;br /&gt;
&lt;br /&gt;
[[Файл:Hex_print.png]]&lt;br /&gt;
&lt;br /&gt;
В структуре jpeg-файлов содержатся служебные маркеры, состоящие из двух байт и всегда начинающиеся с FF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FF D8&#039;&#039;&#039; - маркер начала jpeg-файла;&lt;br /&gt;
* &#039;&#039;&#039;FF DA&#039;&#039;&#039; - маркер начала секции Start of Scan:&lt;br /&gt;
** в двух байтах хранится длинна заголовка изображения [00 0C];&lt;br /&gt;
** заголовок изображения [03 01 00 02 11 03 11 00 3F 00];&lt;br /&gt;
** непосредственно информацию о самом изображении;&lt;br /&gt;
* &#039;&#039;&#039;FF D9&#039;&#039;&#039; - маркер конца jpeg-файла.&lt;br /&gt;
&lt;br /&gt;
=Image Magic=&lt;br /&gt;
&#039;&#039;&#039;ImageMagick&#039;&#039;&#039; — набор программ для чтения и редактирования файлов множества графических форматов, свободное и кроссплатформенное ПО. Может использоваться с языками Perl, C, C++, Python, Ruby, PHP, Node.js, Pascal, Java, Delphi, в скриптах командной оболочки или самостоятельно.&lt;br /&gt;
ImageMagick обладает широким набором возможностей (конвертация, маскирование, увеличение контрастности и т.п.) и поддерживает работу с различными типами файлов, но так же в нем находили различные уязвимости:&lt;br /&gt;
* RCE [CVE-2016-3714]&lt;br /&gt;
* SSRF [CVE-2016-3718]&lt;br /&gt;
* File deletion [CVE-2016-3715]&lt;br /&gt;
* File moving [CVE-2016-3716]&lt;br /&gt;
* Local File Read [CVE-2016-3717]&lt;br /&gt;
CVE - Common Vulnerabilities and Exposures - база данных общеизвестных уязвимостей информационной безопасности.&lt;br /&gt;
&lt;br /&gt;
Был создан сайт [https://imagetragick.com/ ImageTragick], посвященный описанию некоторых уязвимостей ImageMagic. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Пример.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Допустим, что есть некоторый онлайн-сервис, позволяющих переводить файлы в разные форматы, использующий библиотеку ImageMagic. &lt;br /&gt;
Тогда, создав файл exploit.mvg с содержанием&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
push graphic-context&lt;br /&gt;
viewbox 0 0 640 480&lt;br /&gt;
fill &#039;url(https://example.com/&lt;br /&gt;
image.jpg &amp;quot; ; | ls  &amp;quot;-la)&#039;&lt;br /&gt;
pop graphic-context&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и выполнив запрос на преобразование файла, аналогичный команде &lt;br /&gt;
&amp;lt;pre&amp;gt;$ convert exploit.mvg out.png&amp;lt;/pre&amp;gt;&lt;br /&gt;
атакующий получит список всех файлов директории.&lt;br /&gt;
&lt;br /&gt;
=Стенды=&lt;br /&gt;
* http://easy.stands.prak.seclab.cs.msu.ru&lt;br /&gt;
* http://type.stands.prak.seclab.cs.msu.ru&lt;br /&gt;
&lt;br /&gt;
=Ссылки=&lt;br /&gt;
* [https://drive.google.com/file/d/1Jep20CuBfcfKAeStwnHgR0gCf-O2Wgd0/view?usp=sharing Презинтация]&lt;br /&gt;
* [https://www.php.net/ https://www.php.net/] - сайт PHP&lt;br /&gt;
* [https://htmlacademy.ru/tutorial/php https://htmlacademy.ru/tutorial/php] - учебник PHP&lt;br /&gt;
* [http://www.php.su/php/?php http://www.php.su/php/?php] - ещё один учебник&lt;br /&gt;
* [https://www.alchemistowl.org/pocorgtfo/pocorgtfo15.pdf Полиглоты]&lt;br /&gt;
* [https://drive.google.com/file/d/1Rz0RP5tKIWCmFDP3-_--VYu40ejWf48v/view?usp=sharing Валидация структурных типов]&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_FileUpload&amp;diff=599</id>
		<title>Веб-безопасность/Уязвимости FileUpload</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_FileUpload&amp;diff=599"/>
		<updated>2021-10-07T12:13:39Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Прочее */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Введение=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Загрузка файлов пользователями&#039;&#039;&#039; - довольно частая часть функциональности веб-приложения (аватарки, хостинг файлов, посылка вложений вместе с сообщениями и т. д.). Небезопасная реализация этого механизма может приводить к очень серьезным уязвимостям.&lt;br /&gt;
Загрузка файлов необходима многим сервисам, таким как файлообменники, социальные сети, онлайн-конверторы и редакторы. &lt;br /&gt;
&lt;br /&gt;
Самый простой способ реализации механизма загрузки файлов - просто создавать на файловой системе сервера файл с таким же содержимым как файл, отправленный пользователем (проще говоря, &amp;quot;класть&amp;quot; присланный пользователем файл куда-то на файловую систему сервера). После загрузки файл либо доступен пользователю по прямой ссылке (т. е. определенные URL-адреса отображаются на загруженные файлы и существует URL, обращение к которому ведет к отдаче загруженного файла), либо как то еще обрабатывается веб-приложением. Само веб-приложение во многом состоит из файлов на диске, поэтому добавление файлов на сервер может быть небезопасным, так как (в общем случае) может изменить логику работы приложения. &lt;br /&gt;
Соответственно, могут появляться следующие уязвимости: &lt;br /&gt;
* Remote Code Execution&lt;br /&gt;
* перезапись или удаление файлов&lt;br /&gt;
* Local File Read, SSRF&lt;br /&gt;
* Denial of Service&lt;br /&gt;
* Information Disclosure&lt;br /&gt;
* XSS&lt;br /&gt;
=PHP=&lt;br /&gt;
PHP (PHP: Hypertext Preprocessor) — скриптовый язык общего назначения, интенсивно применяемый для разработки веб-приложений.&lt;br /&gt;
==Привет, мир!==&lt;br /&gt;
Простейшая программа, выводящая надпись &amp;quot;Привет, мир!&amp;quot;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php print(&amp;quot;Привет, мир!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Каждый скрипт должен начинаться с &amp;lt;code&amp;gt; &amp;lt;?php &amp;lt;/code&amp;gt; и желательно (но не всегда обязательно) на &amp;lt;code&amp;gt; ?&amp;gt; &amp;lt;/code&amp;gt;. Пример кода, где &amp;lt;code&amp;gt; ?&amp;gt; &amp;lt;/code&amp;gt; обязателен:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&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;Наша первая php страница&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&amp;lt;?php print(&amp;quot;Привет, мир&amp;quot;); ?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Переменные==&lt;br /&gt;
В синтаксисе PHP имя переменной записывается латинскими символами, но первым символом всегда должен быть знак доллара $, после чего идёт имя. Не допускается начинать имя переменной с цифры, а также использовать любые значения, кроме букв алфавита и знака подчеркивания.&lt;br /&gt;
&lt;br /&gt;
Правильные переменные:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$age&lt;br /&gt;
$favorite_color&lt;br /&gt;
$name2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Неправильные переменные:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
age&lt;br /&gt;
$42&lt;br /&gt;
$my-age&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Переменные бывают нескольких типов:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$favorite_color = &amp;quot;green&amp;quot;; // строка&lt;br /&gt;
$favorite_number = 42; // целое число&lt;br /&gt;
$favorite_float_number = 0.5; // число с плавающей точкой&lt;br /&gt;
$favorite_bool = true; // boolean&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Числа можно складывать, вычитать, делить, умножать опреаторы стандартные, как и во всех языках: +, -, *, /, % - плюсь, минус, умножить, делить (деление не целочисленное), остаток от деления.&lt;br /&gt;
==Конкатенация==&lt;br /&gt;
Конкатенация - &amp;quot;cклейка&amp;quot; нескольких строчек в одну.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$united_string = &amp;quot;Мой любимый цвет - &amp;quot; . $favorite_color . &amp;quot;, а любимое число - &amp;quot; . $favorite_number;&lt;br /&gt;
print($united_string);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В коде выше $favorite_number - число. Поэтому данная переменная приводится к типу данных &amp;quot;строка&amp;quot;, после чего уже происходит конкатенация.&lt;br /&gt;
==Ввод данных==&lt;br /&gt;
Данная функциональность редко используется, но нам это нужно было для решения задач на лекии. readline - функция ввода данных:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$line = readline();&lt;br /&gt;
print($line);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Массивы==&lt;br /&gt;
Массив — структура данных, хранящая набор значений (элементов массива), идентифицируемых по индексу.&lt;br /&gt;
&lt;br /&gt;
В обычных массивах в PHP индекс значение - целое число. Нумеруются массивы с 0:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$fav_shows = [&amp;quot;game of thrones&amp;quot;, &amp;quot;american horror story&amp;quot;, &amp;quot;walking dead&amp;quot;];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В ассоциативных массивах в качестве индекса может использоваться не только число. Например, строка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$user = [&#039;age&#039; =&amp;gt; 42, &#039;name&#039; =&amp;gt; &#039;Иннокентий&#039;, &#039;fav_shows&#039; =&amp;gt; [&amp;quot;game of thrones&amp;quot;, &amp;quot;american horror story&amp;quot;, &amp;quot;walking dead&amp;quot;] ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Условный оператор==&lt;br /&gt;
Синтаксис: if (условие):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
if ($gender == &amp;quot;мужчина&amp;quot;) {&lt;br /&gt;
    print(&amp;quot;Приветствую тебя, мой Господин!&amp;quot;);&lt;br /&gt;
} else if ($gender == &amp;quot;женщина&amp;quot;) {&lt;br /&gt;
    print(&amp;quot;Приветствую тебя, о Госпожа!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;Не хватает гендеров.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* оператор присваивания: =&lt;br /&gt;
* операторы сравнения: ==, ===, !=, !==, &amp;gt;, &amp;lt;, &amp;lt;=, &amp;gt;=&lt;br /&gt;
* and, or - логические и и или соответственно&lt;br /&gt;
==Циклы==&lt;br /&gt;
Синтаксис while: while (условие_остановки):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$i = 0;&lt;br /&gt;
while ($i &amp;lt; 10) {&lt;br /&gt;
    print($i);&lt;br /&gt;
    $i = $i + 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Синтаксис for: for (команда,_выполняемая_до_цикла; условие_осатновки; команда,_выполняемая_в_ конце_каждой_операции):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
for ($x = 0; $x &amp;lt; 10; ++$x) {&lt;br /&gt;
    print($x);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Для асоциативных массивах есть цикл foreach:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$user = [&lt;br /&gt;
    &#039;Имя&#039; =&amp;gt; &#039;Евгений&#039;,&lt;br /&gt;
    &#039;Возраст&#039; =&amp;gt; &#039;27&#039;,&lt;br /&gt;
    &#039;Род занятий&#039; =&amp;gt; &#039;Программист&#039;&lt;br /&gt;
];&lt;br /&gt;
foreach ($user as $key =&amp;gt; $value) {&lt;br /&gt;
    print($key . &#039;: &#039;);&lt;br /&gt;
    print($value . &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Функции==&lt;br /&gt;
Синтаксис: имя_функции(аргументы_функции):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
function is_even($number) {&lt;br /&gt;
    if ($number % 2 != 0) {&lt;br /&gt;
        return false;&lt;br /&gt;
    } else {&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
if (is_even(3)) {&lt;br /&gt;
    print(&amp;quot;3 - четное число&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;3 - нечетное число&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Подключение файлов==&lt;br /&gt;
Чтобы не писать всё в одном файле, используется команда require.&lt;br /&gt;
Содержимое файла sub.php:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
print(&amp;quot;Привет, я содержимое из sub.php!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Содержимое файла index.php:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require &#039;sub.php&#039;;&lt;br /&gt;
print(&amp;quot;А я - index.php!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
После подключения sub.php, содержимого этого файла доступно в index.php.&lt;br /&gt;
==Полезные константы==&lt;br /&gt;
* __DIR__ — полный путь к директории, в которой находится текущий сценарий&lt;br /&gt;
* __FILE__ — полный путь к текущему сценарию&lt;br /&gt;
* $_COOKIE — ассоциативный массив, содержащий куки&lt;br /&gt;
* $_SESSION — ассоциативный массив, содержащий информацию о сессии&lt;br /&gt;
* $_POST — ассоциативный массив, содержащий данные, полученные после POST запроса&lt;br /&gt;
* $_GET — ассоциативный массив, содержащий данные, полученные после GET запроса&lt;br /&gt;
=Примеры=&lt;br /&gt;
1. Пусть есть сайт с формой:&lt;br /&gt;
Клиент:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;feedback&amp;quot; method=&amp;quot;POST&amp;quot; action=&amp;quot;form.php&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваше имя: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваш email: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Сообщение: &amp;lt;textarea name=&amp;quot;message&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;send&amp;quot; value=&amp;quot;Отправить&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При получении формы сервером, данные из неё можно получить следующим образом:&lt;br /&gt;
Сервер:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (isset($_POST)) {&lt;br /&gt;
    print(&amp;quot;Имя: &amp;quot; . $_POST[&#039;name&#039;]);&lt;br /&gt;
    print(&amp;quot;&amp;lt;br&amp;gt;Email: &amp;quot; . $_POST[&#039;email&#039;]);&lt;br /&gt;
    print(&amp;quot;&amp;lt;br&amp;gt;Сообщение: &amp;quot; . $_POST[&#039;message&#039;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
2. Другой пример - отправка формы:&lt;br /&gt;
Клиент:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;file_upload&amp;quot; method=&amp;quot;POST&amp;quot; action=&amp;quot;form.php&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваш аватар: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;avatar&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;send&amp;quot; value=&amp;quot;Отправить файл&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Работать с файлом ожно следующим образом:&lt;br /&gt;
Сервер:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (isset($_FILES[&#039;avatar&#039;])) {&lt;br /&gt;
    $file = $_FILES[&#039;avatar&#039;];&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Загружен файл с именем &amp;quot; . $file[&#039;name&#039;] . &amp;quot; и размером &amp;quot; . $file[&#039;size&#039;] . &amp;quot; байт&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Если не переместить файл в постаянную папку - файл будет удален:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$current_path = $_FILES[&#039;avatar&#039;][&#039;tmp_name&#039;];&lt;br /&gt;
$filename = $_FILES[&#039;avatar&#039;][&#039;name&#039;];&lt;br /&gt;
$new_path = dirname(__FILE__) . &#039;/&#039; . $filename;&lt;br /&gt;
&lt;br /&gt;
move_uploaded_file($current_path, $new_path);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=SQL=&lt;br /&gt;
Так же можно работать с базами данных. mysqli_connect - функция для подключения к mysql-серверу, mysqli_query - отправка sql-запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$link = mysqli_connect(&amp;quot;localhost&amp;quot;, &amp;quot;root&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$sql = &#039;INSERT INTO cities SET name = &amp;quot;Санкт-Петербург&amp;quot;&#039;;&lt;br /&gt;
$result = mysqli_query($link, $sql);&lt;br /&gt;
&lt;br /&gt;
if ($result == false) {&lt;br /&gt;
    print(&amp;quot;Произошла ошибка при выполнении запроса&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=web shell=&lt;br /&gt;
&lt;br /&gt;
Простейшим примером является загрузка файла с расширением .php на сайт, работающий на PHP (в качестве проверки можно попробовать обратиться по адресу &#039;&#039;&#039;cite.com/index.php&#039;&#039;&#039; и не получить ошибки). По умолчанию PHP-сайты работают так что пользователь обращается по URL к файлу (URL сайта, начиная с первого /, отображаются на определенную директорию на сервере, она называется &#039;&#039;&#039;web root&#039;&#039;&#039;) и, если этот файл имеет расширение php (или другое расширение из предопределенного списка расширений для PHP-файлов), то содержимое этого файла выполняется как код на PHP, вывод этого кода возвращается пользователю в ответе (кстати, так работает не только PHP, но и ASP.NET Web Forms, JSP, ASP). В результате, если пользователь может загрузить на сайт файл c расширением .php и обратиться к нему по URL (т. е. этот файл будет создан где-то внутри &#039;&#039;&#039;web root&#039;&#039;&#039;), то, если сервер специально не настроен чтобы файлы из директории для загрузок не выполнялись, PHP-код в нём будет выполнен. Соответственно, загрузив на уязвимый сайт файл &amp;lt;code&amp;gt;shell.php&amp;lt;/code&amp;gt; с кодом &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
42 * 66613;&lt;br /&gt;
&amp;lt;?php system(&#039;ls -lsa&#039;); ?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и, получив ссылку на него (к примеру, /uploads/5c8e82bb8ad66/attack.php), обратится по ней, то в результате этот PHP-код выполнится и в ответе сервера будет &lt;br /&gt;
произведение чисел 42 и 66613, а также список всех файлов в длинном формате (функция PHP system работает так же как одноимённая функция библиотеки Си - то есть выполняет команду shell). В итоге атакующий получает выполнение произвольного кода на сервере (RCE).&lt;br /&gt;
&lt;br /&gt;
=Обход методов защиты и атака=&lt;br /&gt;
&lt;br /&gt;
==Валидация имени файла==&lt;br /&gt;
&lt;br /&gt;
===Черный список ресширений===&lt;br /&gt;
Обходится с помощью использования двойных расширений (&amp;lt;code&amp;gt;shell.php.png&amp;lt;/code&amp;gt;) или  малоизвестный расширений (&amp;lt;code&amp;gt;.php5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.phtml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.shtml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt;). Кроме того, возможна инъекция нулевого байта (&amp;lt;code&amp;gt;shell.php%00.jpg&amp;lt;/code&amp;gt;) или регистрозависимость при проверке (&amp;lt;code&amp;gt;PHp3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.aSp&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
===Белый список расширений===&lt;br /&gt;
Спасает от использования атакующим малоизвестных и регистрозависимых расширений, но все ещё обходится с помощью двойных расширений или инъекции нулевого байта. &lt;br /&gt;
&lt;br /&gt;
===Санитайзеры===&lt;br /&gt;
Оставляет большую степень свободы. Например, если санитайзер удаляет вхождения подстрок типа &amp;lt;code&amp;gt;.php&amp;lt;/code&amp;gt;, то использования имени файла вида &amp;lt;code&amp;gt;shell.p&#039;&#039;&#039;.php&#039;&#039;&#039;hp&amp;lt;/code&amp;gt; позволяет после загрузки получить файл с именем &amp;lt;code&amp;gt;shell.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Валидация Content-Type==&lt;br /&gt;
Обходится изменением заголовка Content-Type, например, с помощью перехватывающего прокси (burp suite). Соответсвенно, в запросе &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST / HTTP/1.1&lt;br /&gt;
Host: easy.fu.khashaev.ru&lt;br /&gt;
Content-Length: 200&lt;br /&gt;
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary&lt;br /&gt;
------WebKitFormBoundary&lt;br /&gt;
Content-Disposition: form-data; name=&amp;quot;file&amp;quot;; filename=&amp;quot;info.php&amp;quot;&lt;br /&gt;
Content-Type: text/php&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
------WebKitFormBoundary--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
строчка &amp;lt;code&amp;gt;Content-Type: text/php&amp;lt;/code&amp;gt; может быть заменена на строчку &amp;lt;code&amp;gt;Content-Type: image/png&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==Прочее==&lt;br /&gt;
&#039;&#039;&#039;.htaccess&#039;&#039;&#039; - конфигурационный файл веб-сервера Apache, позволяющий управлять работой веб-сервера и настройками сайта с помощью различных параметров (директив) без изменения основного конфигурационного файла веб-сервера.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Server Side Includes&#039;&#039;&#039; - язык для динамической «сборки» веб-страниц на сервере из отдельных составных частей и выдачи клиенту полученного HTML-документа. Имеет расширения .shtml, .stm или .shtm. Например, при загрузке и вызове &#039;&#039;&#039;file.shtml&#039;&#039;&#039;, содержащего код &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;!-- #exec cmd=&amp;quot;ls&amp;quot; --&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
атакующему будет выведен список файлов данной директории. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Static HTML&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
При возможности загрузить на сервис статический HTML, создается HTML-страница, содержащая  вредоносный код (например, крадущего cookie), и ссылка на этот файл отправляется жертве. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Path Traversal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Атака, основанная на использовании специфически составленных имен файлов (например, &amp;lt;code&amp;gt;../config.ini&amp;lt;/code&amp;gt;), позволяющих выйти за пределы директории хранения файлов. Может привести к переписыванию исходных фалов веб-приложения, конфигурационных или системных файлов. &lt;br /&gt;
Атака возможна, если не используется функция &amp;lt;code&amp;gt;basename&amp;lt;/code&amp;gt; (возвращает последний компонент имени из указанного пути) или её аналог. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Filename XSS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Сервис уязвим к XSS, если допускается имя файла вида &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Полиглоты==&lt;br /&gt;
Полиглотами называют файлы, которые могут быть корректно распознаны как файлы разных типов. &lt;br /&gt;
Можно встраивать &lt;br /&gt;
* JavaScript в JPEG, GIF, PNG, PDF&lt;br /&gt;
* HTML в что-нибудь &lt;br /&gt;
* PHP в [https://rdot.org/forum/showthread.php?t=2780 JPEG ], [https://github.com/fakhrizulkifli/Defeating-PHP-GD-imagecreatefromgif GIF], [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/ PNG]&lt;br /&gt;
&lt;br /&gt;
===Структура JPEG===&lt;br /&gt;
Все jpeg-файлы имеют схожую структуру. Рассмотрим в качестве примера изображение&lt;br /&gt;
&lt;br /&gt;
[[Файл:Mini.jpg|128px]]&lt;br /&gt;
 &lt;br /&gt;
В hex-редакторе оно выглядит следующим образом &lt;br /&gt;
&lt;br /&gt;
[[Файл:Hex_print.png]]&lt;br /&gt;
&lt;br /&gt;
В структуре jpeg-файлов содержатся служебные маркеры, состоящие из двух байт и всегда начинающиеся с FF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FF D8&#039;&#039;&#039; - маркер начала jpeg-файла;&lt;br /&gt;
* &#039;&#039;&#039;FF DA&#039;&#039;&#039; - маркер начала секции Start of Scan:&lt;br /&gt;
** в двух байтах хранится длинна заголовка изображения [00 0C];&lt;br /&gt;
** заголовок изображения [03 01 00 02 11 03 11 00 3F 00];&lt;br /&gt;
** непосредственно информацию о самом изображении;&lt;br /&gt;
* &#039;&#039;&#039;FF D9&#039;&#039;&#039; - маркер конца jpeg-файла.&lt;br /&gt;
&lt;br /&gt;
=Image Magic=&lt;br /&gt;
&#039;&#039;&#039;ImageMagick&#039;&#039;&#039; — набор программ для чтения и редактирования файлов множества графических форматов, свободное и кроссплатформенное ПО. Может использоваться с языками Perl, C, C++, Python, Ruby, PHP, Node.js, Pascal, Java, Delphi, в скриптах командной оболочки или самостоятельно.&lt;br /&gt;
ImageMagick обладает широким набором возможностей (конвертация, маскирование, увеличение контрастности и т.п.) и поддерживает работу с различными типами файлов, но так же в нем находили различные уязвимости:&lt;br /&gt;
* RCE [CVE-2016-3714]&lt;br /&gt;
* SSRF [CVE-2016-3718]&lt;br /&gt;
* File deletion [CVE-2016-3715]&lt;br /&gt;
* File moving [CVE-2016-3716]&lt;br /&gt;
* Local File Read [CVE-2016-3717]&lt;br /&gt;
CVE - Common Vulnerabilities and Exposures - база данных общеизвестных уязвимостей информационной безопасности.&lt;br /&gt;
&lt;br /&gt;
Был создан сайт [https://imagetragick.com/ ImageTragick], посвященный описанию некоторых уязвимостей ImageMagic. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Пример.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Допустим, что есть некоторый онлайн-сервис, позволяющих переводить файлы в разные форматы, использующий библиотеку ImageMagic. &lt;br /&gt;
Тогда, создав файл exploit.mvg с содержанием&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
push graphic-context&lt;br /&gt;
viewbox 0 0 640 480&lt;br /&gt;
fill &#039;url(https://example.com/&lt;br /&gt;
image.jpg &amp;quot; ; | ls  &amp;quot;-la)&#039;&lt;br /&gt;
pop graphic-context&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и выполнив запрос на преобразование файла, аналогичный команде &lt;br /&gt;
&amp;lt;pre&amp;gt;$ convert exploit.mvg out.png&amp;lt;/pre&amp;gt;&lt;br /&gt;
атакующий получит список всех файлов директории.&lt;br /&gt;
&lt;br /&gt;
=Задания=&lt;br /&gt;
* http://easy.stands.cyberschool.msu.ru/&lt;br /&gt;
* http://type.stands.cyberschool.msu.ru/&lt;br /&gt;
* http://hand.stands.cyberschool.msu.ru&lt;br /&gt;
&lt;br /&gt;
=Ссылки=&lt;br /&gt;
* [https://drive.google.com/file/d/1Jep20CuBfcfKAeStwnHgR0gCf-O2Wgd0/view?usp=sharing Презинтация]&lt;br /&gt;
* [https://www.php.net/ https://www.php.net/] - сайт PHP&lt;br /&gt;
* [https://htmlacademy.ru/tutorial/php https://htmlacademy.ru/tutorial/php] - учебник PHP&lt;br /&gt;
* [http://www.php.su/php/?php http://www.php.su/php/?php] - ещё один учебник&lt;br /&gt;
* [https://www.alchemistowl.org/pocorgtfo/pocorgtfo15.pdf Полиглоты]&lt;br /&gt;
* [https://drive.google.com/file/d/1Rz0RP5tKIWCmFDP3-_--VYu40ejWf48v/view?usp=sharing Валидация структурных типов]&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2021)&amp;diff=598</id>
		<title>Практикум на ЭВМ (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2021)&amp;diff=598"/>
		<updated>2021-10-07T07:42:06Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Веб */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по четвергам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 609&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом &amp;quot;Безопасность компьютерных систем&amp;quot;, который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара - т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2021/2022 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
&lt;br /&gt;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько &amp;quot;флагов&amp;quot;, выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний (&amp;quot;_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса main_&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в принимающую систему. В ней нужно заранее зарегистрироваться (ник в формате &#039;&#039;Фамилия Имя&#039;&#039;) и дождаться активации, без этого сдавать флаги не получится Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова - возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2021)/Бонусное_задание|Бонусное задание]]&lt;br /&gt;
* http://club.tasks.prak.seclab.cs.msu.ru/ (deadline - 12.10.2021 15:53)&lt;br /&gt;
* http://corporate.tasks.prak.seclab.cs.msu.ru/ (deadline - 20.10.2021 20:13)&lt;br /&gt;
* http://bank.tasks.prak.seclab.cs.msu.ru (deadline - 20.10.2021 20:13)&lt;br /&gt;
* http://pwnitter.tasks.prak.seclab.cs.msu.ru/ (deadline - 20.10.2021 20:13)&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (9 сентября 2021) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (16 сентября 2021) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (23 сентября 2021) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (30 сентября 2021) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (7 октября 2021) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9A%D1%83%D1%80%D1%81%D1%8B_2021&amp;diff=586</id>
		<title>Курсы 2021</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9A%D1%83%D1%80%D1%81%D1%8B_2021&amp;diff=586"/>
		<updated>2021-09-08T11:46:21Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* &amp;gt; Практикум */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Практикум_на_ЭВМ_(2021)|&amp;gt; Практикум]] ==&lt;br /&gt;
&lt;br /&gt;
== [[Дополнительные_главы_практической_безопасности_(2021)|&amp;gt; Дополнительные главы практической безопасности]] ==&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2021)&amp;diff=585</id>
		<title>Практикум на ЭВМ (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2021)&amp;diff=585"/>
		<updated>2021-09-08T11:46:06Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Задания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по четвергам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом &amp;quot;Безопасность компьютерных систем&amp;quot;, который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара - т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2021/2022 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
&lt;br /&gt;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько &amp;quot;флагов&amp;quot;, выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний (&amp;quot;_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса main__&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в принимающую систему. В ней нужно заранее зарегистрироваться (ник в формате &#039;&#039;Фамилия Имя&#039;&#039;) и дождаться активации, без этого сдавать флаги не получится Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова - возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (9 сентября 2021) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2021)&amp;diff=584</id>
		<title>Практикум на ЭВМ (2021)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2021)&amp;diff=584"/>
		<updated>2021-09-08T11:45:40Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: Новая страница: «__NOTOC__ &amp;#039;&amp;#039;&amp;#039;Практикум на ЭВМ&amp;#039;&amp;#039;&amp;#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуаль…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по четвергам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом &amp;quot;Безопасность компьютерных систем&amp;quot;, который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара - т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2021/2022 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#039;&#039;&#039;.&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;
&lt;br /&gt;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько &amp;quot;флагов&amp;quot;, выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний (&amp;quot;_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса main__&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [https://dashboard.prak.seclab.cs.msu.ru/ принимающую систему]. В ней нужно заранее зарегистрироваться (ник в формате &#039;&#039;Фамилия Имя&#039;&#039;) и дождаться активации, без этого сдавать флаги не получится Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова - возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (9 сентября 2021) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2020)&amp;diff=468</id>
		<title>Практикум на ЭВМ (2020)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2020)&amp;diff=468"/>
		<updated>2021-04-07T11:01:46Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Криптография и криптоанализ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по четвергам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом &amp;quot;Безопасность компьютерных систем&amp;quot;, который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара - т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2020/2021 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#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;
Большая часть заданий будет выполнена в формате 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;
&lt;br /&gt;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько &amp;quot;флагов&amp;quot;, выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний (&amp;quot;_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса main__&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [https://dashboard.prak.seclab.cs.msu.ru/ принимающую систему]. В ней нужно заранее зарегистрироваться (ник в формате &#039;&#039;Фамилия Имя&#039;&#039;) и дождаться активации, без этого сдавать флаги не получится Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова - возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;[[Практикум_на_ЭВМ_(2020)/Бонусное_задание|Бонусное задание]]&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;http://club.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 01.12.2020 1:53)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://jpg.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 01.12.2020 1:53)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://hard.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 01.12.2020 1:53)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://bank.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 10.12.2020 1:53)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://corporate.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 10.12.2020 1:53)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://pwnitter.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 10.12.2020 1:53)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://seeker.shanton.ru:8081&amp;lt;/s&amp;gt;, дамп контейнера - https://yadi.sk/d/BV0UynXuOJmnBg (deadline - 23.12.2020 1:53)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://shop.tasks.prak.seclab.cs.msu.ru&amp;lt;/s&amp;gt; (deadline - 23.12.2020 1:53)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://tiny.dong.solutions:28080&amp;lt;/s&amp;gt; (нужно использовать droog@tiny.dong.solutions) (deadline - 23.12.2020 1:53)&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;[https://drive.google.com/file/d/1ENAVVDKlKIGgELZh6sCaP1wJ4SiOAYwz/view?usp=sharing task 5]&amp;lt;/s&amp;gt; nc tasks.prak.seclab.cs.msu.ru 16965 (deadline 21.12.2020 0:00)&lt;br /&gt;
* &amp;lt;s&amp;gt;[https://drive.google.com/file/d/1ZImdhu0o6KHdCoz6O8n2CD2FWa2Wk0js/view?usp=sharing task 6]&amp;lt;/s&amp;gt; nc tasks.prak.seclab.cs.msu.ru 16966 (deadline 21.12.2020 0:00)&lt;br /&gt;
* &amp;lt;s&amp;gt;[https://drive.google.com/file/d/1R55Q3Czxd4Wu_hVP1lAK2vSkJcxmh9wg/view?usp=sharing task 7]&amp;lt;/s&amp;gt; nc tasks.prak.seclab.cs.msu.ru 16967 (deadline 21.12.2020 0:00)&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
* RSA: &amp;lt;s&amp;gt;[https://khashaev.ru/secsem/rsa/#broadcast broadcast]&amp;lt;/s&amp;gt;, &amp;lt;s&amp;gt;[https://khashaev.ru/secsem/rsa/#common-sense common-sense]&amp;lt;/s&amp;gt; (deadline - 29.03.2021 1:53)&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2020)/Задание_на_блочные_шифры|Задание на блочные шифры]] (deadline - 16.04.2021 1:53)&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2020)/Задание_на_padding_oracle|Задание на padding oracle]] (deadline - 21.04.2021 14:00)&lt;br /&gt;
&lt;br /&gt;
=== Сетевая безопасность ===&lt;br /&gt;
&lt;br /&gt;
=== Мобильные приложения ===&lt;br /&gt;
&lt;br /&gt;
Обход проверки root-доступа [[Root_check_bypass]]&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (17 сентября 2020) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (24 сентября 2020) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (1 октября 2020) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (8 октября 2020) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (15 октября 2020) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (22 октября 2020) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (29 октября 2020) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
Семинар 8 (5 ноября 2020) [[Бинарные_уязвимости/Инструменты_поиска_бинарных_уязвимостей]]&lt;br /&gt;
&lt;br /&gt;
Семинар 9 (12 ноября 2020) [[Бинарные_уязвимости/Stack_overflow]]&lt;br /&gt;
&lt;br /&gt;
Семинар 10 (19 ноября 2020) [[Бинарные_уязвимости/Off-by-one]]&lt;br /&gt;
&lt;br /&gt;
Семинар 11 (26 ноября 2020) [[Бинарные_уязвимости/House-of-force]]&lt;br /&gt;
&lt;br /&gt;
Семинар 12 (3 декабря 2020) [[Бинарные_уязвимости/cve-2019-5782]]&lt;br /&gt;
&lt;br /&gt;
=== Уязвимости мобильных приложений ===&lt;br /&gt;
&lt;br /&gt;
Семинар 14 (10 декабря 2020) [[Уязвимости_мобильных_приложений/1]]&lt;br /&gt;
&lt;br /&gt;
Семинар 15 (17 декабря 2020) [[Уязвимости_мобильных_приложений/2]]&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
Семинар 1 (15 февраля 2021) [[Введение в практическую безопасность (2019)/Асимметричная криптография на примере RSA]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (1 марта 2021) [[Криптография/Блочные шифры. Атаки на блочные шифры]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (15 марта 2021) [[Криптография/Атака Padding oracle на RSA]]&lt;br /&gt;
&lt;br /&gt;
=== Сетевая безопасность ===&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2020)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_padding_oracle&amp;diff=467</id>
		<title>Практикум на ЭВМ (2020)/Задание на padding oracle</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2020)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_padding_oracle&amp;diff=467"/>
		<updated>2021-04-07T11:01:39Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: Новая страница: «Есть сервис для заказа товаров. Вы хотите расшифровать чужой заказ. Получить чужой заказ…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Есть сервис для заказа товаров. Вы хотите расшифровать чужой заказ. Получить чужой заказ в зашифрованном виде:&lt;br /&gt;
&lt;br /&gt;
http://bleichenbacher.tasks.prak.seclab.cs.msu.ru:8082/api/order/rival/&lt;br /&gt;
&lt;br /&gt;
Вы также можете сделать заказ. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
получить публичный ключ:&lt;br /&gt;
&lt;br /&gt;
http://bleichenbacher.tasks.prak.seclab.cs.msu.ru:8082/api/pubkey/&lt;br /&gt;
&lt;br /&gt;
сделать заказ - отправить следующий post-запрос:&lt;br /&gt;
&lt;br /&gt;
url: http://bleichenbacher.tasks.prak.seclab.cs.msu.ru:8082/api/order/place/,&lt;br /&gt;
&lt;br /&gt;
data: {“order”: &amp;lt;ваш_заказ_в_зашифрованном_виде&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
headers: {&#039;content-type&#039;: &#039;application/json&#039;}&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_Padding_oracle_%D0%BD%D0%B0_RSA&amp;diff=466</id>
		<title>Криптография/Атака Padding oracle на RSA</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_Padding_oracle_%D0%BD%D0%B0_RSA&amp;diff=466"/>
		<updated>2021-04-02T14:00:01Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* PKCS#1 v1.5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Мультипликативное свойство RSA==&lt;br /&gt;
Пусть E(M) - функция шифрования, N - модуль, X mod Y - остаток от деления X на Y. Тогда:&lt;br /&gt;
&amp;lt;pre&amp;gt; E(M1)E(M2) mod N = E(M1M2 mod N)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Данной свойство очевидно выводится из определения функции шифрования E(M).&lt;br /&gt;
&lt;br /&gt;
==Pairing Oracle==&lt;br /&gt;
Разберем следующи пример: пусть есть сервис по заказу яиц. Но он позваляет заказывать только четное количество яиц. Заказы принимаются в зашифрованном RSA виде. Нужно, имея подслушанный зашифрованный текст C, получить его дешифрованный текст M.&lt;br /&gt;
&lt;br /&gt;
Атака выглядит следующим образом: пусть M &amp;lt; N. Можно послать сервису заказ на &amp;lt;code&amp;gt;2M mod N&amp;lt;/code&amp;gt; яиц (для этого нужно послать &amp;lt;code&amp;gt;(C*2^e) mod N)&amp;lt;/code&amp;gt;. Тогда есть два варинта:&lt;br /&gt;
# &amp;lt;code&amp;gt;M &amp;gt; N/2&amp;lt;/code&amp;gt;, тогда &amp;lt;code&amp;gt;2M mod N = 2M - N&amp;lt;/code&amp;gt; - нечетное число, сервис не принимает заказ&lt;br /&gt;
# &amp;lt;code&amp;gt;M &amp;lt;= N/2&amp;lt;/code&amp;gt;, тогда &amp;lt;code&amp;gt;2M mod N = 2M&amp;lt;/code&amp;gt; - четное число, сервис принимает заказ&lt;br /&gt;
Аналогичные суждения можно сделать, домножая C на 2^ie mod N (где i - натуральное число) и, используя метод двоичного поиска, выяснить, чему же равно M.&lt;br /&gt;
&lt;br /&gt;
==PKCS==&lt;br /&gt;
Согласно этому стандарту, паддинг текста, длина которого недостаточна для шифрования происходит следующим образом:&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#B22222&amp;quot;&amp;gt;0002&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d0f95f9836b07907669f2527&lt;br /&gt;
eda22e1f80e6e2e4dac062326f5716fca45&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;4c65616b696e672070617269747920616c6c6f777320666f7&lt;br /&gt;
22064656372797074696e6720612077686f6c652052534120656e63727970746564206d6573736167650a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#B22222&amp;quot;&amp;gt;0002&amp;lt;/span&amp;gt; - первые два байта определяют тип падинга&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d&lt;br /&gt;
0f95f9836b07907669f2527eda22e1f80e6e2e4dac062326f5716fca45&amp;lt;/span&amp;gt; - ненулевые случайные байты&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt; - сепаратор, после которого идёт собственно сам текст&lt;br /&gt;
&lt;br /&gt;
==Атака Блехенбахера== &lt;br /&gt;
[https://disk.yandex.ru/i/-_ohdI9lqwgqyg| Ссылка на описание атаки]&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
* [https://youtu.be/J8j2LHiKS0I Видео лекции]&lt;br /&gt;
* [https://docs.google.com/presentation/d/19sGLccnP5IcVm3l3ie3UJZ_nMTxu62SMCFHCd_M2fFc/edit?usp=sharing Презинтация лекции]&lt;br /&gt;
* [http://archiv.infsec.ethz.ch/education/fs08/secsem/bleichenbacher98.pdf Оригинал статьи по атаке Блехенбахера]&lt;br /&gt;
* [http://secgroup.dais.unive.it/wp-content/uploads/2012/11/Practical-Padding-Oracle-Attacks-on-RSA.html Ещё одна статья про padding oracle]&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_Padding_oracle_%D0%BD%D0%B0_RSA&amp;diff=465</id>
		<title>Криптография/Атака Padding oracle на RSA</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_Padding_oracle_%D0%BD%D0%B0_RSA&amp;diff=465"/>
		<updated>2021-04-02T13:59:26Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Pairing Oracle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Мультипликативное свойство RSA==&lt;br /&gt;
Пусть E(M) - функция шифрования, N - модуль, X mod Y - остаток от деления X на Y. Тогда:&lt;br /&gt;
&amp;lt;pre&amp;gt; E(M1)E(M2) mod N = E(M1M2 mod N)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Данной свойство очевидно выводится из определения функции шифрования E(M).&lt;br /&gt;
&lt;br /&gt;
==Pairing Oracle==&lt;br /&gt;
Разберем следующи пример: пусть есть сервис по заказу яиц. Но он позваляет заказывать только четное количество яиц. Заказы принимаются в зашифрованном RSA виде. Нужно, имея подслушанный зашифрованный текст C, получить его дешифрованный текст M.&lt;br /&gt;
&lt;br /&gt;
Атака выглядит следующим образом: пусть M &amp;lt; N. Можно послать сервису заказ на &amp;lt;code&amp;gt;2M mod N&amp;lt;/code&amp;gt; яиц (для этого нужно послать &amp;lt;code&amp;gt;(C*2^e) mod N)&amp;lt;/code&amp;gt;. Тогда есть два варинта:&lt;br /&gt;
# &amp;lt;code&amp;gt;M &amp;gt; N/2&amp;lt;/code&amp;gt;, тогда &amp;lt;code&amp;gt;2M mod N = 2M - N&amp;lt;/code&amp;gt; - нечетное число, сервис не принимает заказ&lt;br /&gt;
# &amp;lt;code&amp;gt;M &amp;lt;= N/2&amp;lt;/code&amp;gt;, тогда &amp;lt;code&amp;gt;2M mod N = 2M&amp;lt;/code&amp;gt; - четное число, сервис принимает заказ&lt;br /&gt;
Аналогичные суждения можно сделать, домножая C на 2^ie mod N (где i - натуральное число) и, используя метод двоичного поиска, выяснить, чему же равно M.&lt;br /&gt;
&lt;br /&gt;
==PKCS#1 v1.5==&lt;br /&gt;
Согласно этому стандарту, паддинг текста, длина которого недостаточна для шифрования происходит следующим образом:&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#B22222&amp;quot;&amp;gt;0002&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d0f95f9836b07907669f2527&lt;br /&gt;
eda22e1f80e6e2e4dac062326f5716fca45&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;4c65616b696e672070617269747920616c6c6f777320666f7&lt;br /&gt;
22064656372797074696e6720612077686f6c652052534120656e63727970746564206d6573736167650a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#B22222&amp;quot;&amp;gt;0002&amp;lt;/span&amp;gt; - первые два байта определяют тип падинга&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d&lt;br /&gt;
0f95f9836b07907669f2527eda22e1f80e6e2e4dac062326f5716fca45&amp;lt;/span&amp;gt; - ненулевые случайные байты&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt; - сепаратор, после которого идёт собственно сам текст&lt;br /&gt;
&lt;br /&gt;
==Атака Блехенбахера== &lt;br /&gt;
[https://disk.yandex.ru/i/-_ohdI9lqwgqyg| Ссылка на описание атаки]&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
* [https://youtu.be/J8j2LHiKS0I Видео лекции]&lt;br /&gt;
* [https://docs.google.com/presentation/d/19sGLccnP5IcVm3l3ie3UJZ_nMTxu62SMCFHCd_M2fFc/edit?usp=sharing Презинтация лекции]&lt;br /&gt;
* [http://archiv.infsec.ethz.ch/education/fs08/secsem/bleichenbacher98.pdf Оригинал статьи по атаке Блехенбахера]&lt;br /&gt;
* [http://secgroup.dais.unive.it/wp-content/uploads/2012/11/Practical-Padding-Oracle-Attacks-on-RSA.html Ещё одна статья про padding oracle]&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2020)&amp;diff=462</id>
		<title>Практикум на ЭВМ (2020)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2020)&amp;diff=462"/>
		<updated>2021-03-31T20:27:56Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Криптография и криптоанализ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по четвергам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом &amp;quot;Безопасность компьютерных систем&amp;quot;, который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара - т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2020/2021 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#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;
Большая часть заданий будет выполнена в формате 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;
&lt;br /&gt;
Задания выполнены в формате task-based CTF: в каждом задании есть один или несколько &amp;quot;флагов&amp;quot;, выполняющих роль ценных данных, которые требуется найти и украсть атакующему, для выполнения задания необходимо получить флаг и сдать его в принимающую систему. За каждый сданный флаг начисляются очки. Флаг представляет из себя строку, которая может состоять из цифр и букв английского алфавита, а также нижних подчеркиваний (&amp;quot;_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Флаги, входящие в обязательную часть, будут начинаться с префикса main__&lt;br /&gt;
&lt;br /&gt;
Флаги нужно сдавать в [https://dashboard.prak.seclab.cs.msu.ru/ принимающую систему]. В ней нужно заранее зарегистрироваться (ник в формате &#039;&#039;Фамилия Имя&#039;&#039;) и дождаться активации, без этого сдавать флаги не получится Флаги время от времени меняются, если вы получили флаг, но он не сдается, попробуйте вытащить его еще раз и сдать снова - возможно, он поменялся как раз в тот момент. Флаг за одно и то же задание засчитывается для того же сдающего только один раз (даже после изменения).&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;[[Практикум_на_ЭВМ_(2020)/Бонусное_задание|Бонусное задание]]&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;http://club.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 01.12.2020 1:53)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://jpg.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 01.12.2020 1:53)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://hard.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 01.12.2020 1:53)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://bank.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 10.12.2020 1:53)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://corporate.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 10.12.2020 1:53)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://pwnitter.tasks.prak.seclab.cs.msu.ru/&amp;lt;/s&amp;gt; (deadline - 10.12.2020 1:53)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://seeker.shanton.ru:8081&amp;lt;/s&amp;gt;, дамп контейнера - https://yadi.sk/d/BV0UynXuOJmnBg (deadline - 23.12.2020 1:53)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://shop.tasks.prak.seclab.cs.msu.ru&amp;lt;/s&amp;gt; (deadline - 23.12.2020 1:53)&lt;br /&gt;
* &amp;lt;s&amp;gt;http://tiny.dong.solutions:28080&amp;lt;/s&amp;gt; (нужно использовать droog@tiny.dong.solutions) (deadline - 23.12.2020 1:53)&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;[https://drive.google.com/file/d/1ENAVVDKlKIGgELZh6sCaP1wJ4SiOAYwz/view?usp=sharing task 5]&amp;lt;/s&amp;gt; nc tasks.prak.seclab.cs.msu.ru 16965 (deadline 21.12.2020 0:00)&lt;br /&gt;
* &amp;lt;s&amp;gt;[https://drive.google.com/file/d/1ZImdhu0o6KHdCoz6O8n2CD2FWa2Wk0js/view?usp=sharing task 6]&amp;lt;/s&amp;gt; nc tasks.prak.seclab.cs.msu.ru 16966 (deadline 21.12.2020 0:00)&lt;br /&gt;
* &amp;lt;s&amp;gt;[https://drive.google.com/file/d/1R55Q3Czxd4Wu_hVP1lAK2vSkJcxmh9wg/view?usp=sharing task 7]&amp;lt;/s&amp;gt; nc tasks.prak.seclab.cs.msu.ru 16967 (deadline 21.12.2020 0:00)&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
&lt;br /&gt;
* RSA: [https://khashaev.ru/secsem/rsa/#broadcast broadcast], [https://khashaev.ru/secsem/rsa/#common-sense common-sense] (deadline - 29.03.2021 1:53)&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2020)/Задание_на_блочные_шифры|Задание на блочные шифры]] (deadline - 07.04.2021 1:53)&lt;br /&gt;
&lt;br /&gt;
=== Сетевая безопасность ===&lt;br /&gt;
&lt;br /&gt;
=== Мобильные приложения ===&lt;br /&gt;
&lt;br /&gt;
Обход проверки root-доступа [[Root_check_bypass]]&lt;br /&gt;
&lt;br /&gt;
== Материалы ==&lt;br /&gt;
&lt;br /&gt;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (17 сентября 2020) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (24 сентября 2020) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (1 октября 2020) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (8 октября 2020) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (15 октября 2020) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (22 октября 2020) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (29 октября 2020) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
=== Реверс-инжиниринг и бинарная эксплуатация ===&lt;br /&gt;
&lt;br /&gt;
Семинар 8 (5 ноября 2020) [[Бинарные_уязвимости/Инструменты_поиска_бинарных_уязвимостей]]&lt;br /&gt;
&lt;br /&gt;
Семинар 9 (12 ноября 2020) [[Бинарные_уязвимости/Stack_overflow]]&lt;br /&gt;
&lt;br /&gt;
Семинар 10 (19 ноября 2020) [[Бинарные_уязвимости/Off-by-one]]&lt;br /&gt;
&lt;br /&gt;
Семинар 11 (26 ноября 2020) [[Бинарные_уязвимости/House-of-force]]&lt;br /&gt;
&lt;br /&gt;
Семинар 12 (3 декабря 2020) [[Бинарные_уязвимости/cve-2019-5782]]&lt;br /&gt;
&lt;br /&gt;
=== Уязвимости мобильных приложений ===&lt;br /&gt;
&lt;br /&gt;
Семинар 14 (10 декабря 2020) [[Уязвимости_мобильных_приложений/1]]&lt;br /&gt;
&lt;br /&gt;
Семинар 15 (17 декабря 2020) [[Уязвимости_мобильных_приложений/2]]&lt;br /&gt;
&lt;br /&gt;
=== Криптография и криптоанализ ===&lt;br /&gt;
Семинар 1 (15 февраля 2021) [[Введение в практическую безопасность (2019)/Асимметричная криптография на примере RSA]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (1 марта 2021) [[Криптография/Блочные шифры. Атаки на блочные шифры]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (15 марта 2021) [[Криптография/Атака Padding oracle на RSA]]&lt;br /&gt;
&lt;br /&gt;
=== Сетевая безопасность ===&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_Padding_oracle_%D0%BD%D0%B0_RSA&amp;diff=461</id>
		<title>Криптография/Атака Padding oracle на RSA</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_Padding_oracle_%D0%BD%D0%B0_RSA&amp;diff=461"/>
		<updated>2021-03-31T20:27:22Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: Новая страница: «==Мультипликативное свойство RSA== Пусть E(M) - функция шифрования, N - модуль, X mod Y - остаток от…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Мультипликативное свойство RSA==&lt;br /&gt;
Пусть E(M) - функция шифрования, N - модуль, X mod Y - остаток от деления X на Y. Тогда:&lt;br /&gt;
&amp;lt;pre&amp;gt; E(M1)E(M2) mod N = E(M1M2 mod N)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Данной свойство очевидно выводится из определения функции шифрования E(M).&lt;br /&gt;
&lt;br /&gt;
==Pairing Oracle==&lt;br /&gt;
Разберем следующи пример: пусть есть сервис по заказу яиц. Но он позваляет заказывать только четное количество яиц. Заказы принимаются в зашифрованном RSA виде. Нужно, имея подлушанный зашифрованный текст C, получить его дешифрованный текст M.&lt;br /&gt;
&lt;br /&gt;
Атака выглядит следующим образом: пусть M &amp;lt; N. Можно послать сервису заказ на &amp;lt;code&amp;gt;2M mod N&amp;lt;/code&amp;gt; яиц (для этого нужно послать &amp;lt;code&amp;gt;(C*2^e) mod N)&amp;lt;/code&amp;gt;. Тогда есть два варинта:&lt;br /&gt;
# &amp;lt;code&amp;gt;M &amp;gt; N/2&amp;lt;/code&amp;gt;, тогда &amp;lt;code&amp;gt;2M mod N = 2M - N&amp;lt;/code&amp;gt; - нечетное число, сервис не принимает заказ&lt;br /&gt;
# &amp;lt;code&amp;gt;M &amp;lt;= N/2&amp;lt;/code&amp;gt;, тогда &amp;lt;code&amp;gt;2M mod N = 2M&amp;lt;/code&amp;gt; - четное число, сервис принимает заказ&lt;br /&gt;
Аналогичные суждения можно сделать, домножая C на 2^ie mod N (где i - натуральное число) и, используя метод двоичного поиска, выяснить, чему же равно M.&lt;br /&gt;
&lt;br /&gt;
==PKCS#1 v1.5==&lt;br /&gt;
Согласно этому стандарту, паддинг текста, длина которого недостаточна для шифрования происходит следующим образом:&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#B22222&amp;quot;&amp;gt;0002&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d0f95f9836b07907669f2527&lt;br /&gt;
eda22e1f80e6e2e4dac062326f5716fca45&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;4c65616b696e672070617269747920616c6c6f777320666f7&lt;br /&gt;
22064656372797074696e6720612077686f6c652052534120656e63727970746564206d6573736167650a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#B22222&amp;quot;&amp;gt;0002&amp;lt;/span&amp;gt; - первые два байта определяют тип падинга&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d&lt;br /&gt;
0f95f9836b07907669f2527eda22e1f80e6e2e4dac062326f5716fca45&amp;lt;/span&amp;gt; - ненулевые случайные байты&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt; - сепаратор, после которого идёт собственно сам текст&lt;br /&gt;
&lt;br /&gt;
==Атака Блехенбахера== &lt;br /&gt;
[https://disk.yandex.ru/i/-_ohdI9lqwgqyg| Ссылка на описание атаки]&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
* [https://youtu.be/J8j2LHiKS0I Видео лекции]&lt;br /&gt;
* [https://docs.google.com/presentation/d/19sGLccnP5IcVm3l3ie3UJZ_nMTxu62SMCFHCd_M2fFc/edit?usp=sharing Презинтация лекции]&lt;br /&gt;
* [http://archiv.infsec.ethz.ch/education/fs08/secsem/bleichenbacher98.pdf Оригинал статьи по атаке Блехенбахера]&lt;br /&gt;
* [http://secgroup.dais.unive.it/wp-content/uploads/2012/11/Practical-Padding-Oracle-Attacks-on-RSA.html Ещё одна статья про padding oracle]&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2020)&amp;diff=346</id>
		<title>Практикум на ЭВМ (2020)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2020)&amp;diff=346"/>
		<updated>2020-11-09T14:47:55Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Веб */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по четвергам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом &amp;quot;Безопасность компьютерных систем&amp;quot;, который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара - т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2020/2021 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#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;
Большая часть заданий будет выполнена в формате 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;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2020)/Бонусное_задание|Бонусное задание]]&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;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (17 сентября 2020) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (24 сентября 2020) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (1 октября 2020) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (8 октября 2020) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (15 октября 2020) [[Веб-безопасность/Уязвимости_FileUpload]]&lt;br /&gt;
&lt;br /&gt;
Семинар 6 (22 октября 2020) [[Веб-безопасность/Атаки_SSRF]]&lt;br /&gt;
&lt;br /&gt;
Семинар 7 (29 октября 2020) [[Веб-безопасность/Уязвимости_XXE]]&lt;br /&gt;
&lt;br /&gt;
Семинар 8 (5 ноября 2020) [[Бинарные_уязвимости/Инструменты_поиска_бинарных_уязвимостей]]&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;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B5_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%B1%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D1%85_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B5%D0%B9&amp;diff=345</id>
		<title>Бинарные уязвимости/Инструменты поиска бинарных уязвимостей</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B5_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%B1%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D1%85_%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B5%D0%B9&amp;diff=345"/>
		<updated>2020-11-09T14:47:49Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: Новая страница: «== strings ==  Выводит константные строки, которые есть в бинарнике. Строки определяются эврис…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== strings ==&lt;br /&gt;
&lt;br /&gt;
Выводит константные строки, которые есть в бинарнике. Строки определяются эвристикой, поэтому часто бывают ложные срабатывания. IDA тоже умеет определять строки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ strings reverse_example_1&lt;br /&gt;
/lib64/ld-linux-x86-64.so.2&lt;br /&gt;
libcrypto.so.1.0.0&lt;br /&gt;
_ITM_deregisterTMCloneTable&lt;br /&gt;
/lib64/ld-linux-x86-64.so.2&lt;br /&gt;
libcrypto.so.1.0.0&lt;br /&gt;
_ITM_deregisterTMCloneTable&lt;br /&gt;
__gmon_start__&lt;br /&gt;
_Jv_RegisterClasses&lt;br /&gt;
_ITM_registerTMCloneTable&lt;br /&gt;
MD5_Final&lt;br /&gt;
MD5_Init&lt;br /&gt;
MD5_Update&lt;br /&gt;
libc.so.6&lt;br /&gt;
fopen&lt;br /&gt;
__stack_chk_fail&lt;br /&gt;
fgets&lt;br /&gt;
malloc&lt;br /&gt;
stderr&lt;br /&gt;
fwrite&lt;br /&gt;
__sprintf_chk&lt;br /&gt;
__libc_start_main&lt;br /&gt;
free&lt;br /&gt;
GLIBC_2.3.4&lt;br /&gt;
GLIBC_2.4&lt;br /&gt;
GLIBC_2.2.5&lt;br /&gt;
OPENSSL_1.0.0&lt;br /&gt;
D$(1&lt;br /&gt;
T$(dH3&lt;br /&gt;
AUATH&lt;br /&gt;
D$h1&lt;br /&gt;
|$hdH3&amp;lt;%(&lt;br /&gt;
x[]A\A]&lt;br /&gt;
AWAVA&lt;br /&gt;
AUATL&lt;br /&gt;
[]A\A]A^A_&lt;br /&gt;
%02X&lt;br /&gt;
./cd-key.txt&lt;br /&gt;
failed to open CD key file&lt;br /&gt;
failed to read CD key file&lt;br /&gt;
invalid cdkey&lt;br /&gt;
Good job!&lt;br /&gt;
;*3$&amp;quot;&lt;br /&gt;
.shstrtab&lt;br /&gt;
.interp&lt;br /&gt;
.note.ABI-tag&lt;br /&gt;
.gnu.hash&lt;br /&gt;
.dynsym&lt;br /&gt;
.dynstr&lt;br /&gt;
.gnu.version&lt;br /&gt;
.gnu.version_r&lt;br /&gt;
.rela.dyn&lt;br /&gt;
.rela.plt&lt;br /&gt;
.init&lt;br /&gt;
.plt.got&lt;br /&gt;
.text&lt;br /&gt;
.fini&lt;br /&gt;
.rodata&lt;br /&gt;
.eh_frame_hdr&lt;br /&gt;
.eh_frame&lt;br /&gt;
.init_array&lt;br /&gt;
.fini_array&lt;br /&gt;
.jcr&lt;br /&gt;
.dynamic&lt;br /&gt;
.got.plt&lt;br /&gt;
.data&lt;br /&gt;
.bss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== strace ==&lt;br /&gt;
&lt;br /&gt;
Выводит трассу системных вызовов. Полезно, чтобы определить, какие файлы читает программа, и как вообще взаимодействует с внешним миром (в том числе сеть).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ strace ./reverse_example_1&lt;br /&gt;
...&lt;br /&gt;
openat(AT_FDCWD, &amp;quot;./cd-key.txt&amp;quot;, O_RDONLY) = 3&lt;br /&gt;
fstat(3, {st_mode=S_IFREG|0644, st_size=24, ...}) = 0&lt;br /&gt;
read(3, &amp;quot;AAAAA-BBBBB-CCCCC-DDDDD\n&amp;quot;, 4096) = 24&lt;br /&gt;
write(2, &amp;quot;invalid cdkey\n&amp;quot;, 14)         = 14&lt;br /&gt;
exit_group(1)                           = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IDA Pro ==&lt;br /&gt;
&lt;br /&gt;
Интерактивный дизассемблер и декомпилятор.&lt;br /&gt;
&lt;br /&gt;
=== Шорткаты ===&lt;br /&gt;
&amp;lt;center style=&amp;quot;font-size: 500%&amp;quot;&amp;gt;&lt;br /&gt;
{{клавиша|F5}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
==== IDA ====&lt;br /&gt;
* {{клавиша|P}} — создать функцию, начиная с текущей позиции курсора&lt;br /&gt;
* {{клавиша|F5}} — декомпилировать функцию&lt;br /&gt;
* {{клавиша|Enter}} — проследовать по курсору (например, перейти к функции или массиву)&lt;br /&gt;
* {{клавиша|Esc}} — назад (противоположность {{клавиша|Enter}})&lt;br /&gt;
* {{клавиша|X}} — показать ссылки на то, что под курсором (на функцию, переменную, строку, etc.)&lt;br /&gt;
* {{клавиша|C}} — переопределить байты, начиная с курсора, как код.&lt;br /&gt;
* {{клавиша|D}} — переопределить байты, начиная с курсора, как данные (последовательные нажатия переключают размер переменной byte-word-dword(-qword))&lt;br /&gt;
* {{клавиша|A}} — переопределить байты, начиная с курсора, как строку&lt;br /&gt;
* {{клавиша|R}} — переопределить число в инструкции как строку (&amp;lt;code&amp;gt;mov rdx, 335F47414C465Fh&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;mov rdx, &#039;3_GALF_&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
Неплохой [https://radare.gitbooks.io/radare2book/content/debugger/migration.html#shortcuts список] из доков по radare2.&lt;br /&gt;
&lt;br /&gt;
==== Hex-Rays ====&lt;br /&gt;
* {{клавиша|N}} — переименовать&lt;br /&gt;
* {{клавиша|Y}} — поменять тип&lt;br /&gt;
** Может показаться, что с помощью {{клавиша|Y}} можно и переименовать, или с помощью {{клавиша|N}} задать тип, однако это не так&lt;br /&gt;
* {{клавиша|Enter}} — проследовать по курсору&lt;br /&gt;
* {{клавиша|Esc}} — назад &lt;br /&gt;
* {{клавиша|Tab}} — перейти к данному месту из декомпилированного в дизассемблированный код и обратно&lt;br /&gt;
&lt;br /&gt;
[https://www.hex-rays.com/products/decompiler/manual/interactive.shtml Полный список] на официальном сайте.&lt;br /&gt;
&lt;br /&gt;
== gdb ==&lt;br /&gt;
&lt;br /&gt;
С &#039;&#039;&#039;gdb&#039;&#039;&#039; можно познакомиться по любому туториалу в интернете.&lt;br /&gt;
&lt;br /&gt;
Однако в отладке приложений без исходников есть некоторая специфика, и тут могут быть особенно полезные такие команды:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;b * 0x400155&amp;lt;/code&amp;gt; - поставить брэйкпоинт на адрес.&lt;br /&gt;
* &amp;lt;code&amp;gt;p (char*)$rdi&amp;lt;/code&amp;gt; - напечатать как строку содержимое памяти, на которую указывает регистр &amp;lt;code&amp;gt;rdi&amp;lt;/code&amp;gt;. См. также [https://en.wikipedia.org/wiki/X86_calling_conventions#System_V_AMD64_ABI статью про соглашения вызовов на Википедии].&lt;br /&gt;
* &amp;lt;code&amp;gt;help x&amp;lt;/code&amp;gt; - почитать справку по команде &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, которая очень полезна для изучения содержимого памяти.&lt;br /&gt;
* &amp;lt;code&amp;gt;x/10i $pc&amp;lt;/code&amp;gt; - посмотреть несколько инструкций вперед.&lt;br /&gt;
* &amp;lt;code&amp;gt;layout asm&amp;lt;/code&amp;gt; - переключиться в псевдографический режим с листингом ассемблерных команд.&lt;br /&gt;
&lt;br /&gt;
== Примеры с занятия ==&lt;br /&gt;
&lt;br /&gt;
Бинарники, которые были рассмотрены на семинаре: [[Media:2020_reverse_examples.zip]].&lt;br /&gt;
&lt;br /&gt;
Исходник первого примера: [[Media:2019 reverse example 1.c]]&lt;br /&gt;
&lt;br /&gt;
Пример валидного ключа: &amp;lt;code&amp;gt;AAAAA-BBBBB-CCCCC-B334C&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Алгоритм проверки ключа на Python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import string&lt;br /&gt;
import hashlib&lt;br /&gt;
&lt;br /&gt;
def validate_key(s):&lt;br /&gt;
    if len(s) != 23:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for i, c in enumerate(s):&lt;br /&gt;
        if i in (5, 11, 17):&lt;br /&gt;
            if c != &#039;-&#039;:&lt;br /&gt;
                return False&lt;br /&gt;
        else:&lt;br /&gt;
            if c not in (string.ascii_uppercase + string.digits):&lt;br /&gt;
                return False&lt;br /&gt;
&lt;br /&gt;
    m = hashlib.md5()&lt;br /&gt;
    m.update(s[:17].encode(&#039;ascii&#039;))&lt;br /&gt;
    m.update(bytes([0x4d,0x67,0xde,0xb9,0x60,0xce,0x38,0x30,0xe1,0xb7,0x40,0xe5,0xeb,0x39,0xe0,0x15]))&lt;br /&gt;
&lt;br /&gt;
    return s[18:] == m.hexdigest()[:5].upper()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:2020_reverse_examples.zip&amp;diff=344</id>
		<title>Файл:2020 reverse examples.zip</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:2020_reverse_examples.zip&amp;diff=344"/>
		<updated>2020-11-09T14:45:30Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_FileUpload&amp;diff=315</id>
		<title>Веб-безопасность/Уязвимости FileUpload</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_FileUpload&amp;diff=315"/>
		<updated>2020-10-15T18:43:44Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Задания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Введение=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Загрузка файлов пользователями&#039;&#039;&#039; - довольно частая часть функциональности веб-приложения (аватарки, хостинг файлов, посылка вложений вместе с сообщениями и т. д.). Небезопасная реализация этого механизма может приводить к очень серьезным уязвимостям.&lt;br /&gt;
Загрузка файлов необходима многим сервисам, таким как файлообменники, социальные сети, онлайн-конверторы и редакторы. &lt;br /&gt;
&lt;br /&gt;
Самый простой способ реализации механизма загрузки файлов - просто создавать на файловой системе сервера файл с таким же содержимым как файл, отправленный пользователем (проще говоря, &amp;quot;класть&amp;quot; присланный пользователем файл куда-то на файловую систему сервера). После загрузки файл либо доступен пользователю по прямой ссылке (т. е. определенные URL-адреса отображаются на загруженные файлы и существует URL, обращение к которому ведет к отдаче загруженного файла), либо как то еще обрабатывается веб-приложением. Само веб-приложение во многом состоит из файлов на диске, поэтому добавление файлов на сервер может быть небезопасным, так как (в общем случае) может изменить логику работы приложения. &lt;br /&gt;
Соответственно, могут появляться следующие уязвимости: &lt;br /&gt;
* Remote Code Execution&lt;br /&gt;
* перезапись или удаление файлов&lt;br /&gt;
* Local File Read, SSRF&lt;br /&gt;
* Denial of Service&lt;br /&gt;
* Information Disclosure&lt;br /&gt;
* XSS&lt;br /&gt;
=PHP=&lt;br /&gt;
PHP (PHP: Hypertext Preprocessor) — скриптовый язык общего назначения, интенсивно применяемый для разработки веб-приложений.&lt;br /&gt;
==Привет, мир!==&lt;br /&gt;
Простейшая программа, выводящая надпись &amp;quot;Привет, мир!&amp;quot;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php print(&amp;quot;Привет, мир!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Каждый скрипт должен начинаться с &amp;lt;code&amp;gt; &amp;lt;?php &amp;lt;/code&amp;gt; и желательно (но не всегда обязательно) на &amp;lt;code&amp;gt; ?&amp;gt; &amp;lt;/code&amp;gt;. Пример кода, где &amp;lt;code&amp;gt; ?&amp;gt; &amp;lt;/code&amp;gt; обязателен:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&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;Наша первая php страница&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&amp;lt;?php print(&amp;quot;Привет, мир&amp;quot;); ?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Переменные==&lt;br /&gt;
В синтаксисе PHP имя переменной записывается латинскими символами, но первым символом всегда должен быть знак доллара $, после чего идёт имя. Не допускается начинать имя переменной с цифры, а также использовать любые значения, кроме букв алфавита и знака подчеркивания.&lt;br /&gt;
&lt;br /&gt;
Правильные переменные:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$age&lt;br /&gt;
$favorite_color&lt;br /&gt;
$name2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Неправильные переменные:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
age&lt;br /&gt;
$42&lt;br /&gt;
$my-age&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Переменные бывают нескольких типов:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$favorite_color = &amp;quot;green&amp;quot;; // строка&lt;br /&gt;
$favorite_number = 42; // целое число&lt;br /&gt;
$favorite_float_number = 0.5; // число с плавающей точкой&lt;br /&gt;
$favorite_bool = true; // boolean&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Числа можно складывать, вычитать, делить, умножать опреаторы стандартные, как и во всех языках: +, -, *, /, % - плюсь, минус, умножить, делить (деление не целочисленное), остаток от деления.&lt;br /&gt;
==Конкатенация==&lt;br /&gt;
Конкатенация - &amp;quot;cклейка&amp;quot; нескольких строчек в одну.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$united_string = &amp;quot;Мой любимый цвет - &amp;quot; . $favorite_color . &amp;quot;, а любимое число - &amp;quot; . $favorite_number;&lt;br /&gt;
print($united_string);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В коде выше $favorite_number - число. Поэтому данная переменная приводится к типу данных &amp;quot;строка&amp;quot;, после чего уже происходит конкатенация.&lt;br /&gt;
==Ввод данных==&lt;br /&gt;
Данная функциональность редко используется, но нам это нужно было для решения задач на лекии. readline - функция ввода данных:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$line = readline();&lt;br /&gt;
print($line);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Массивы==&lt;br /&gt;
Массив — структура данных, хранящая набор значений (элементов массива), идентифицируемых по индексу.&lt;br /&gt;
&lt;br /&gt;
В обычных массивах в PHP индекс значение - целое число. Нумеруются массивы с 0:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$fav_shows = [&amp;quot;game of thrones&amp;quot;, &amp;quot;american horror story&amp;quot;, &amp;quot;walking dead&amp;quot;];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В ассоциативных массивах в качестве индекса может использоваться не только число. Например, строка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$user = [&#039;age&#039; =&amp;gt; 42, &#039;name&#039; =&amp;gt; &#039;Иннокентий&#039;, &#039;fav_shows&#039; =&amp;gt; [&amp;quot;game of thrones&amp;quot;, &amp;quot;american horror story&amp;quot;, &amp;quot;walking dead&amp;quot;] ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Условный оператор==&lt;br /&gt;
Синтаксис: if (условие):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
if ($gender == &amp;quot;мужчина&amp;quot;) {&lt;br /&gt;
    print(&amp;quot;Приветствую тебя, мой Господин!&amp;quot;);&lt;br /&gt;
} else if ($gender == &amp;quot;женщина&amp;quot;) {&lt;br /&gt;
    print(&amp;quot;Приветствую тебя, о Госпожа!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;Не хватает гендеров.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* оператор присваивания: =&lt;br /&gt;
* операторы сравнения: ==, ===, !=, !==, &amp;gt;, &amp;lt;, &amp;lt;=, &amp;gt;=&lt;br /&gt;
* and, or - логические и и или соответственно&lt;br /&gt;
==Циклы==&lt;br /&gt;
Синтаксис while: while (условие_остановки):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$i = 0;&lt;br /&gt;
while ($i &amp;lt; 10) {&lt;br /&gt;
    print($i);&lt;br /&gt;
    $i = $i + 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Синтаксис for: for (команда,_выполняемая_до_цикла; условие_осатновки; команда,_выполняемая_в_ конце_каждой_операции):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
for ($x = 0; $x &amp;lt; 10; ++$x) {&lt;br /&gt;
    print($x);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Для асоциативных массивах есть цикл foreach:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$user = [&lt;br /&gt;
    &#039;Имя&#039; =&amp;gt; &#039;Евгений&#039;,&lt;br /&gt;
    &#039;Возраст&#039; =&amp;gt; &#039;27&#039;,&lt;br /&gt;
    &#039;Род занятий&#039; =&amp;gt; &#039;Программист&#039;&lt;br /&gt;
];&lt;br /&gt;
foreach ($user as $key =&amp;gt; $value) {&lt;br /&gt;
    print($key . &#039;: &#039;);&lt;br /&gt;
    print($value . &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Функции==&lt;br /&gt;
Синтаксис: имя_функции(аргументы_функции):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
function is_even($number) {&lt;br /&gt;
    if ($number % 2 != 0) {&lt;br /&gt;
        return false;&lt;br /&gt;
    } else {&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
if (is_even(3)) {&lt;br /&gt;
    print(&amp;quot;3 - четное число&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;3 - нечетное число&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Подключение файлов==&lt;br /&gt;
Чтобы не писать всё в одном файле, используется команда require.&lt;br /&gt;
Содержимое файла sub.php:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
print(&amp;quot;Привет, я содержимое из sub.php!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Содержимое файла index.php:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require &#039;sub.php&#039;;&lt;br /&gt;
print(&amp;quot;А я - index.php!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
После подключения sub.php, содержимого этого файла доступно в index.php.&lt;br /&gt;
==Полезные константы==&lt;br /&gt;
* __DIR__ — полный путь к директории, в которой находится текущий сценарий&lt;br /&gt;
* __FILE__ — полный путь к текущему сценарию&lt;br /&gt;
* $_COOKIE — ассоциативный массив, содержащий куки&lt;br /&gt;
* $_SESSION — ассоциативный массив, содержащий информацию о сессии&lt;br /&gt;
* $_POST — ассоциативный массив, содержащий данные, полученные после POST запроса&lt;br /&gt;
* $_GET — ассоциативный массив, содержащий данные, полученные после GET запроса&lt;br /&gt;
=Примеры=&lt;br /&gt;
1. Пусть есть сайт с формой:&lt;br /&gt;
Клиент:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;feedback&amp;quot; method=&amp;quot;POST&amp;quot; action=&amp;quot;form.php&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваше имя: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваш email: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Сообщение: &amp;lt;textarea name=&amp;quot;message&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;send&amp;quot; value=&amp;quot;Отправить&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При получении формы сервером, данные из неё можно получить следующим образом:&lt;br /&gt;
Сервер:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (isset($_POST)) {&lt;br /&gt;
    print(&amp;quot;Имя: &amp;quot; . $_POST[&#039;name&#039;]);&lt;br /&gt;
    print(&amp;quot;&amp;lt;br&amp;gt;Email: &amp;quot; . $_POST[&#039;email&#039;]);&lt;br /&gt;
    print(&amp;quot;&amp;lt;br&amp;gt;Сообщение: &amp;quot; . $_POST[&#039;message&#039;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
2. Другой пример - отправка формы:&lt;br /&gt;
Клиент:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;file_upload&amp;quot; method=&amp;quot;POST&amp;quot; action=&amp;quot;form.php&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваш аватар: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;avatar&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;send&amp;quot; value=&amp;quot;Отправить файл&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Работать с файлом ожно следующим образом:&lt;br /&gt;
Сервер:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (isset($_FILES[&#039;avatar&#039;])) {&lt;br /&gt;
    $file = $_FILES[&#039;avatar&#039;];&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Загружен файл с именем &amp;quot; . $file[&#039;name&#039;] . &amp;quot; и размером &amp;quot; . $file[&#039;size&#039;] . &amp;quot; байт&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Если не переместить файл в постаянную папку - файл будет удален:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$current_path = $_FILES[&#039;avatar&#039;][&#039;tmp_name&#039;];&lt;br /&gt;
$filename = $_FILES[&#039;avatar&#039;][&#039;name&#039;];&lt;br /&gt;
$new_path = dirname(__FILE__) . &#039;/&#039; . $filename;&lt;br /&gt;
&lt;br /&gt;
move_uploaded_file($current_path, $new_path);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=SQL=&lt;br /&gt;
Так же можно работать с базами данных. mysqli_connect - функция для подключения к mysql-серверу, mysqli_query - отправка sql-запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$link = mysqli_connect(&amp;quot;localhost&amp;quot;, &amp;quot;root&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$sql = &#039;INSERT INTO cities SET name = &amp;quot;Санкт-Петербург&amp;quot;&#039;;&lt;br /&gt;
$result = mysqli_query($link, $sql);&lt;br /&gt;
&lt;br /&gt;
if ($result == false) {&lt;br /&gt;
    print(&amp;quot;Произошла ошибка при выполнении запроса&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=web shell=&lt;br /&gt;
&lt;br /&gt;
Простейшим примером является загрузка файла с расширением .php на сайт, работающий на PHP (в качестве проверки можно попробовать обратиться по адресу &#039;&#039;&#039;cite.com/index.php&#039;&#039;&#039; и не получить ошибки). По умолчанию PHP-сайты работают так что пользователь обращается по URL к файлу (URL сайта, начиная с первого /, отображаются на определенную директорию на сервере, она называется &#039;&#039;&#039;web root&#039;&#039;&#039;) и, если этот файл имеет расширение php (или другое расширение из предопределенного списка расширений для PHP-файлов), то содержимое этого файла выполняется как код на PHP, вывод этого кода возвращается пользователю в ответе (кстати, так работает не только PHP, но и ASP.NET Web Forms, JSP, ASP). В результате, если пользователь может загрузить на сайт файл c расширением .php и обратиться к нему по URL (т. е. этот файл будет создан где-то внутри &#039;&#039;&#039;web root&#039;&#039;&#039;), то, если сервер специально не настроен чтобы файлы из директории для загрузок не выполнялись, PHP-код в нём будет выполнен. Соответственно, загрузив на уязвимый сайт файл &amp;lt;code&amp;gt;shell.php&amp;lt;/code&amp;gt; с кодом &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
42 * 66613;&lt;br /&gt;
&amp;lt;?php system(&#039;ls -lsa&#039;); ?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и, получив ссылку на него (к примеру, /uploads/5c8e82bb8ad66/attack.php), обратится по ней, то в результате этот PHP-код выполнится и в ответе сервера будет &lt;br /&gt;
произведение чисел 42 и 66613, а также список всех файлов в длинном формате (функция PHP system работает так же как одноимённая функция библиотеки Си - то есть выполняет команду shell). В итоге атакующий получает выполнение произвольного кода на сервере (RCE).&lt;br /&gt;
&lt;br /&gt;
=Обход методов защиты и атака=&lt;br /&gt;
&lt;br /&gt;
==Валидация имени файла==&lt;br /&gt;
&lt;br /&gt;
===Черный список ресширений===&lt;br /&gt;
Обходится с помощью использования двойных расширений (&amp;lt;code&amp;gt;shell.php.png&amp;lt;/code&amp;gt;) или  малоизвестный расширений (&amp;lt;code&amp;gt;.php5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.phtml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.shtml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt;). Кроме того, возможна инъекция нулевого байта (&amp;lt;code&amp;gt;shell.php%00.jpg&amp;lt;/code&amp;gt;) или регистрозависимость при проверке (&amp;lt;code&amp;gt;PHp3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.aSp&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
===Белый список расширений===&lt;br /&gt;
Спасает от использования атакующим малоизвестных и регистрозависимых расширений, но все ещё обходится с помощью двойных расширений или инъекции нулевого байта. &lt;br /&gt;
&lt;br /&gt;
===Санитайзеры===&lt;br /&gt;
Оставляет большую степень свободы. Например, если санитайзер удаляет вхождения подстрок типа &amp;lt;code&amp;gt;.php&amp;lt;/code&amp;gt;, то использования имени файла вида &amp;lt;code&amp;gt;shell.p&#039;&#039;&#039;.php&#039;&#039;&#039;hp&amp;lt;/code&amp;gt; позволяет после загрузки получить файл с именем &amp;lt;code&amp;gt;shell.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Валидация Content-Type==&lt;br /&gt;
Обходится изменением заголовка Content-Type, например, с помощью перехватывающего прокси (burp suite). Соответсвенно, в запросе &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST / HTTP/1.1&lt;br /&gt;
Host: easy.fu.khashaev.ru&lt;br /&gt;
Content-Length: 200&lt;br /&gt;
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary&lt;br /&gt;
------WebKitFormBoundary&lt;br /&gt;
Content-Disposition: form-data; name=&amp;quot;file&amp;quot;; filename=&amp;quot;info.php&amp;quot;&lt;br /&gt;
Content-Type: text/php&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
------WebKitFormBoundary--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
строчка &amp;lt;code&amp;gt;Content-Type: text/php&amp;lt;/code&amp;gt; может быть заменена на строчку &amp;lt;code&amp;gt;Content-Type: image/png&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==Прочее==&lt;br /&gt;
&#039;&#039;&#039;Server Side Includes&#039;&#039;&#039; - язык для динамической «сборки» веб-страниц на сервере из отдельных составных частей и выдачи клиенту полученного HTML-документа. Имеет расширения .shtml, .stm или .shtm. Например, при загрузке и вызове &#039;&#039;&#039;file.shtml&#039;&#039;&#039;, содержащего код &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;!-- #exec cmd=&amp;quot;ls&amp;quot; --&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
атакующему будет выведен список файлов данной директории. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Static HTML&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
При возможности загрузить на сервис статический HTML, создается HTML-страница, содержащая  вредоносный код (например, крадущего cookie), и ссылка на этот файл отправляется жертве. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Path Traversal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Атака, основанная на использовании специфически составленных имен файлов (например, &amp;lt;code&amp;gt;../config.ini&amp;lt;/code&amp;gt;), позволяющих выйти за пределы директории хранения файлов. Может привести к переписыванию исходных фалов веб-приложения, конфигурационных или системных файлов. &lt;br /&gt;
Атака возможна, если не используется функция &amp;lt;code&amp;gt;basename&amp;lt;/code&amp;gt; (возвращает последний компонент имени из указанного пути) или её аналог. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Filename XSS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Сервис уязвим к XSS, если допускается имя файла вида &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Полиглоты==&lt;br /&gt;
Полиглотами называют файлы, которые могут быть корректно распознаны как файлы разных типов. &lt;br /&gt;
Можно встраивать &lt;br /&gt;
* JavaScript в JPEG, GIF, PNG, PDF&lt;br /&gt;
* HTML в что-нибудь &lt;br /&gt;
* PHP в [https://rdot.org/forum/showthread.php?t=2780 JPEG ], [https://github.com/fakhrizulkifli/Defeating-PHP-GD-imagecreatefromgif GIF], [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/ PNG]&lt;br /&gt;
&lt;br /&gt;
===Структура JPEG===&lt;br /&gt;
Все jpeg-файлы имеют схожую структуру. Рассмотрим в качестве примера изображение&lt;br /&gt;
&lt;br /&gt;
[[Файл:Mini.jpg|128px]]&lt;br /&gt;
 &lt;br /&gt;
В hex-редакторе оно выглядит следующим образом &lt;br /&gt;
&lt;br /&gt;
[[Файл:Hex_print.png]]&lt;br /&gt;
&lt;br /&gt;
В структуре jpeg-файлов содержатся служебные маркеры, состоящие из двух байт и всегда начинающиеся с FF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FF D8&#039;&#039;&#039; - маркер начала jpeg-файла;&lt;br /&gt;
* &#039;&#039;&#039;FF DA&#039;&#039;&#039; - маркер начала секции Start of Scan:&lt;br /&gt;
** в двух байтах хранится длинна заголовка изображения [00 0C];&lt;br /&gt;
** заголовок изображения [03 01 00 02 11 03 11 00 3F 00];&lt;br /&gt;
** непосредственно информацию о самом изображении;&lt;br /&gt;
* &#039;&#039;&#039;FF D9&#039;&#039;&#039; - маркер конца jpeg-файла.&lt;br /&gt;
&lt;br /&gt;
=Image Magic=&lt;br /&gt;
&#039;&#039;&#039;ImageMagick&#039;&#039;&#039; — набор программ для чтения и редактирования файлов множества графических форматов, свободное и кроссплатформенное ПО. Может использоваться с языками Perl, C, C++, Python, Ruby, PHP, Node.js, Pascal, Java, Delphi, в скриптах командной оболочки или самостоятельно.&lt;br /&gt;
ImageMagick обладает широким набором возможностей (конвертация, маскирование, увеличение контрастности и т.п.) и поддерживает работу с различными типами файлов, но так же в нем находили различные уязвимости:&lt;br /&gt;
* RCE [CVE-2016-3714]&lt;br /&gt;
* SSRF [CVE-2016-3718]&lt;br /&gt;
* File deletion [CVE-2016-3715]&lt;br /&gt;
* File moving [CVE-2016-3716]&lt;br /&gt;
* Local File Read [CVE-2016-3717]&lt;br /&gt;
CVE - Common Vulnerabilities and Exposures - база данных общеизвестных уязвимостей информационной безопасности.&lt;br /&gt;
&lt;br /&gt;
Был создан сайт [https://imagetragick.com/ ImageTragick], посвященный описанию некоторых уязвимостей ImageMagic. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Пример.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Допустим, что есть некоторый онлайн-сервис, позволяющих переводить файлы в разные форматы, использующий библиотеку ImageMagic. &lt;br /&gt;
Тогда, создав файл exploit.mvg с содержанием&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
push graphic-context&lt;br /&gt;
viewbox 0 0 640 480&lt;br /&gt;
fill &#039;url(https://example.com/&lt;br /&gt;
image.jpg &amp;quot; ; | ls  &amp;quot;-la)&#039;&lt;br /&gt;
pop graphic-context&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и выполнив запрос на преобразование файла, аналогичный команде &lt;br /&gt;
&amp;lt;pre&amp;gt;$ convert exploit.mvg out.png&amp;lt;/pre&amp;gt;&lt;br /&gt;
атакующий получит список всех файлов директории.&lt;br /&gt;
&lt;br /&gt;
=Задания=&lt;br /&gt;
* http://easy.stands.cyberschool.msu.ru/&lt;br /&gt;
* http://type.stands.cyberschool.msu.ru/&lt;br /&gt;
* http://hand.stands.cyberschool.msu.ru&lt;br /&gt;
&lt;br /&gt;
=Ссылки=&lt;br /&gt;
* [https://drive.google.com/file/d/1Jep20CuBfcfKAeStwnHgR0gCf-O2Wgd0/view?usp=sharing Презинтация]&lt;br /&gt;
* [https://www.php.net/ https://www.php.net/] - сайт PHP&lt;br /&gt;
* [https://htmlacademy.ru/tutorial/php https://htmlacademy.ru/tutorial/php] - учебник PHP&lt;br /&gt;
* [http://www.php.su/php/?php http://www.php.su/php/?php] - ещё один учебник&lt;br /&gt;
* [https://www.alchemistowl.org/pocorgtfo/pocorgtfo15.pdf Полиглоты]&lt;br /&gt;
* [https://drive.google.com/file/d/1Rz0RP5tKIWCmFDP3-_--VYu40ejWf48v/view?usp=sharing Валидация структурных типов]&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_FileUpload&amp;diff=314</id>
		<title>Веб-безопасность/Уязвимости FileUpload</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_FileUpload&amp;diff=314"/>
		<updated>2020-10-15T12:45:50Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Ссылки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Введение=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Загрузка файлов пользователями&#039;&#039;&#039; - довольно частая часть функциональности веб-приложения (аватарки, хостинг файлов, посылка вложений вместе с сообщениями и т. д.). Небезопасная реализация этого механизма может приводить к очень серьезным уязвимостям.&lt;br /&gt;
Загрузка файлов необходима многим сервисам, таким как файлообменники, социальные сети, онлайн-конверторы и редакторы. &lt;br /&gt;
&lt;br /&gt;
Самый простой способ реализации механизма загрузки файлов - просто создавать на файловой системе сервера файл с таким же содержимым как файл, отправленный пользователем (проще говоря, &amp;quot;класть&amp;quot; присланный пользователем файл куда-то на файловую систему сервера). После загрузки файл либо доступен пользователю по прямой ссылке (т. е. определенные URL-адреса отображаются на загруженные файлы и существует URL, обращение к которому ведет к отдаче загруженного файла), либо как то еще обрабатывается веб-приложением. Само веб-приложение во многом состоит из файлов на диске, поэтому добавление файлов на сервер может быть небезопасным, так как (в общем случае) может изменить логику работы приложения. &lt;br /&gt;
Соответственно, могут появляться следующие уязвимости: &lt;br /&gt;
* Remote Code Execution&lt;br /&gt;
* перезапись или удаление файлов&lt;br /&gt;
* Local File Read, SSRF&lt;br /&gt;
* Denial of Service&lt;br /&gt;
* Information Disclosure&lt;br /&gt;
* XSS&lt;br /&gt;
=PHP=&lt;br /&gt;
PHP (PHP: Hypertext Preprocessor) — скриптовый язык общего назначения, интенсивно применяемый для разработки веб-приложений.&lt;br /&gt;
==Привет, мир!==&lt;br /&gt;
Простейшая программа, выводящая надпись &amp;quot;Привет, мир!&amp;quot;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php print(&amp;quot;Привет, мир!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Каждый скрипт должен начинаться с &amp;lt;code&amp;gt; &amp;lt;?php &amp;lt;/code&amp;gt; и желательно (но не всегда обязательно) на &amp;lt;code&amp;gt; ?&amp;gt; &amp;lt;/code&amp;gt;. Пример кода, где &amp;lt;code&amp;gt; ?&amp;gt; &amp;lt;/code&amp;gt; обязателен:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&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;Наша первая php страница&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&amp;lt;?php print(&amp;quot;Привет, мир&amp;quot;); ?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Переменные==&lt;br /&gt;
В синтаксисе PHP имя переменной записывается латинскими символами, но первым символом всегда должен быть знак доллара $, после чего идёт имя. Не допускается начинать имя переменной с цифры, а также использовать любые значения, кроме букв алфавита и знака подчеркивания.&lt;br /&gt;
&lt;br /&gt;
Правильные переменные:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$age&lt;br /&gt;
$favorite_color&lt;br /&gt;
$name2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Неправильные переменные:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
age&lt;br /&gt;
$42&lt;br /&gt;
$my-age&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Переменные бывают нескольких типов:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$favorite_color = &amp;quot;green&amp;quot;; // строка&lt;br /&gt;
$favorite_number = 42; // целое число&lt;br /&gt;
$favorite_float_number = 0.5; // число с плавающей точкой&lt;br /&gt;
$favorite_bool = true; // boolean&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Числа можно складывать, вычитать, делить, умножать опреаторы стандартные, как и во всех языках: +, -, *, /, % - плюсь, минус, умножить, делить (деление не целочисленное), остаток от деления.&lt;br /&gt;
==Конкатенация==&lt;br /&gt;
Конкатенация - &amp;quot;cклейка&amp;quot; нескольких строчек в одну.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$united_string = &amp;quot;Мой любимый цвет - &amp;quot; . $favorite_color . &amp;quot;, а любимое число - &amp;quot; . $favorite_number;&lt;br /&gt;
print($united_string);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В коде выше $favorite_number - число. Поэтому данная переменная приводится к типу данных &amp;quot;строка&amp;quot;, после чего уже происходит конкатенация.&lt;br /&gt;
==Ввод данных==&lt;br /&gt;
Данная функциональность редко используется, но нам это нужно было для решения задач на лекии. readline - функция ввода данных:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$line = readline();&lt;br /&gt;
print($line);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Массивы==&lt;br /&gt;
Массив — структура данных, хранящая набор значений (элементов массива), идентифицируемых по индексу.&lt;br /&gt;
&lt;br /&gt;
В обычных массивах в PHP индекс значение - целое число. Нумеруются массивы с 0:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$fav_shows = [&amp;quot;game of thrones&amp;quot;, &amp;quot;american horror story&amp;quot;, &amp;quot;walking dead&amp;quot;];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В ассоциативных массивах в качестве индекса может использоваться не только число. Например, строка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$user = [&#039;age&#039; =&amp;gt; 42, &#039;name&#039; =&amp;gt; &#039;Иннокентий&#039;, &#039;fav_shows&#039; =&amp;gt; [&amp;quot;game of thrones&amp;quot;, &amp;quot;american horror story&amp;quot;, &amp;quot;walking dead&amp;quot;] ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Условный оператор==&lt;br /&gt;
Синтаксис: if (условие):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
if ($gender == &amp;quot;мужчина&amp;quot;) {&lt;br /&gt;
    print(&amp;quot;Приветствую тебя, мой Господин!&amp;quot;);&lt;br /&gt;
} else if ($gender == &amp;quot;женщина&amp;quot;) {&lt;br /&gt;
    print(&amp;quot;Приветствую тебя, о Госпожа!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;Не хватает гендеров.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* оператор присваивания: =&lt;br /&gt;
* операторы сравнения: ==, ===, !=, !==, &amp;gt;, &amp;lt;, &amp;lt;=, &amp;gt;=&lt;br /&gt;
* and, or - логические и и или соответственно&lt;br /&gt;
==Циклы==&lt;br /&gt;
Синтаксис while: while (условие_остановки):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$i = 0;&lt;br /&gt;
while ($i &amp;lt; 10) {&lt;br /&gt;
    print($i);&lt;br /&gt;
    $i = $i + 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Синтаксис for: for (команда,_выполняемая_до_цикла; условие_осатновки; команда,_выполняемая_в_ конце_каждой_операции):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
for ($x = 0; $x &amp;lt; 10; ++$x) {&lt;br /&gt;
    print($x);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Для асоциативных массивах есть цикл foreach:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$user = [&lt;br /&gt;
    &#039;Имя&#039; =&amp;gt; &#039;Евгений&#039;,&lt;br /&gt;
    &#039;Возраст&#039; =&amp;gt; &#039;27&#039;,&lt;br /&gt;
    &#039;Род занятий&#039; =&amp;gt; &#039;Программист&#039;&lt;br /&gt;
];&lt;br /&gt;
foreach ($user as $key =&amp;gt; $value) {&lt;br /&gt;
    print($key . &#039;: &#039;);&lt;br /&gt;
    print($value . &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Функции==&lt;br /&gt;
Синтаксис: имя_функции(аргументы_функции):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
function is_even($number) {&lt;br /&gt;
    if ($number % 2 != 0) {&lt;br /&gt;
        return false;&lt;br /&gt;
    } else {&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
if (is_even(3)) {&lt;br /&gt;
    print(&amp;quot;3 - четное число&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;3 - нечетное число&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Подключение файлов==&lt;br /&gt;
Чтобы не писать всё в одном файле, используется команда require.&lt;br /&gt;
Содержимое файла sub.php:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
print(&amp;quot;Привет, я содержимое из sub.php!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Содержимое файла index.php:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require &#039;sub.php&#039;;&lt;br /&gt;
print(&amp;quot;А я - index.php!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
После подключения sub.php, содержимого этого файла доступно в index.php.&lt;br /&gt;
==Полезные константы==&lt;br /&gt;
* __DIR__ — полный путь к директории, в которой находится текущий сценарий&lt;br /&gt;
* __FILE__ — полный путь к текущему сценарию&lt;br /&gt;
* $_COOKIE — ассоциативный массив, содержащий куки&lt;br /&gt;
* $_SESSION — ассоциативный массив, содержащий информацию о сессии&lt;br /&gt;
* $_POST — ассоциативный массив, содержащий данные, полученные после POST запроса&lt;br /&gt;
* $_GET — ассоциативный массив, содержащий данные, полученные после GET запроса&lt;br /&gt;
=Примеры=&lt;br /&gt;
1. Пусть есть сайт с формой:&lt;br /&gt;
Клиент:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;feedback&amp;quot; method=&amp;quot;POST&amp;quot; action=&amp;quot;form.php&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваше имя: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваш email: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Сообщение: &amp;lt;textarea name=&amp;quot;message&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;send&amp;quot; value=&amp;quot;Отправить&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При получении формы сервером, данные из неё можно получить следующим образом:&lt;br /&gt;
Сервер:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (isset($_POST)) {&lt;br /&gt;
    print(&amp;quot;Имя: &amp;quot; . $_POST[&#039;name&#039;]);&lt;br /&gt;
    print(&amp;quot;&amp;lt;br&amp;gt;Email: &amp;quot; . $_POST[&#039;email&#039;]);&lt;br /&gt;
    print(&amp;quot;&amp;lt;br&amp;gt;Сообщение: &amp;quot; . $_POST[&#039;message&#039;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
2. Другой пример - отправка формы:&lt;br /&gt;
Клиент:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;file_upload&amp;quot; method=&amp;quot;POST&amp;quot; action=&amp;quot;form.php&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваш аватар: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;avatar&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;send&amp;quot; value=&amp;quot;Отправить файл&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Работать с файлом ожно следующим образом:&lt;br /&gt;
Сервер:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (isset($_FILES[&#039;avatar&#039;])) {&lt;br /&gt;
    $file = $_FILES[&#039;avatar&#039;];&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Загружен файл с именем &amp;quot; . $file[&#039;name&#039;] . &amp;quot; и размером &amp;quot; . $file[&#039;size&#039;] . &amp;quot; байт&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Если не переместить файл в постаянную папку - файл будет удален:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$current_path = $_FILES[&#039;avatar&#039;][&#039;tmp_name&#039;];&lt;br /&gt;
$filename = $_FILES[&#039;avatar&#039;][&#039;name&#039;];&lt;br /&gt;
$new_path = dirname(__FILE__) . &#039;/&#039; . $filename;&lt;br /&gt;
&lt;br /&gt;
move_uploaded_file($current_path, $new_path);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=SQL=&lt;br /&gt;
Так же можно работать с базами данных. mysqli_connect - функция для подключения к mysql-серверу, mysqli_query - отправка sql-запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$link = mysqli_connect(&amp;quot;localhost&amp;quot;, &amp;quot;root&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$sql = &#039;INSERT INTO cities SET name = &amp;quot;Санкт-Петербург&amp;quot;&#039;;&lt;br /&gt;
$result = mysqli_query($link, $sql);&lt;br /&gt;
&lt;br /&gt;
if ($result == false) {&lt;br /&gt;
    print(&amp;quot;Произошла ошибка при выполнении запроса&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=web shell=&lt;br /&gt;
&lt;br /&gt;
Простейшим примером является загрузка файла с расширением .php на сайт, работающий на PHP (в качестве проверки можно попробовать обратиться по адресу &#039;&#039;&#039;cite.com/index.php&#039;&#039;&#039; и не получить ошибки). По умолчанию PHP-сайты работают так что пользователь обращается по URL к файлу (URL сайта, начиная с первого /, отображаются на определенную директорию на сервере, она называется &#039;&#039;&#039;web root&#039;&#039;&#039;) и, если этот файл имеет расширение php (или другое расширение из предопределенного списка расширений для PHP-файлов), то содержимое этого файла выполняется как код на PHP, вывод этого кода возвращается пользователю в ответе (кстати, так работает не только PHP, но и ASP.NET Web Forms, JSP, ASP). В результате, если пользователь может загрузить на сайт файл c расширением .php и обратиться к нему по URL (т. е. этот файл будет создан где-то внутри &#039;&#039;&#039;web root&#039;&#039;&#039;), то, если сервер специально не настроен чтобы файлы из директории для загрузок не выполнялись, PHP-код в нём будет выполнен. Соответственно, загрузив на уязвимый сайт файл &amp;lt;code&amp;gt;shell.php&amp;lt;/code&amp;gt; с кодом &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
42 * 66613;&lt;br /&gt;
&amp;lt;?php system(&#039;ls -lsa&#039;); ?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и, получив ссылку на него (к примеру, /uploads/5c8e82bb8ad66/attack.php), обратится по ней, то в результате этот PHP-код выполнится и в ответе сервера будет &lt;br /&gt;
произведение чисел 42 и 66613, а также список всех файлов в длинном формате (функция PHP system работает так же как одноимённая функция библиотеки Си - то есть выполняет команду shell). В итоге атакующий получает выполнение произвольного кода на сервере (RCE).&lt;br /&gt;
&lt;br /&gt;
=Обход методов защиты и атака=&lt;br /&gt;
&lt;br /&gt;
==Валидация имени файла==&lt;br /&gt;
&lt;br /&gt;
===Черный список ресширений===&lt;br /&gt;
Обходится с помощью использования двойных расширений (&amp;lt;code&amp;gt;shell.php.png&amp;lt;/code&amp;gt;) или  малоизвестный расширений (&amp;lt;code&amp;gt;.php5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.phtml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.shtml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt;). Кроме того, возможна инъекция нулевого байта (&amp;lt;code&amp;gt;shell.php%00.jpg&amp;lt;/code&amp;gt;) или регистрозависимость при проверке (&amp;lt;code&amp;gt;PHp3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.aSp&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
===Белый список расширений===&lt;br /&gt;
Спасает от использования атакующим малоизвестных и регистрозависимых расширений, но все ещё обходится с помощью двойных расширений или инъекции нулевого байта. &lt;br /&gt;
&lt;br /&gt;
===Санитайзеры===&lt;br /&gt;
Оставляет большую степень свободы. Например, если санитайзер удаляет вхождения подстрок типа &amp;lt;code&amp;gt;.php&amp;lt;/code&amp;gt;, то использования имени файла вида &amp;lt;code&amp;gt;shell.p&#039;&#039;&#039;.php&#039;&#039;&#039;hp&amp;lt;/code&amp;gt; позволяет после загрузки получить файл с именем &amp;lt;code&amp;gt;shell.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Валидация Content-Type==&lt;br /&gt;
Обходится изменением заголовка Content-Type, например, с помощью перехватывающего прокси (burp suite). Соответсвенно, в запросе &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST / HTTP/1.1&lt;br /&gt;
Host: easy.fu.khashaev.ru&lt;br /&gt;
Content-Length: 200&lt;br /&gt;
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary&lt;br /&gt;
------WebKitFormBoundary&lt;br /&gt;
Content-Disposition: form-data; name=&amp;quot;file&amp;quot;; filename=&amp;quot;info.php&amp;quot;&lt;br /&gt;
Content-Type: text/php&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
------WebKitFormBoundary--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
строчка &amp;lt;code&amp;gt;Content-Type: text/php&amp;lt;/code&amp;gt; может быть заменена на строчку &amp;lt;code&amp;gt;Content-Type: image/png&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==Прочее==&lt;br /&gt;
&#039;&#039;&#039;Server Side Includes&#039;&#039;&#039; - язык для динамической «сборки» веб-страниц на сервере из отдельных составных частей и выдачи клиенту полученного HTML-документа. Имеет расширения .shtml, .stm или .shtm. Например, при загрузке и вызове &#039;&#039;&#039;file.shtml&#039;&#039;&#039;, содержащего код &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;!-- #exec cmd=&amp;quot;ls&amp;quot; --&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
атакующему будет выведен список файлов данной директории. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Static HTML&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
При возможности загрузить на сервис статический HTML, создается HTML-страница, содержащая  вредоносный код (например, крадущего cookie), и ссылка на этот файл отправляется жертве. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Path Traversal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Атака, основанная на использовании специфически составленных имен файлов (например, &amp;lt;code&amp;gt;../config.ini&amp;lt;/code&amp;gt;), позволяющих выйти за пределы директории хранения файлов. Может привести к переписыванию исходных фалов веб-приложения, конфигурационных или системных файлов. &lt;br /&gt;
Атака возможна, если не используется функция &amp;lt;code&amp;gt;basename&amp;lt;/code&amp;gt; (возвращает последний компонент имени из указанного пути) или её аналог. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Filename XSS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Сервис уязвим к XSS, если допускается имя файла вида &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Полиглоты==&lt;br /&gt;
Полиглотами называют файлы, которые могут быть корректно распознаны как файлы разных типов. &lt;br /&gt;
Можно встраивать &lt;br /&gt;
* JavaScript в JPEG, GIF, PNG, PDF&lt;br /&gt;
* HTML в что-нибудь &lt;br /&gt;
* PHP в [https://rdot.org/forum/showthread.php?t=2780 JPEG ], [https://github.com/fakhrizulkifli/Defeating-PHP-GD-imagecreatefromgif GIF], [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/ PNG]&lt;br /&gt;
&lt;br /&gt;
===Структура JPEG===&lt;br /&gt;
Все jpeg-файлы имеют схожую структуру. Рассмотрим в качестве примера изображение&lt;br /&gt;
&lt;br /&gt;
[[Файл:Mini.jpg|128px]]&lt;br /&gt;
 &lt;br /&gt;
В hex-редакторе оно выглядит следующим образом &lt;br /&gt;
&lt;br /&gt;
[[Файл:Hex_print.png]]&lt;br /&gt;
&lt;br /&gt;
В структуре jpeg-файлов содержатся служебные маркеры, состоящие из двух байт и всегда начинающиеся с FF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FF D8&#039;&#039;&#039; - маркер начала jpeg-файла;&lt;br /&gt;
* &#039;&#039;&#039;FF DA&#039;&#039;&#039; - маркер начала секции Start of Scan:&lt;br /&gt;
** в двух байтах хранится длинна заголовка изображения [00 0C];&lt;br /&gt;
** заголовок изображения [03 01 00 02 11 03 11 00 3F 00];&lt;br /&gt;
** непосредственно информацию о самом изображении;&lt;br /&gt;
* &#039;&#039;&#039;FF D9&#039;&#039;&#039; - маркер конца jpeg-файла.&lt;br /&gt;
&lt;br /&gt;
=Image Magic=&lt;br /&gt;
&#039;&#039;&#039;ImageMagick&#039;&#039;&#039; — набор программ для чтения и редактирования файлов множества графических форматов, свободное и кроссплатформенное ПО. Может использоваться с языками Perl, C, C++, Python, Ruby, PHP, Node.js, Pascal, Java, Delphi, в скриптах командной оболочки или самостоятельно.&lt;br /&gt;
ImageMagick обладает широким набором возможностей (конвертация, маскирование, увеличение контрастности и т.п.) и поддерживает работу с различными типами файлов, но так же в нем находили различные уязвимости:&lt;br /&gt;
* RCE [CVE-2016-3714]&lt;br /&gt;
* SSRF [CVE-2016-3718]&lt;br /&gt;
* File deletion [CVE-2016-3715]&lt;br /&gt;
* File moving [CVE-2016-3716]&lt;br /&gt;
* Local File Read [CVE-2016-3717]&lt;br /&gt;
CVE - Common Vulnerabilities and Exposures - база данных общеизвестных уязвимостей информационной безопасности.&lt;br /&gt;
&lt;br /&gt;
Был создан сайт [https://imagetragick.com/ ImageTragick], посвященный описанию некоторых уязвимостей ImageMagic. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Пример.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Допустим, что есть некоторый онлайн-сервис, позволяющих переводить файлы в разные форматы, использующий библиотеку ImageMagic. &lt;br /&gt;
Тогда, создав файл exploit.mvg с содержанием&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
push graphic-context&lt;br /&gt;
viewbox 0 0 640 480&lt;br /&gt;
fill &#039;url(https://example.com/&lt;br /&gt;
image.jpg &amp;quot; ; | ls  &amp;quot;-la)&#039;&lt;br /&gt;
pop graphic-context&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и выполнив запрос на преобразование файла, аналогичный команде &lt;br /&gt;
&amp;lt;pre&amp;gt;$ convert exploit.mvg out.png&amp;lt;/pre&amp;gt;&lt;br /&gt;
атакующий получит список всех файлов директории.&lt;br /&gt;
&lt;br /&gt;
=Задания=&lt;br /&gt;
* https://easy.stands.cyberschool.msu.ru/&lt;br /&gt;
* https://type.stands.cyberschool.msu.ru/&lt;br /&gt;
* https://hand.stands.cyberschool.msu.ru&lt;br /&gt;
&lt;br /&gt;
=Ссылки=&lt;br /&gt;
* [https://drive.google.com/file/d/1Jep20CuBfcfKAeStwnHgR0gCf-O2Wgd0/view?usp=sharing Презинтация]&lt;br /&gt;
* [https://www.php.net/ https://www.php.net/] - сайт PHP&lt;br /&gt;
* [https://htmlacademy.ru/tutorial/php https://htmlacademy.ru/tutorial/php] - учебник PHP&lt;br /&gt;
* [http://www.php.su/php/?php http://www.php.su/php/?php] - ещё один учебник&lt;br /&gt;
* [https://www.alchemistowl.org/pocorgtfo/pocorgtfo15.pdf Полиглоты]&lt;br /&gt;
* [https://drive.google.com/file/d/1Rz0RP5tKIWCmFDP3-_--VYu40ejWf48v/view?usp=sharing Валидация структурных типов]&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_FileUpload&amp;diff=313</id>
		<title>Веб-безопасность/Уязвимости FileUpload</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_FileUpload&amp;diff=313"/>
		<updated>2020-10-15T12:43:02Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Задания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Введение=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Загрузка файлов пользователями&#039;&#039;&#039; - довольно частая часть функциональности веб-приложения (аватарки, хостинг файлов, посылка вложений вместе с сообщениями и т. д.). Небезопасная реализация этого механизма может приводить к очень серьезным уязвимостям.&lt;br /&gt;
Загрузка файлов необходима многим сервисам, таким как файлообменники, социальные сети, онлайн-конверторы и редакторы. &lt;br /&gt;
&lt;br /&gt;
Самый простой способ реализации механизма загрузки файлов - просто создавать на файловой системе сервера файл с таким же содержимым как файл, отправленный пользователем (проще говоря, &amp;quot;класть&amp;quot; присланный пользователем файл куда-то на файловую систему сервера). После загрузки файл либо доступен пользователю по прямой ссылке (т. е. определенные URL-адреса отображаются на загруженные файлы и существует URL, обращение к которому ведет к отдаче загруженного файла), либо как то еще обрабатывается веб-приложением. Само веб-приложение во многом состоит из файлов на диске, поэтому добавление файлов на сервер может быть небезопасным, так как (в общем случае) может изменить логику работы приложения. &lt;br /&gt;
Соответственно, могут появляться следующие уязвимости: &lt;br /&gt;
* Remote Code Execution&lt;br /&gt;
* перезапись или удаление файлов&lt;br /&gt;
* Local File Read, SSRF&lt;br /&gt;
* Denial of Service&lt;br /&gt;
* Information Disclosure&lt;br /&gt;
* XSS&lt;br /&gt;
=PHP=&lt;br /&gt;
PHP (PHP: Hypertext Preprocessor) — скриптовый язык общего назначения, интенсивно применяемый для разработки веб-приложений.&lt;br /&gt;
==Привет, мир!==&lt;br /&gt;
Простейшая программа, выводящая надпись &amp;quot;Привет, мир!&amp;quot;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php print(&amp;quot;Привет, мир!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Каждый скрипт должен начинаться с &amp;lt;code&amp;gt; &amp;lt;?php &amp;lt;/code&amp;gt; и желательно (но не всегда обязательно) на &amp;lt;code&amp;gt; ?&amp;gt; &amp;lt;/code&amp;gt;. Пример кода, где &amp;lt;code&amp;gt; ?&amp;gt; &amp;lt;/code&amp;gt; обязателен:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&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;Наша первая php страница&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&amp;lt;?php print(&amp;quot;Привет, мир&amp;quot;); ?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Переменные==&lt;br /&gt;
В синтаксисе PHP имя переменной записывается латинскими символами, но первым символом всегда должен быть знак доллара $, после чего идёт имя. Не допускается начинать имя переменной с цифры, а также использовать любые значения, кроме букв алфавита и знака подчеркивания.&lt;br /&gt;
&lt;br /&gt;
Правильные переменные:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$age&lt;br /&gt;
$favorite_color&lt;br /&gt;
$name2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Неправильные переменные:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
age&lt;br /&gt;
$42&lt;br /&gt;
$my-age&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Переменные бывают нескольких типов:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$favorite_color = &amp;quot;green&amp;quot;; // строка&lt;br /&gt;
$favorite_number = 42; // целое число&lt;br /&gt;
$favorite_float_number = 0.5; // число с плавающей точкой&lt;br /&gt;
$favorite_bool = true; // boolean&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Числа можно складывать, вычитать, делить, умножать опреаторы стандартные, как и во всех языках: +, -, *, /, % - плюсь, минус, умножить, делить (деление не целочисленное), остаток от деления.&lt;br /&gt;
==Конкатенация==&lt;br /&gt;
Конкатенация - &amp;quot;cклейка&amp;quot; нескольких строчек в одну.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$united_string = &amp;quot;Мой любимый цвет - &amp;quot; . $favorite_color . &amp;quot;, а любимое число - &amp;quot; . $favorite_number;&lt;br /&gt;
print($united_string);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В коде выше $favorite_number - число. Поэтому данная переменная приводится к типу данных &amp;quot;строка&amp;quot;, после чего уже происходит конкатенация.&lt;br /&gt;
==Ввод данных==&lt;br /&gt;
Данная функциональность редко используется, но нам это нужно было для решения задач на лекии. readline - функция ввода данных:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$line = readline();&lt;br /&gt;
print($line);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Массивы==&lt;br /&gt;
Массив — структура данных, хранящая набор значений (элементов массива), идентифицируемых по индексу.&lt;br /&gt;
&lt;br /&gt;
В обычных массивах в PHP индекс значение - целое число. Нумеруются массивы с 0:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$fav_shows = [&amp;quot;game of thrones&amp;quot;, &amp;quot;american horror story&amp;quot;, &amp;quot;walking dead&amp;quot;];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В ассоциативных массивах в качестве индекса может использоваться не только число. Например, строка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$user = [&#039;age&#039; =&amp;gt; 42, &#039;name&#039; =&amp;gt; &#039;Иннокентий&#039;, &#039;fav_shows&#039; =&amp;gt; [&amp;quot;game of thrones&amp;quot;, &amp;quot;american horror story&amp;quot;, &amp;quot;walking dead&amp;quot;] ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Условный оператор==&lt;br /&gt;
Синтаксис: if (условие):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
if ($gender == &amp;quot;мужчина&amp;quot;) {&lt;br /&gt;
    print(&amp;quot;Приветствую тебя, мой Господин!&amp;quot;);&lt;br /&gt;
} else if ($gender == &amp;quot;женщина&amp;quot;) {&lt;br /&gt;
    print(&amp;quot;Приветствую тебя, о Госпожа!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;Не хватает гендеров.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* оператор присваивания: =&lt;br /&gt;
* операторы сравнения: ==, ===, !=, !==, &amp;gt;, &amp;lt;, &amp;lt;=, &amp;gt;=&lt;br /&gt;
* and, or - логические и и или соответственно&lt;br /&gt;
==Циклы==&lt;br /&gt;
Синтаксис while: while (условие_остановки):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$i = 0;&lt;br /&gt;
while ($i &amp;lt; 10) {&lt;br /&gt;
    print($i);&lt;br /&gt;
    $i = $i + 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Синтаксис for: for (команда,_выполняемая_до_цикла; условие_осатновки; команда,_выполняемая_в_ конце_каждой_операции):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
for ($x = 0; $x &amp;lt; 10; ++$x) {&lt;br /&gt;
    print($x);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Для асоциативных массивах есть цикл foreach:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$user = [&lt;br /&gt;
    &#039;Имя&#039; =&amp;gt; &#039;Евгений&#039;,&lt;br /&gt;
    &#039;Возраст&#039; =&amp;gt; &#039;27&#039;,&lt;br /&gt;
    &#039;Род занятий&#039; =&amp;gt; &#039;Программист&#039;&lt;br /&gt;
];&lt;br /&gt;
foreach ($user as $key =&amp;gt; $value) {&lt;br /&gt;
    print($key . &#039;: &#039;);&lt;br /&gt;
    print($value . &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Функции==&lt;br /&gt;
Синтаксис: имя_функции(аргументы_функции):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
function is_even($number) {&lt;br /&gt;
    if ($number % 2 != 0) {&lt;br /&gt;
        return false;&lt;br /&gt;
    } else {&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
if (is_even(3)) {&lt;br /&gt;
    print(&amp;quot;3 - четное число&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;3 - нечетное число&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Подключение файлов==&lt;br /&gt;
Чтобы не писать всё в одном файле, используется команда require.&lt;br /&gt;
Содержимое файла sub.php:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
print(&amp;quot;Привет, я содержимое из sub.php!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Содержимое файла index.php:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require &#039;sub.php&#039;;&lt;br /&gt;
print(&amp;quot;А я - index.php!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
После подключения sub.php, содержимого этого файла доступно в index.php.&lt;br /&gt;
==Полезные константы==&lt;br /&gt;
* __DIR__ — полный путь к директории, в которой находится текущий сценарий&lt;br /&gt;
* __FILE__ — полный путь к текущему сценарию&lt;br /&gt;
* $_COOKIE — ассоциативный массив, содержащий куки&lt;br /&gt;
* $_SESSION — ассоциативный массив, содержащий информацию о сессии&lt;br /&gt;
* $_POST — ассоциативный массив, содержащий данные, полученные после POST запроса&lt;br /&gt;
* $_GET — ассоциативный массив, содержащий данные, полученные после GET запроса&lt;br /&gt;
=Примеры=&lt;br /&gt;
1. Пусть есть сайт с формой:&lt;br /&gt;
Клиент:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;feedback&amp;quot; method=&amp;quot;POST&amp;quot; action=&amp;quot;form.php&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваше имя: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваш email: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Сообщение: &amp;lt;textarea name=&amp;quot;message&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;send&amp;quot; value=&amp;quot;Отправить&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При получении формы сервером, данные из неё можно получить следующим образом:&lt;br /&gt;
Сервер:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (isset($_POST)) {&lt;br /&gt;
    print(&amp;quot;Имя: &amp;quot; . $_POST[&#039;name&#039;]);&lt;br /&gt;
    print(&amp;quot;&amp;lt;br&amp;gt;Email: &amp;quot; . $_POST[&#039;email&#039;]);&lt;br /&gt;
    print(&amp;quot;&amp;lt;br&amp;gt;Сообщение: &amp;quot; . $_POST[&#039;message&#039;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
2. Другой пример - отправка формы:&lt;br /&gt;
Клиент:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;file_upload&amp;quot; method=&amp;quot;POST&amp;quot; action=&amp;quot;form.php&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваш аватар: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;avatar&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;send&amp;quot; value=&amp;quot;Отправить файл&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Работать с файлом ожно следующим образом:&lt;br /&gt;
Сервер:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (isset($_FILES[&#039;avatar&#039;])) {&lt;br /&gt;
    $file = $_FILES[&#039;avatar&#039;];&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Загружен файл с именем &amp;quot; . $file[&#039;name&#039;] . &amp;quot; и размером &amp;quot; . $file[&#039;size&#039;] . &amp;quot; байт&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Если не переместить файл в постаянную папку - файл будет удален:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$current_path = $_FILES[&#039;avatar&#039;][&#039;tmp_name&#039;];&lt;br /&gt;
$filename = $_FILES[&#039;avatar&#039;][&#039;name&#039;];&lt;br /&gt;
$new_path = dirname(__FILE__) . &#039;/&#039; . $filename;&lt;br /&gt;
&lt;br /&gt;
move_uploaded_file($current_path, $new_path);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=SQL=&lt;br /&gt;
Так же можно работать с базами данных. mysqli_connect - функция для подключения к mysql-серверу, mysqli_query - отправка sql-запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$link = mysqli_connect(&amp;quot;localhost&amp;quot;, &amp;quot;root&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$sql = &#039;INSERT INTO cities SET name = &amp;quot;Санкт-Петербург&amp;quot;&#039;;&lt;br /&gt;
$result = mysqli_query($link, $sql);&lt;br /&gt;
&lt;br /&gt;
if ($result == false) {&lt;br /&gt;
    print(&amp;quot;Произошла ошибка при выполнении запроса&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=web shell=&lt;br /&gt;
&lt;br /&gt;
Простейшим примером является загрузка файла с расширением .php на сайт, работающий на PHP (в качестве проверки можно попробовать обратиться по адресу &#039;&#039;&#039;cite.com/index.php&#039;&#039;&#039; и не получить ошибки). По умолчанию PHP-сайты работают так что пользователь обращается по URL к файлу (URL сайта, начиная с первого /, отображаются на определенную директорию на сервере, она называется &#039;&#039;&#039;web root&#039;&#039;&#039;) и, если этот файл имеет расширение php (или другое расширение из предопределенного списка расширений для PHP-файлов), то содержимое этого файла выполняется как код на PHP, вывод этого кода возвращается пользователю в ответе (кстати, так работает не только PHP, но и ASP.NET Web Forms, JSP, ASP). В результате, если пользователь может загрузить на сайт файл c расширением .php и обратиться к нему по URL (т. е. этот файл будет создан где-то внутри &#039;&#039;&#039;web root&#039;&#039;&#039;), то, если сервер специально не настроен чтобы файлы из директории для загрузок не выполнялись, PHP-код в нём будет выполнен. Соответственно, загрузив на уязвимый сайт файл &amp;lt;code&amp;gt;shell.php&amp;lt;/code&amp;gt; с кодом &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
42 * 66613;&lt;br /&gt;
&amp;lt;?php system(&#039;ls -lsa&#039;); ?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и, получив ссылку на него (к примеру, /uploads/5c8e82bb8ad66/attack.php), обратится по ней, то в результате этот PHP-код выполнится и в ответе сервера будет &lt;br /&gt;
произведение чисел 42 и 66613, а также список всех файлов в длинном формате (функция PHP system работает так же как одноимённая функция библиотеки Си - то есть выполняет команду shell). В итоге атакующий получает выполнение произвольного кода на сервере (RCE).&lt;br /&gt;
&lt;br /&gt;
=Обход методов защиты и атака=&lt;br /&gt;
&lt;br /&gt;
==Валидация имени файла==&lt;br /&gt;
&lt;br /&gt;
===Черный список ресширений===&lt;br /&gt;
Обходится с помощью использования двойных расширений (&amp;lt;code&amp;gt;shell.php.png&amp;lt;/code&amp;gt;) или  малоизвестный расширений (&amp;lt;code&amp;gt;.php5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.phtml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.shtml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt;). Кроме того, возможна инъекция нулевого байта (&amp;lt;code&amp;gt;shell.php%00.jpg&amp;lt;/code&amp;gt;) или регистрозависимость при проверке (&amp;lt;code&amp;gt;PHp3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.aSp&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
===Белый список расширений===&lt;br /&gt;
Спасает от использования атакующим малоизвестных и регистрозависимых расширений, но все ещё обходится с помощью двойных расширений или инъекции нулевого байта. &lt;br /&gt;
&lt;br /&gt;
===Санитайзеры===&lt;br /&gt;
Оставляет большую степень свободы. Например, если санитайзер удаляет вхождения подстрок типа &amp;lt;code&amp;gt;.php&amp;lt;/code&amp;gt;, то использования имени файла вида &amp;lt;code&amp;gt;shell.p&#039;&#039;&#039;.php&#039;&#039;&#039;hp&amp;lt;/code&amp;gt; позволяет после загрузки получить файл с именем &amp;lt;code&amp;gt;shell.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Валидация Content-Type==&lt;br /&gt;
Обходится изменением заголовка Content-Type, например, с помощью перехватывающего прокси (burp suite). Соответсвенно, в запросе &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST / HTTP/1.1&lt;br /&gt;
Host: easy.fu.khashaev.ru&lt;br /&gt;
Content-Length: 200&lt;br /&gt;
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary&lt;br /&gt;
------WebKitFormBoundary&lt;br /&gt;
Content-Disposition: form-data; name=&amp;quot;file&amp;quot;; filename=&amp;quot;info.php&amp;quot;&lt;br /&gt;
Content-Type: text/php&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
------WebKitFormBoundary--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
строчка &amp;lt;code&amp;gt;Content-Type: text/php&amp;lt;/code&amp;gt; может быть заменена на строчку &amp;lt;code&amp;gt;Content-Type: image/png&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==Прочее==&lt;br /&gt;
&#039;&#039;&#039;Server Side Includes&#039;&#039;&#039; - язык для динамической «сборки» веб-страниц на сервере из отдельных составных частей и выдачи клиенту полученного HTML-документа. Имеет расширения .shtml, .stm или .shtm. Например, при загрузке и вызове &#039;&#039;&#039;file.shtml&#039;&#039;&#039;, содержащего код &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;!-- #exec cmd=&amp;quot;ls&amp;quot; --&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
атакующему будет выведен список файлов данной директории. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Static HTML&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
При возможности загрузить на сервис статический HTML, создается HTML-страница, содержащая  вредоносный код (например, крадущего cookie), и ссылка на этот файл отправляется жертве. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Path Traversal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Атака, основанная на использовании специфически составленных имен файлов (например, &amp;lt;code&amp;gt;../config.ini&amp;lt;/code&amp;gt;), позволяющих выйти за пределы директории хранения файлов. Может привести к переписыванию исходных фалов веб-приложения, конфигурационных или системных файлов. &lt;br /&gt;
Атака возможна, если не используется функция &amp;lt;code&amp;gt;basename&amp;lt;/code&amp;gt; (возвращает последний компонент имени из указанного пути) или её аналог. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Filename XSS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Сервис уязвим к XSS, если допускается имя файла вида &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Полиглоты==&lt;br /&gt;
Полиглотами называют файлы, которые могут быть корректно распознаны как файлы разных типов. &lt;br /&gt;
Можно встраивать &lt;br /&gt;
* JavaScript в JPEG, GIF, PNG, PDF&lt;br /&gt;
* HTML в что-нибудь &lt;br /&gt;
* PHP в [https://rdot.org/forum/showthread.php?t=2780 JPEG ], [https://github.com/fakhrizulkifli/Defeating-PHP-GD-imagecreatefromgif GIF], [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/ PNG]&lt;br /&gt;
&lt;br /&gt;
===Структура JPEG===&lt;br /&gt;
Все jpeg-файлы имеют схожую структуру. Рассмотрим в качестве примера изображение&lt;br /&gt;
&lt;br /&gt;
[[Файл:Mini.jpg|128px]]&lt;br /&gt;
 &lt;br /&gt;
В hex-редакторе оно выглядит следующим образом &lt;br /&gt;
&lt;br /&gt;
[[Файл:Hex_print.png]]&lt;br /&gt;
&lt;br /&gt;
В структуре jpeg-файлов содержатся служебные маркеры, состоящие из двух байт и всегда начинающиеся с FF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FF D8&#039;&#039;&#039; - маркер начала jpeg-файла;&lt;br /&gt;
* &#039;&#039;&#039;FF DA&#039;&#039;&#039; - маркер начала секции Start of Scan:&lt;br /&gt;
** в двух байтах хранится длинна заголовка изображения [00 0C];&lt;br /&gt;
** заголовок изображения [03 01 00 02 11 03 11 00 3F 00];&lt;br /&gt;
** непосредственно информацию о самом изображении;&lt;br /&gt;
* &#039;&#039;&#039;FF D9&#039;&#039;&#039; - маркер конца jpeg-файла.&lt;br /&gt;
&lt;br /&gt;
=Image Magic=&lt;br /&gt;
&#039;&#039;&#039;ImageMagick&#039;&#039;&#039; — набор программ для чтения и редактирования файлов множества графических форматов, свободное и кроссплатформенное ПО. Может использоваться с языками Perl, C, C++, Python, Ruby, PHP, Node.js, Pascal, Java, Delphi, в скриптах командной оболочки или самостоятельно.&lt;br /&gt;
ImageMagick обладает широким набором возможностей (конвертация, маскирование, увеличение контрастности и т.п.) и поддерживает работу с различными типами файлов, но так же в нем находили различные уязвимости:&lt;br /&gt;
* RCE [CVE-2016-3714]&lt;br /&gt;
* SSRF [CVE-2016-3718]&lt;br /&gt;
* File deletion [CVE-2016-3715]&lt;br /&gt;
* File moving [CVE-2016-3716]&lt;br /&gt;
* Local File Read [CVE-2016-3717]&lt;br /&gt;
CVE - Common Vulnerabilities and Exposures - база данных общеизвестных уязвимостей информационной безопасности.&lt;br /&gt;
&lt;br /&gt;
Был создан сайт [https://imagetragick.com/ ImageTragick], посвященный описанию некоторых уязвимостей ImageMagic. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Пример.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Допустим, что есть некоторый онлайн-сервис, позволяющих переводить файлы в разные форматы, использующий библиотеку ImageMagic. &lt;br /&gt;
Тогда, создав файл exploit.mvg с содержанием&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
push graphic-context&lt;br /&gt;
viewbox 0 0 640 480&lt;br /&gt;
fill &#039;url(https://example.com/&lt;br /&gt;
image.jpg &amp;quot; ; | ls  &amp;quot;-la)&#039;&lt;br /&gt;
pop graphic-context&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и выполнив запрос на преобразование файла, аналогичный команде &lt;br /&gt;
&amp;lt;pre&amp;gt;$ convert exploit.mvg out.png&amp;lt;/pre&amp;gt;&lt;br /&gt;
атакующий получит список всех файлов директории.&lt;br /&gt;
&lt;br /&gt;
=Задания=&lt;br /&gt;
* https://easy.stands.cyberschool.msu.ru/&lt;br /&gt;
* https://type.stands.cyberschool.msu.ru/&lt;br /&gt;
* https://hand.stands.cyberschool.msu.ru&lt;br /&gt;
&lt;br /&gt;
=Ссылки=&lt;br /&gt;
* [https://www.php.net/ https://www.php.net/] - сайт PHP&lt;br /&gt;
* [https://htmlacademy.ru/tutorial/php https://htmlacademy.ru/tutorial/php] - учебник PHP&lt;br /&gt;
* [http://www.php.su/php/?php http://www.php.su/php/?php] - ещё один учебник&lt;br /&gt;
* [https://www.alchemistowl.org/pocorgtfo/pocorgtfo15.pdf Полиглоты]&lt;br /&gt;
* [https://drive.google.com/file/d/1Rz0RP5tKIWCmFDP3-_--VYu40ejWf48v/view?usp=sharing Валидация структурных типов]&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2020)&amp;diff=312</id>
		<title>Практикум на ЭВМ (2020)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2020)&amp;diff=312"/>
		<updated>2020-10-12T14:16:16Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Веб */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по четвергам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом &amp;quot;Безопасность компьютерных систем&amp;quot;, который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара - т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2020/2021 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#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;
Большая часть заданий будет выполнена в формате 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;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2020)/Бонусное_задание|Бонусное задание]]&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;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (17 сентября 2020) [[Веб-безопасность/Введение в веб-технологии]]&lt;br /&gt;
&lt;br /&gt;
Семинар 2 (24 сентября 2020) [[Веб-безопасность/Базы_данных_SQL]]&lt;br /&gt;
&lt;br /&gt;
Семинар 3 (1 октября 2020) [[Веб-безопасность/Уязвимости_SQLi]]&lt;br /&gt;
&lt;br /&gt;
Семинар 4 (8 октября 2020) [[Веб-безопасность/Уязвимости_XSS]]&lt;br /&gt;
&lt;br /&gt;
Семинар 5 (15 октября 2020) [[Веб-безопасность/Уязвимости_FileUpload]]&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;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_FileUpload&amp;diff=311</id>
		<title>Веб-безопасность/Уязвимости FileUpload</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_FileUpload&amp;diff=311"/>
		<updated>2020-10-12T14:16:02Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: Новая страница: «=Введение=  &amp;#039;&amp;#039;&amp;#039;Загрузка файлов пользователями&amp;#039;&amp;#039;&amp;#039; - довольно частая часть функциональности…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Введение=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Загрузка файлов пользователями&#039;&#039;&#039; - довольно частая часть функциональности веб-приложения (аватарки, хостинг файлов, посылка вложений вместе с сообщениями и т. д.). Небезопасная реализация этого механизма может приводить к очень серьезным уязвимостям.&lt;br /&gt;
Загрузка файлов необходима многим сервисам, таким как файлообменники, социальные сети, онлайн-конверторы и редакторы. &lt;br /&gt;
&lt;br /&gt;
Самый простой способ реализации механизма загрузки файлов - просто создавать на файловой системе сервера файл с таким же содержимым как файл, отправленный пользователем (проще говоря, &amp;quot;класть&amp;quot; присланный пользователем файл куда-то на файловую систему сервера). После загрузки файл либо доступен пользователю по прямой ссылке (т. е. определенные URL-адреса отображаются на загруженные файлы и существует URL, обращение к которому ведет к отдаче загруженного файла), либо как то еще обрабатывается веб-приложением. Само веб-приложение во многом состоит из файлов на диске, поэтому добавление файлов на сервер может быть небезопасным, так как (в общем случае) может изменить логику работы приложения. &lt;br /&gt;
Соответственно, могут появляться следующие уязвимости: &lt;br /&gt;
* Remote Code Execution&lt;br /&gt;
* перезапись или удаление файлов&lt;br /&gt;
* Local File Read, SSRF&lt;br /&gt;
* Denial of Service&lt;br /&gt;
* Information Disclosure&lt;br /&gt;
* XSS&lt;br /&gt;
=PHP=&lt;br /&gt;
PHP (PHP: Hypertext Preprocessor) — скриптовый язык общего назначения, интенсивно применяемый для разработки веб-приложений.&lt;br /&gt;
==Привет, мир!==&lt;br /&gt;
Простейшая программа, выводящая надпись &amp;quot;Привет, мир!&amp;quot;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php print(&amp;quot;Привет, мир!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Каждый скрипт должен начинаться с &amp;lt;code&amp;gt; &amp;lt;?php &amp;lt;/code&amp;gt; и желательно (но не всегда обязательно) на &amp;lt;code&amp;gt; ?&amp;gt; &amp;lt;/code&amp;gt;. Пример кода, где &amp;lt;code&amp;gt; ?&amp;gt; &amp;lt;/code&amp;gt; обязателен:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&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;Наша первая php страница&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&amp;lt;?php print(&amp;quot;Привет, мир&amp;quot;); ?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Переменные==&lt;br /&gt;
В синтаксисе PHP имя переменной записывается латинскими символами, но первым символом всегда должен быть знак доллара $, после чего идёт имя. Не допускается начинать имя переменной с цифры, а также использовать любые значения, кроме букв алфавита и знака подчеркивания.&lt;br /&gt;
&lt;br /&gt;
Правильные переменные:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$age&lt;br /&gt;
$favorite_color&lt;br /&gt;
$name2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Неправильные переменные:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
age&lt;br /&gt;
$42&lt;br /&gt;
$my-age&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Переменные бывают нескольких типов:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$favorite_color = &amp;quot;green&amp;quot;; // строка&lt;br /&gt;
$favorite_number = 42; // целое число&lt;br /&gt;
$favorite_float_number = 0.5; // число с плавающей точкой&lt;br /&gt;
$favorite_bool = true; // boolean&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Числа можно складывать, вычитать, делить, умножать опреаторы стандартные, как и во всех языках: +, -, *, /, % - плюсь, минус, умножить, делить (деление не целочисленное), остаток от деления.&lt;br /&gt;
==Конкатенация==&lt;br /&gt;
Конкатенация - &amp;quot;cклейка&amp;quot; нескольких строчек в одну.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$united_string = &amp;quot;Мой любимый цвет - &amp;quot; . $favorite_color . &amp;quot;, а любимое число - &amp;quot; . $favorite_number;&lt;br /&gt;
print($united_string);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В коде выше $favorite_number - число. Поэтому данная переменная приводится к типу данных &amp;quot;строка&amp;quot;, после чего уже происходит конкатенация.&lt;br /&gt;
==Ввод данных==&lt;br /&gt;
Данная функциональность редко используется, но нам это нужно было для решения задач на лекии. readline - функция ввода данных:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$line = readline();&lt;br /&gt;
print($line);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Массивы==&lt;br /&gt;
Массив — структура данных, хранящая набор значений (элементов массива), идентифицируемых по индексу.&lt;br /&gt;
&lt;br /&gt;
В обычных массивах в PHP индекс значение - целое число. Нумеруются массивы с 0:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$fav_shows = [&amp;quot;game of thrones&amp;quot;, &amp;quot;american horror story&amp;quot;, &amp;quot;walking dead&amp;quot;];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В ассоциативных массивах в качестве индекса может использоваться не только число. Например, строка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$user = [&#039;age&#039; =&amp;gt; 42, &#039;name&#039; =&amp;gt; &#039;Иннокентий&#039;, &#039;fav_shows&#039; =&amp;gt; [&amp;quot;game of thrones&amp;quot;, &amp;quot;american horror story&amp;quot;, &amp;quot;walking dead&amp;quot;] ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Условный оператор==&lt;br /&gt;
Синтаксис: if (условие):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
if ($gender == &amp;quot;мужчина&amp;quot;) {&lt;br /&gt;
    print(&amp;quot;Приветствую тебя, мой Господин!&amp;quot;);&lt;br /&gt;
} else if ($gender == &amp;quot;женщина&amp;quot;) {&lt;br /&gt;
    print(&amp;quot;Приветствую тебя, о Госпожа!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;Не хватает гендеров.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* оператор присваивания: =&lt;br /&gt;
* операторы сравнения: ==, ===, !=, !==, &amp;gt;, &amp;lt;, &amp;lt;=, &amp;gt;=&lt;br /&gt;
* and, or - логические и и или соответственно&lt;br /&gt;
==Циклы==&lt;br /&gt;
Синтаксис while: while (условие_остановки):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$i = 0;&lt;br /&gt;
while ($i &amp;lt; 10) {&lt;br /&gt;
    print($i);&lt;br /&gt;
    $i = $i + 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Синтаксис for: for (команда,_выполняемая_до_цикла; условие_осатновки; команда,_выполняемая_в_ конце_каждой_операции):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
for ($x = 0; $x &amp;lt; 10; ++$x) {&lt;br /&gt;
    print($x);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Для асоциативных массивах есть цикл foreach:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$user = [&lt;br /&gt;
    &#039;Имя&#039; =&amp;gt; &#039;Евгений&#039;,&lt;br /&gt;
    &#039;Возраст&#039; =&amp;gt; &#039;27&#039;,&lt;br /&gt;
    &#039;Род занятий&#039; =&amp;gt; &#039;Программист&#039;&lt;br /&gt;
];&lt;br /&gt;
foreach ($user as $key =&amp;gt; $value) {&lt;br /&gt;
    print($key . &#039;: &#039;);&lt;br /&gt;
    print($value . &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Функции==&lt;br /&gt;
Синтаксис: имя_функции(аргументы_функции):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
function is_even($number) {&lt;br /&gt;
    if ($number % 2 != 0) {&lt;br /&gt;
        return false;&lt;br /&gt;
    } else {&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
if (is_even(3)) {&lt;br /&gt;
    print(&amp;quot;3 - четное число&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;3 - нечетное число&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Подключение файлов==&lt;br /&gt;
Чтобы не писать всё в одном файле, используется команда require.&lt;br /&gt;
Содержимое файла sub.php:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
print(&amp;quot;Привет, я содержимое из sub.php!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Содержимое файла index.php:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require &#039;sub.php&#039;;&lt;br /&gt;
print(&amp;quot;А я - index.php!&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
После подключения sub.php, содержимого этого файла доступно в index.php.&lt;br /&gt;
==Полезные константы==&lt;br /&gt;
* __DIR__ — полный путь к директории, в которой находится текущий сценарий&lt;br /&gt;
* __FILE__ — полный путь к текущему сценарию&lt;br /&gt;
* $_COOKIE — ассоциативный массив, содержащий куки&lt;br /&gt;
* $_SESSION — ассоциативный массив, содержащий информацию о сессии&lt;br /&gt;
* $_POST — ассоциативный массив, содержащий данные, полученные после POST запроса&lt;br /&gt;
* $_GET — ассоциативный массив, содержащий данные, полученные после GET запроса&lt;br /&gt;
=Примеры=&lt;br /&gt;
1. Пусть есть сайт с формой:&lt;br /&gt;
Клиент:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;feedback&amp;quot; method=&amp;quot;POST&amp;quot; action=&amp;quot;form.php&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваше имя: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваш email: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Сообщение: &amp;lt;textarea name=&amp;quot;message&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;send&amp;quot; value=&amp;quot;Отправить&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При получении формы сервером, данные из неё можно получить следующим образом:&lt;br /&gt;
Сервер:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (isset($_POST)) {&lt;br /&gt;
    print(&amp;quot;Имя: &amp;quot; . $_POST[&#039;name&#039;]);&lt;br /&gt;
    print(&amp;quot;&amp;lt;br&amp;gt;Email: &amp;quot; . $_POST[&#039;email&#039;]);&lt;br /&gt;
    print(&amp;quot;&amp;lt;br&amp;gt;Сообщение: &amp;quot; . $_POST[&#039;message&#039;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
2. Другой пример - отправка формы:&lt;br /&gt;
Клиент:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;file_upload&amp;quot; method=&amp;quot;POST&amp;quot; action=&amp;quot;form.php&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Ваш аватар: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;avatar&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;send&amp;quot; value=&amp;quot;Отправить файл&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Работать с файлом ожно следующим образом:&lt;br /&gt;
Сервер:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (isset($_FILES[&#039;avatar&#039;])) {&lt;br /&gt;
    $file = $_FILES[&#039;avatar&#039;];&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Загружен файл с именем &amp;quot; . $file[&#039;name&#039;] . &amp;quot; и размером &amp;quot; . $file[&#039;size&#039;] . &amp;quot; байт&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Если не переместить файл в постаянную папку - файл будет удален:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$current_path = $_FILES[&#039;avatar&#039;][&#039;tmp_name&#039;];&lt;br /&gt;
$filename = $_FILES[&#039;avatar&#039;][&#039;name&#039;];&lt;br /&gt;
$new_path = dirname(__FILE__) . &#039;/&#039; . $filename;&lt;br /&gt;
&lt;br /&gt;
move_uploaded_file($current_path, $new_path);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=SQL=&lt;br /&gt;
Так же можно работать с базами данных. mysqli_connect - функция для подключения к mysql-серверу, mysqli_query - отправка sql-запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$link = mysqli_connect(&amp;quot;localhost&amp;quot;, &amp;quot;root&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$sql = &#039;INSERT INTO cities SET name = &amp;quot;Санкт-Петербург&amp;quot;&#039;;&lt;br /&gt;
$result = mysqli_query($link, $sql);&lt;br /&gt;
&lt;br /&gt;
if ($result == false) {&lt;br /&gt;
    print(&amp;quot;Произошла ошибка при выполнении запроса&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=web shell=&lt;br /&gt;
&lt;br /&gt;
Простейшим примером является загрузка файла с расширением .php на сайт, работающий на PHP (в качестве проверки можно попробовать обратиться по адресу &#039;&#039;&#039;cite.com/index.php&#039;&#039;&#039; и не получить ошибки). По умолчанию PHP-сайты работают так что пользователь обращается по URL к файлу (URL сайта, начиная с первого /, отображаются на определенную директорию на сервере, она называется &#039;&#039;&#039;web root&#039;&#039;&#039;) и, если этот файл имеет расширение php (или другое расширение из предопределенного списка расширений для PHP-файлов), то содержимое этого файла выполняется как код на PHP, вывод этого кода возвращается пользователю в ответе (кстати, так работает не только PHP, но и ASP.NET Web Forms, JSP, ASP). В результате, если пользователь может загрузить на сайт файл c расширением .php и обратиться к нему по URL (т. е. этот файл будет создан где-то внутри &#039;&#039;&#039;web root&#039;&#039;&#039;), то, если сервер специально не настроен чтобы файлы из директории для загрузок не выполнялись, PHP-код в нём будет выполнен. Соответственно, загрузив на уязвимый сайт файл &amp;lt;code&amp;gt;shell.php&amp;lt;/code&amp;gt; с кодом &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
42 * 66613;&lt;br /&gt;
&amp;lt;?php system(&#039;ls -lsa&#039;); ?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и, получив ссылку на него (к примеру, /uploads/5c8e82bb8ad66/attack.php), обратится по ней, то в результате этот PHP-код выполнится и в ответе сервера будет &lt;br /&gt;
произведение чисел 42 и 66613, а также список всех файлов в длинном формате (функция PHP system работает так же как одноимённая функция библиотеки Си - то есть выполняет команду shell). В итоге атакующий получает выполнение произвольного кода на сервере (RCE).&lt;br /&gt;
&lt;br /&gt;
=Обход методов защиты и атака=&lt;br /&gt;
&lt;br /&gt;
==Валидация имени файла==&lt;br /&gt;
&lt;br /&gt;
===Черный список ресширений===&lt;br /&gt;
Обходится с помощью использования двойных расширений (&amp;lt;code&amp;gt;shell.php.png&amp;lt;/code&amp;gt;) или  малоизвестный расширений (&amp;lt;code&amp;gt;.php5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.phtml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.shtml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt;). Кроме того, возможна инъекция нулевого байта (&amp;lt;code&amp;gt;shell.php%00.jpg&amp;lt;/code&amp;gt;) или регистрозависимость при проверке (&amp;lt;code&amp;gt;PHp3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.aSp&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
===Белый список расширений===&lt;br /&gt;
Спасает от использования атакующим малоизвестных и регистрозависимых расширений, но все ещё обходится с помощью двойных расширений или инъекции нулевого байта. &lt;br /&gt;
&lt;br /&gt;
===Санитайзеры===&lt;br /&gt;
Оставляет большую степень свободы. Например, если санитайзер удаляет вхождения подстрок типа &amp;lt;code&amp;gt;.php&amp;lt;/code&amp;gt;, то использования имени файла вида &amp;lt;code&amp;gt;shell.p&#039;&#039;&#039;.php&#039;&#039;&#039;hp&amp;lt;/code&amp;gt; позволяет после загрузки получить файл с именем &amp;lt;code&amp;gt;shell.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Валидация Content-Type==&lt;br /&gt;
Обходится изменением заголовка Content-Type, например, с помощью перехватывающего прокси (burp suite). Соответсвенно, в запросе &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST / HTTP/1.1&lt;br /&gt;
Host: easy.fu.khashaev.ru&lt;br /&gt;
Content-Length: 200&lt;br /&gt;
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary&lt;br /&gt;
------WebKitFormBoundary&lt;br /&gt;
Content-Disposition: form-data; name=&amp;quot;file&amp;quot;; filename=&amp;quot;info.php&amp;quot;&lt;br /&gt;
Content-Type: text/php&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
------WebKitFormBoundary--&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
строчка &amp;lt;code&amp;gt;Content-Type: text/php&amp;lt;/code&amp;gt; может быть заменена на строчку &amp;lt;code&amp;gt;Content-Type: image/png&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==Прочее==&lt;br /&gt;
&#039;&#039;&#039;Server Side Includes&#039;&#039;&#039; - язык для динамической «сборки» веб-страниц на сервере из отдельных составных частей и выдачи клиенту полученного HTML-документа. Имеет расширения .shtml, .stm или .shtm. Например, при загрузке и вызове &#039;&#039;&#039;file.shtml&#039;&#039;&#039;, содержащего код &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;!-- #exec cmd=&amp;quot;ls&amp;quot; --&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
атакующему будет выведен список файлов данной директории. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Static HTML&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
При возможности загрузить на сервис статический HTML, создается HTML-страница, содержащая  вредоносный код (например, крадущего cookie), и ссылка на этот файл отправляется жертве. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Path Traversal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Атака, основанная на использовании специфически составленных имен файлов (например, &amp;lt;code&amp;gt;../config.ini&amp;lt;/code&amp;gt;), позволяющих выйти за пределы директории хранения файлов. Может привести к переписыванию исходных фалов веб-приложения, конфигурационных или системных файлов. &lt;br /&gt;
Атака возможна, если не используется функция &amp;lt;code&amp;gt;basename&amp;lt;/code&amp;gt; (возвращает последний компонент имени из указанного пути) или её аналог. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Filename XSS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Сервис уязвим к XSS, если допускается имя файла вида &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Полиглоты==&lt;br /&gt;
Полиглотами называют файлы, которые могут быть корректно распознаны как файлы разных типов. &lt;br /&gt;
Можно встраивать &lt;br /&gt;
* JavaScript в JPEG, GIF, PNG, PDF&lt;br /&gt;
* HTML в что-нибудь &lt;br /&gt;
* PHP в [https://rdot.org/forum/showthread.php?t=2780 JPEG ], [https://github.com/fakhrizulkifli/Defeating-PHP-GD-imagecreatefromgif GIF], [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/ PNG]&lt;br /&gt;
&lt;br /&gt;
===Структура JPEG===&lt;br /&gt;
Все jpeg-файлы имеют схожую структуру. Рассмотрим в качестве примера изображение&lt;br /&gt;
&lt;br /&gt;
[[Файл:Mini.jpg|128px]]&lt;br /&gt;
 &lt;br /&gt;
В hex-редакторе оно выглядит следующим образом &lt;br /&gt;
&lt;br /&gt;
[[Файл:Hex_print.png]]&lt;br /&gt;
&lt;br /&gt;
В структуре jpeg-файлов содержатся служебные маркеры, состоящие из двух байт и всегда начинающиеся с FF.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FF D8&#039;&#039;&#039; - маркер начала jpeg-файла;&lt;br /&gt;
* &#039;&#039;&#039;FF DA&#039;&#039;&#039; - маркер начала секции Start of Scan:&lt;br /&gt;
** в двух байтах хранится длинна заголовка изображения [00 0C];&lt;br /&gt;
** заголовок изображения [03 01 00 02 11 03 11 00 3F 00];&lt;br /&gt;
** непосредственно информацию о самом изображении;&lt;br /&gt;
* &#039;&#039;&#039;FF D9&#039;&#039;&#039; - маркер конца jpeg-файла.&lt;br /&gt;
&lt;br /&gt;
=Image Magic=&lt;br /&gt;
&#039;&#039;&#039;ImageMagick&#039;&#039;&#039; — набор программ для чтения и редактирования файлов множества графических форматов, свободное и кроссплатформенное ПО. Может использоваться с языками Perl, C, C++, Python, Ruby, PHP, Node.js, Pascal, Java, Delphi, в скриптах командной оболочки или самостоятельно.&lt;br /&gt;
ImageMagick обладает широким набором возможностей (конвертация, маскирование, увеличение контрастности и т.п.) и поддерживает работу с различными типами файлов, но так же в нем находили различные уязвимости:&lt;br /&gt;
* RCE [CVE-2016-3714]&lt;br /&gt;
* SSRF [CVE-2016-3718]&lt;br /&gt;
* File deletion [CVE-2016-3715]&lt;br /&gt;
* File moving [CVE-2016-3716]&lt;br /&gt;
* Local File Read [CVE-2016-3717]&lt;br /&gt;
CVE - Common Vulnerabilities and Exposures - база данных общеизвестных уязвимостей информационной безопасности.&lt;br /&gt;
&lt;br /&gt;
Был создан сайт [https://imagetragick.com/ ImageTragick], посвященный описанию некоторых уязвимостей ImageMagic. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Пример.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Допустим, что есть некоторый онлайн-сервис, позволяющих переводить файлы в разные форматы, использующий библиотеку ImageMagic. &lt;br /&gt;
Тогда, создав файл exploit.mvg с содержанием&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
push graphic-context&lt;br /&gt;
viewbox 0 0 640 480&lt;br /&gt;
fill &#039;url(https://example.com/&lt;br /&gt;
image.jpg &amp;quot; ; | ls  &amp;quot;-la)&#039;&lt;br /&gt;
pop graphic-context&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и выполнив запрос на преобразование файла, аналогичный команде &lt;br /&gt;
&amp;lt;pre&amp;gt;$ convert exploit.mvg out.png&amp;lt;/pre&amp;gt;&lt;br /&gt;
атакующий получит список всех файлов директории.&lt;br /&gt;
&lt;br /&gt;
=Задания=&lt;br /&gt;
* http://easy.stands.secsem.msu.ru/&lt;br /&gt;
* http://type.stands.secsem.msu.ru/&lt;br /&gt;
* http://hand.stands.secsem.msu.ru/&lt;br /&gt;
&lt;br /&gt;
=Ссылки=&lt;br /&gt;
* [https://www.php.net/ https://www.php.net/] - сайт PHP&lt;br /&gt;
* [https://htmlacademy.ru/tutorial/php https://htmlacademy.ru/tutorial/php] - учебник PHP&lt;br /&gt;
* [http://www.php.su/php/?php http://www.php.su/php/?php] - ещё один учебник&lt;br /&gt;
* [https://www.alchemistowl.org/pocorgtfo/pocorgtfo15.pdf Полиглоты]&lt;br /&gt;
* [https://drive.google.com/file/d/1Rz0RP5tKIWCmFDP3-_--VYu40ejWf48v/view?usp=sharing Валидация структурных типов]&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Hex_print.png&amp;diff=306</id>
		<title>Файл:Hex print.png</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Hex_print.png&amp;diff=306"/>
		<updated>2020-10-12T11:29:40Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Mini.jpg&amp;diff=305</id>
		<title>Файл:Mini.jpg</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Mini.jpg&amp;diff=305"/>
		<updated>2020-10-12T11:29:27Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2020)&amp;diff=299</id>
		<title>Практикум на ЭВМ (2020)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2020)&amp;diff=299"/>
		<updated>2020-09-29T20:49:23Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по четвергам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом &amp;quot;Безопасность компьютерных систем&amp;quot;, который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара - т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2020/2021 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#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;
Большая часть заданий будет выполнена в формате 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;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2020)/Бонусное_задание|Бонусное задание]]&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;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
Семинар 1 (18 октября 2020) [[Веб-безопасность/Введение в веб-технологии]]&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;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2020)&amp;diff=298</id>
		<title>Практикум на ЭВМ (2020)</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2020)&amp;diff=298"/>
		<updated>2020-09-29T20:47:36Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: /* Материалы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&#039;&#039;&#039;Практикум на ЭВМ&#039;&#039;&#039; кафедры ИБ ВМК МГУ ведут сотрудники лаборатории интеллектуальных систем кибербезопасности для групп 319/1 и 319/2.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Когда&#039;&#039;&#039;: по четвергам, 12:50&lt;br /&gt;
* &#039;&#039;&#039;Где&#039;&#039;&#039;: аудитория 612&lt;br /&gt;
&lt;br /&gt;
Практикум связан с курсом &amp;quot;Безопасность компьютерных систем&amp;quot;, который читается для группы 319/2, и содержит практические задания по темам курса. Каждое занятие практикума имеет формат воркшопа/семинара - т.е. занятие будет практическим, на него надо приходить с ноутбуком, а также установленным софтом. Набор нужного для занятия софта объявляется отдельно перед занятием.&lt;br /&gt;
&lt;br /&gt;
Основные темы, которые будут затронуты в практикуме 2020/2021 учебного года:&lt;br /&gt;
* веб-безопасность&lt;br /&gt;
* реверс-инжиниринг и эксплуатация бинарных программ&lt;br /&gt;
* криптография&lt;br /&gt;
* сетевая безопасность&lt;br /&gt;
&lt;br /&gt;
Оценка за практикум будет определяться по результатам выполнения практических заданий. За каждое из заданий будут даваться баллы, сумма баллов и определит оценку. Задания будут делиться на обязательные и бонусные, баллы за все обязательные задания одной темы будут в сумме давать &#039;&#039;&#039;1000&#039;&#039;&#039;, таким образом, баллы за все обязательные задания одного семестра вместе дадут &#039;&#039;&#039;2000&#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;
Большая часть заданий будет выполнена в формате 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;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
* [[Практикум_на_ЭВМ_(2020)/Бонусное_задание|Бонусное задание]]&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;
=== Веб ===&lt;br /&gt;
&lt;br /&gt;
==== Семинар 1 (18 октября 2020) [[Веб-безопасность/Введение в веб-технологии]]&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;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
</feed>