Эксплойт переполнения буфера, перезаписывающий параметры функции, включая обратный адрес

Предположим, у нас есть функция

foo(char *name,int id)
{  
 printf ("%s%d",name,id);
}

Используя переполнение буфера, мы заменяем адрес возврата в стеке адресом функции foo. Я смог добиться этого.

Как мне переполнить аргументы функции? foo принимает два аргумента, может кто-нибудь помочь мне понять, как я могу переполнить эти аргументы, используя переполнение буфера.


person Krishna Nandula    schedule 13.03.2013    source источник
comment
Почему вы хотите перезаписать аргументы? Обычно вы просто перезаписываете обратный адрес и адресуете некоторые инструкции, которые приводят к переходу к вашему шеллкоду.   -  person Gumbo    schedule 13.03.2013
comment
да, вы правы, но моя цель не в том, чтобы перейти к шелл-коду. Скорее посмотрите, возможно ли перезаписать аргументы функции в стеке.   -  person Krishna Nandula    schedule 14.03.2013
comment
чтобы быть более ясным, когда вызывается функция, могу ли я указать свои собственные параметры для этой функции?   -  person Krishna Nandula    schedule 14.03.2013


Ответы (1)


Теоретически да, аргументы помещаются в стек при вызове функции, но затем успешная перезапись зависит от структуры стека. Кроме того, исходя из вашей цели, вы должны сделать это таким образом, чтобы не повредить промежуточные данные.

Приведенный выше код имеет еще одну уязвимость, подумайте об этом.

person 5yntAx3rrR    schedule 22.03.2013
comment
Да, у него есть уязвимость строки формата. Я хотел бы научиться перезаписывать макет стека. | Я пробовал ниже input , но столкнулся с ошибками сегментации... Длина строкового буфера + EBP + Адрес возврата + Arg1 + Arg2 - person Krishna Nandula; 25.03.2013