Step 6 (S-7007)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/538/step/6

Step 6 (S-7007) 1.png

[00:00 - 00:16] для того чтобы проиллюстрировать как это работает на самом деле давайте разберем как работает уязвимость переполнение буфера да то есть которую часто используют хакера для того чтобы взломать сервер давайте проиллюстрируем это на следующем примере


[00:16 - 00:32] пусть у нас есть 3 функции внутри мы мы свою только функцию видно что нигде не вызывает то есть не предполагает что эта программа


[00:32 - 00:49] но мы постараемся произвести атаку на эту функцию на в нем суббот таким образом чтобы при выходе из этой функции вместо возвращения в вызвалась функция как мы это сделаем для этого мы воспользуемся


[00:49 - 01:07] что при вызове функции нас так складывается адрес возврат и попытаемся функции переписать этот адрес то изменить его каким то другим каким другим адресом функции то есть вместо того чтобы вернуться и продолжить выполнение функций нашей программы


Step 6 (S-7007) 2.png

Step 6 (S-7007) 3.png

[01:07 - 01:24] начать выполнять функцию для того чтобы это реализовать нам нужно попытаться обратиться к памяти который не принадлежит нашей функцию для этого используются следующие друг давайте определим массив размера 1


Step 6 (S-7007) 4.png

Step 6 (S-7007) 5.png

[01:24 - 01:39] я немножко забегая вперед потому что мы еще не поговорили по массивной рукояти на качественном уровне понятно что происходит мы создаем какой примерно размер 1 то есть


Step 6 (S-7007) 6.png

[01:39 - 01:55] которые соответствуют и обращаемся за границы этого массива данном случае мы обращаемся к 4 элементу то есть элемент с номером который находится где то выше поставь


Step 6 (S-7007) 7.png

Step 6 (S-7007) 8.png

[01:55 - 02:11] и я так подобрал то число 3 что именно на 3 ячейки выше находится адрес возврата в зависимости от вашего компьютера от наших персону системы компилятора тут могут быть


Step 6 (S-7007) 9.png

[02:11 - 02:30] разные честно то есть если хотите повторить это совет вам придется выбирать немножко но если будет мальчик соответственно что произойдет я обращусь к этой ничего не которой принадлежит и ответчика будет соответствовать адресовать и запишу сюда вместо


Step 6 (S-7007) 10.png

[02:30 - 02:46] адреса внутри фукусимы запишу туда адрес функции ф от это выражение соответствует адресу функционал соответственно когда функция закончил работу


Step 6 (S-7007) 11.png

[02:46 - 03:02] управление передастся не функции а функция давайте проверим что это действительно работает мы берем программу и допустим


Step 6 (S-7007) 12.png

[03:02 - 03:21] как мы видим программа выдала слушал слушал соответствует запуска функции foo с 1 стороны и не предполагала что функция вызывается в этой программе с другой стороны мы заставили эту программу вызвать эту функцию


Step 6 (S-7007) 13.png

[03:21 - 03:36] заметим также что программа закончила выполнение с ошибкой это происходит из за того что мы нарушили логику выполнению программы мы немножко подпортили есть так но тем не мене мы добились своей цели


Step 6 (S-7007) 14.png

Step 6 (S-7007) 15.png

[03:36 - 03:55] запустили необходимо францию на практике если вы хотите сделать что то плохое или ты хочешь сделать что то плохое то конечно него нету доступа к исходному коду он может поменять но тем не менее он может при помощи 200 инжиниринга или при помощи доступа


[03:55 - 04:11] к исходным кодом есть это открытое программное обеспечение узнать что например в каком то месте не проверяются границы массива и посмотреть а каким образом это место выпадающих данные


[04:11 - 04:28] и соответственно формировать некоторые например запрос который бы приводил к тому что в массив меньшего размера записывается строчка большего размера при этом в этом запросе писать на форуме ровно


[04:28 - 04:47] за границей массива лежали бы какие то специальные камни которые как раз перепишут адрес возврата и приеду к тому что сервера сделает что то не то что именно поэтому очень важно при написании программ всегда проверять что вы не выкупаете за границы массива


Step 6 (S-7007) 16.png

Step 6 (S-7007) 17.png

[04:47 - 04:49] * Audio is not recognized *