Код:
void doit()
{
system("/bin/sh");
exit(0);
}
int main(int argc, char **argv)
{
static int the_var;
char buf[512];
the_var = 20;
strncpy (buf, argv[1], sizeof(buf) - 1);
printf (buf);
if (the_var != 20)
{
doit();
} else {
printf ("\nthe_var @ 0x%08x = %d 0x%08x\n", &the_var, the_var, the_var);
}
}
Программа работает с липким битом (uid владельца 0), все, что мне нужно сделать, это взломать его и запустить /bin/sh
от имени пользователя root.
Я знаю, как взломать программу с помощью fe
. переполнение буфера и strcpy
(шеллкод), но не знаете, как использовать "атаку на строку формата" в этом случае.
Как видите, есть var the_var
, если оно не равно 50, то шелл работает (может попробовать как-то изменить, какая-то грязная магия?). В любом случае есть printf (buf)