Здравствуйте, прохожу серию exploitme из Gera secure programming. И на 4 задании застрял. вот код. Code: /* stack4-stdin.c * * specially crafted to feed your brain by gera */ #include <stdio.h> int main() { int cookie; char buf[80]; printf("buf: %08x cookie: %08x\n", &buf, &cookie); gets(buf); if (cookie == 0x000d0a00) printf("you win!\n"); } первые 3 задания решил более менее быстро. используя как вспомогательный инструмент Python. а на 4 задании уже не помогает вот этот код для эксплуатации. Code: python -c 'print "A"*80 + "\x00\x0d\x0a\x00"[::-1]' | ./vulnerable в следующем задании в 5 код не чуть не меняется...! Code: /* stack5-stdin.c * * specially crafted to feed your brain by gera */ #include <stdio.h> int main() { int cookie; char buf[80]; printf("buf: %08x cookie: %08x\n", &buf, &cookie); gets(buf); if (cookie == 0x000d0a00) printf("you loose!\n"); } Меняется только строчка печати... Вообще решил погуглить про нулевые байты. попал на securitylab на одну статью. От туда выяснил, что это плохие байты и вообще плохое значение 0x000d0a00 по мимо нулевых байтов есть еще символ \n и \t. Собственно теперь вопрос. Я так понимаю автором этих заданий было так задумано, чтоб человек который будет решать эти exploitme понял, что такое значение не удастся передать перменной? Я правильно понимаю, что этот код нельзя заэкслуатировать? не тупо буфер переполнить и шеллкод вставить. А именно чтоб переменная cookie стала равна нужному значению.
Первая выдача в гугле https://oneaboperweek.wordpress.com/2010/04/19/solution-to-stack4-c/ А вообще, нуль-байт (\0), \n, \t это вполне обычные значения: при работе с массивом как с Си-строкой \0 является признаком конца строки. \n перенос строки, \t табуляция