Use it if your friend has sent you a .com file, where you need to enter password
{username} — ваш ник на ГитХабе; {repository} — репозиторий где хранятся картинки; {branch} — ветка репозитория; {path} — путь к месту нахождения картинки.
Хорошо, что в DOS'е доступен встроенный дебаггер, позволяющий не только выполнить .com файл по шагам, но и увидеть команды в дизасемблированном виде, а так же локализацию в памяти секции data.
Ход исследования полученного .com файла:
-
После запуска программа просит ввести пароль, при этом требуемое кол-во символов не указано. Т.к. введенные даные запишутся в отведенный для этого буфер, имеет смысл при рассмотрениии программы в дебаггере ввести пароль в один символ, чтобы не затереть какую-то информацию, лежающую сразу после буфера.
-
В дизассемблированном коде файла встречается строка сравнения значения регистра dx с содержимым двух байт по адресу [01B4].
-
TurboDebugger DOS позволяет просмотреть данные по этому адресу, предположительно, это хеш правильного пароля. Уязвимость найдена! Буфер для введенного пароля расположен сразу перед ячейками с хешом => можно переписать их хешом, который совпадет с нашим паролем.
Note: считывание пароля из консоли выполняется при помощи функции 0ah 21-го прерывания DOS, которая позволяет считать кол-во символов, определенное первым байтом буфера для пароля. Уязвимость программы состоит как раз в "неверно" указанном количечестве символом для считывания, которое позволяет перезаписать ячейки, не принадлежащие буферу для пароля. Note: для ввода пароля не обязтельно использовать консоль, можно писать данные в файл и перенапрявлять ввод из консоли. Строка должна заканчиваться терминальным символом 0D.