【问题标题】:A C program to crash the system使系统崩溃的 C 程序
【发布时间】:2011-10-03 05:46:02
【问题描述】:

几天前我接受了一次面试,我被要求用 C 语言编写一个程序,该程序会导致系统崩溃/关闭系统。不用说,我什至不知道如何接近,我感到很愚蠢:(

我还是尝试了一下,编写了占用大量内存的程序。但是我的面试官对我的任何技巧都不满意。

【问题讨论】:

  • void main(void) { system("shutdown -s"); } 小心那个斜线。
  • 哪个平台(操作系统)?您是以 root 或管理员身份运行程序,还是以您自己的身份运行程序?
  • 那家公司从事崩溃系统业务吗?
  • 感谢各位的回答。 @MichaelPetrotta:嘿,有没有在不使用系统调用的情况下做同样的事情?
  • 一个正常的操作系统会在允许用户空间程序杀死它之前杀死用户空间程序。对于 kernel-space -- 以及与此类或与 hardware 的任何交互 -- 所有赌注都已关闭。当然,只要好好问操作系统,然后...

标签: c


【解决方案1】:

编写调用未定义或实现定义的行为的程序很容易。其中一些程序可能会使系统崩溃。

但根据定义,这是不一致的。现代操作系统会竭尽全力(尽管不是 100% 成功)来防止恶意应用程序使系统崩溃。

【讨论】:

  • 感谢您的回复。您所说的“未定义或实现定义的行为”是什么意思?你能解释一下吗?
  • @Venugopal,见this question
【解决方案2】:

没有可移植的方法来编写导致系统崩溃的 C 程序。

fork bomb 可能会也可能不会阻塞系统。当然fork 是不可移植的——系统可以通过限制给定帐户可以创建的进程数量来保护自己免受此类攻击。

当然总是这样:

#include <stdio.h>
int main(void) {
    puts("HEY YOU, PULL THE PLUG!!");
    return 0;
}

【讨论】:

    【解决方案3】:

    我会尝试向/dev/kmem 写垃圾邮件。很有可能会导致无法恢复的系统崩溃。

    【讨论】:

    • 普通用户也很有可能无法写信给/dev/kmem;实际上,如果成功(作为普通用户),系统的设置确实非常糟糕。作为 root,所有的赌注都没有了:dd if=/dev/random of=/dev/kmem 可能会做得很好。
    【解决方案4】:

    嗯,你试过关注吗?

    void main(void) {
        system("shutdown -P 0");
    }
    

    要在 Linux 上执行此程序,您必须以 root 登录。

    【讨论】:

      【解决方案5】:

      一种方法是利用当前系统的“特权升级”漏洞。

      根据当前配置,您可以搜索影响系统的漏洞。例如。基于内核版本。然后将权限提升到root。

      一旦进程是“root”,它可以通过各种方式关闭系统。将 SIGPWR 发送到“init”进程是一种干净的方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-30
        • 2011-05-26
        • 2019-10-31
        • 1970-01-01
        • 2014-12-16
        • 1970-01-01
        相关资源
        最近更新 更多