2009-09-28 66 views
0

我有一项任务要求我'打破'一段易受攻击的代码。片段:printf在cygwin中执行.exe文件

int main(int argc, char **argv) 
{ 

/*...*/ 

    while(i < argc-1) 
    { 
    switch(argv[i][0]-48) 
    { 
     case 1: 
     SmashHeap(argc,argv); 
    break; 
/*...*/ 
     case 8: 
     PrintfVulnerability(argv[++i]); 
    break; 
    default: 
     printf("%s is not recognized by this program",argv[i++]); 
/*...*/ 
    } 
    i++; 
    } 
    return (1); 
} 

void PrintfVulnerability(char *F) 
{ 
    printf(F); 
} 

最后,我发现它是如此令人惊讶的简单,我怕我会得到差了一个档次......我的解决办法:

  • copypasta可执行到主目录...我用freecell.exe
  • $ ./VulnerableCode 8 `freecell.exe`

!我在玩freecell。为什么这个工作?

+0

sry,我没有注意到格式化从我的命令行反引号。请在命令行上用适当的符号 – rusl 2009-09-28 13:29:26

回答

3

编辑:啊,我看到你的编辑。不幸的是,这些反引号解释了很多,在bash中(cygwin的默认shell),反引号指示shell将该字符串作为shell命令执行。所以你所做的就是告诉shell运行freecell。只是传递freecell.exe不加引号,这实际上是将字符串传递给程序。

虽然,你应该看看我贴在下面的段落中的链接,因为它可能给你的一个想法剥削你可以在运行的情况下8

老答: 我因为我没有看到你的命令行可能会导致freecell.exe被启动(顺便说一句,“freecell.exe”也会得到一个更深入的答案给那些有更好的Windows体系结构知识的人打印到控制台?)。然而,在高级别情况8容易受到Format string attacks的影响,它可以利用这样一个事实,即print假定第一个参数是一个格式字符串,它指示了{它是否有参数,参数类型}。这可以用于各种攻击,具体取决于你传递的缓冲区。再一次,我不明白它会如何导致您的案例启动一个过程。

+0

编辑格式替换[backtick],请参阅上面的注释 – rusl 2009-09-28 13:30:10

+0

对,所以您仍然有一些工作要做。如果你不能想出一个方法来利用这个,请考虑在程序中发布其他潜在的漏洞,也许SO上的某个人可以帮助你在正确的方向推动你。 – Falaina 2009-09-28 13:42:48

+0

welll nutbunnies。回到绘图板。谢谢您的帮助! – rusl 2009-09-28 14:02:20

0

您是使用cygwin还是其他bash变体?

我问,因为在命令开始时的$样子的bash,命令:

./VulnerableCode 8 [反引号] freecell.exe [反引号]

看起来像bash的语法反引号。

如果是这样,很容易解释:bash作为单独的命令在反引号之间执行命令,并将生成的stdout文本放入要传递给VulnerableCode命令的命令中。

你的代码从来没有看到文本“freecell.exe”只是它的输出。所以,这不是你提供的代码中的一个漏洞,只是一种在bash中串联命令的方式。

+0

哎呀,在发送我的邮件之前没有看到James的评论。对不起。 – pxb 2009-09-28 14:34:27

0

在Unix/Linux环境中,反引号用于在反引号内运行命令并将该命令的输出提供给上述命令。因此,ls [backtick]echo .[backtick]将会是当前目录。

你的命令,在cygwin中,因此运行freecell.exe并且正在等待freecell完成以提供freecell的输出给VulnerableCode。