shellcoder
12.09.2016, 21:03
Здравствуйте, прохожу серию exploitme из Gera secure programming.
И на 4 задании застрял.
вот код.
Code:
/* stack4-stdin.c *
* specially crafted to feed your brain by gera */
#include
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
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 стала равна нужному значению.
И на 4 задании застрял.
вот код.
Code:
/* stack4-stdin.c *
* specially crafted to feed your brain by gera */
#include
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
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 стала равна нужному значению.