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

 
   
 

Главная


 


Переполнение буфера Для начала следует ознакомиться с некоторыми полезными средствами и получить немного дополнительной информации. Чтобы понять материал этой главы, необхо­ димо обладать хотя бы минимальными знаниями в следующих областях: язык ассемблера для процессоров х86; язык программирования С; основы отладки программ. Кроме того, для получения максимальной пользы от рассматриваемого материала и лучшего усвоения приведенных примеров необходимо ознакомиться с рядом про­граммных продуктов. ¦ Softlcc от Compuware (http://www.coBpuware.co»). • VisuaK ' I i от компании Microsoft (или любой другой компилятор C++) ( http :// www . microsoft . com / vstudio ), • Interactive Dissassembler Pro от KOMnammDataRescue (http://www.datarescue.com). • Netcat от хакера Хоббита (Hobbit) (http://packet8toni.deception8.org/unix- exploits/network-scanners/). Perl от компании ActiveState ( http :// www . activestate . com ). • W 32 Dasm от компании U RSoftware Co . ( http :// Bembers . home . net / w 32 dasB /). Простейшее переполнение буфера Переполнение буфера происходит в том случае, когда размер записываемых дан­ ных превышает объем памяти, зарезервированный для выполнения этой операции. При этом данные записываются в область памяти, находящуюся за пределами заре­ зервированного участка. Можно поспорить, что они наверняка попадут далеко не в самое лучшее место. Рассмотрим следующий фрагмент кода: void overflow ! void ) char •nane-'haclcingexposedhacliingexpoBedhackingexposed" ; char buf?[10]j strcpy(buff, name); return; Для хранения переменной buff выделяется 10 байт ( char buff [10]). Затем строка, адрес которой содержится в указателе * name , копируется в буфер ( buff [10]). Посколь­ ку длина строки по адресу *паяе гораздо больше размера буфера, используемого для ее обработки, в памяти возникнет переполнение данных. Где же размешаются дополни­ тельные символы и как их можно использовать? Перед тем как отправиться дальше, рассмотрим еще несколько фундаментальных принципов. Краткие сведения о языке ассемблера Ассемблер — язык низкого уровня, написанный с учетом архитектуры определен­ ного центрального процессора. Существуют многочисленные разновидности этого языка, наиболее популярными из которых являются Intel 80x86, SPARC , RISC и

 

 

 

 

 

 
 

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 |