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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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






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





Уязвимая программа

Вы можете использовать ошибку в форматировании для атаки различными способами. В статье Bouchareine's (Format string vulnerability) показывается, как перезаписать адрес возврата функции, поэтому мы покажем кое-что другое.
/* vuln.c */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int helloWorld();
int accessForbidden();

int vuln(const char *format)
{
  char buffer[128];
  int (*ptrf)();

  memset(buffer, 0, sizeof(buffer));

  printf("helloWorld() = %p\n", helloWorld);
  printf("accessForbidden() = %p\n\n", accessForbidden);

  ptrf = helloWorld;
  printf("before : ptrf() = %p (%p)\n", ptrf, &ptrf);

  snprintf(buffer, sizeof buffer, format);
  printf("buffer = [%s] (%d)\n", buffer, strlen(buffer));

  printf("after : ptrf() = %p (%p)\n", ptrf, &ptrf);

  return ptrf();
}

int main(int argc, char **argv) {
  int i;
  if (argc <= 1) {
    fprintf(stderr, "Usage: %s <buffer>\n", argv[0]);
    exit(-1);
  }
  for(i=0;i<argc;i++)
    printf("%d %p\n",i,argv[i]);

  exit(vuln(argv[1]));
}

int helloWorld()
{
  printf("Welcome in \"helloWorld\"\n");
  fflush(stdout);
  return 0;
}

int accessForbidden()
{
  printf("You shouldn't be here \"accesForbidden\"\n");
  fflush(stdout);
  return 0;
}

Мы определяем переменную с именем ptrf, которая указывает на функцию. Мы изменим значение этого указателя, чтобы запустить выбраную нами функцию.

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



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





Copyright © 2005-2016 Project.Net.Ru