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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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






 
 
| Добавить в избранное | Сделать стартовой 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