[英]How can I perform a “printf string attack” using a buffer overflow?
代碼:
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
為根運行。
我知道如何用fe
破解程序。 緩沖區溢出和strcpy
(shellcode),但是如何在這一個上使用'format string attack'。
正如你所看到的,有一個var the_var
,如果它不等於50那么shell正在運行(也許試着以某種方式改變它,一些骯臟的魔法?)。 無論如何,有一個printf (buf)
你控制buf
。 傳遞%x
格式字符串以轉儲堆棧,並傳遞%x
%n
以覆蓋堆棧中的對象the_var
。 從你的程序,如果對象the_var
被覆蓋時, doit
函數將被調用, /bin/sh
將被執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.