SEOSERVISE - Защита информации.

 
   
 

Главная


 


Результаты поиска показали, что в качестве смещения используется значение Ох0040336е. Вместо добавления строки abed нужно добавить адрес инструкции call esi . На забывайте, что терминальный символ NULL содержится в последнем байте. Вместо передачи символа х необходимо отправить последовательность пустых инструкций ( NOOP ), в которую внедрена строка int 3. Для этого следует запустить программу Softlce и для установки точки прерывания ввести команду bpint 3. Теперь эту последователь­ность команд нужно выполнить в системе. perl - e ' В результате выполнения этой команды было отправлено 1399 пустых инструкций ( NOOP ), а после них — код инструкции СС, который транслируется в int 3. Это приво­ дит к изменению адреса возврата и выполнению инструкции call esi . Если придер­ живаться плана, то отладчик сможет отследить вызов прерывания. Теперь в нашем • распоряжении имеется код, выполняющийся в контексте удаленного процесса. Очевидно, что в реальности код, состоящий из пустых инструкций вызова преры­вания, не представляет особой ценности. Так что воспользуемся кое-чем более полез­ ным и посмотрим, что из этого получится. (На Web -узле http :// www . deepzone . org , который поддерживается Изэном. мож­ но найти удобное средство генерации кода привязки к портам для платформы Win32.) Для генератора требуются адреса двух функций — LoadLibraryA и GetProcAddress , используемых в исполняемых файлах или библиотеках DLL . Для получения этих ад­ ресов можно воспользоваться дизассемблером или средством типа DUMPBIN . Место­ положение этих двух функций показано на рис. 14.4. Двумя требующимися смещениями являются 00406068 и 004060а8. Для динамиче­ ского получения адресов других функций в сгенерированном коде используется две функции. Генератор позволяет сгенерировать код в формате ASM , С, Perl и Java . В системе нужно использовать такую последовательность байтов: 0x90 * 1400 —(год) <код> <адрес возврата Когда сервер получает эту строку, сохраненный при вызове функции crash () адрес возврата замещается адресом, который указывает на инструкцию call esi . Регистр ESI указывает на последовательность пустых инструкций, после которых следует код при­ вязки к порту. После возврата из функции переход выполняется не к той инструкции, к которой необходимо, а к инструкции call esi , при вызове которой будет выполнен нужный код. К сожалению, существует небольшая проблема. Байтов, контролируемых в ESI , не­ достаточно для размещения всего кода, сгенерированного с использованием узла deepzone . Еще раз прибегнем к дизассемблированию. Видно, что адрес Ox 004098 fc по­ мещается в стек перед вызовом функции recv (). По этому адресу содержатся полу­ ченные байты. Если в исходную строку добавить переход по этому адресу, то мы по­ падем точно в цель.

 

 

 

 

 

 
 

1 |2 |3 |4 |5 |6 |7 |8 |9 |10 |11 |12 |13 |14 |15 |16 |17 |18 |19 |20 |21 |22 |23 |24 |25 |26 |27 |28 |29 |30 |31 |32 |33 |34 |35 |36 |37 |38 |39 |40 |41 |42 |43 |44 |45 |46 |47 |48 |49 |50 |51 |52 |53 |54 |55 |56 |57 |58 |59 |60 |61 |62 |63 |64 |65 |66 |67 |68 |69 |70 |71 |72 |73 |74 |75 |76 |77 |78 |79 |80 |81 |82 |83 |84 |85 |86 |87 |88 |89 |90 |91 |92 |93 |94 |95 |96 |97 |98 |99 |100 |