通过执行mount命令在Android中注入命令

通过执行mount命令在Android中注入命令,android,Android,我正在尝试执行此代码 Process process = new ProcessBuilder().command("mount").start(); process.waitFor(); 找出sd卡的位置,然后检查它是否由vold管理,文件系统是否为vfat 我的问题是,无论如何,这段代码是否可以被压缩,并成为Android中命令注入的候选 我这边有几点 它不是用户输入,因此在这种情况下不会有命令注入。整个安卓操作系统环境是否可以改变,从而导致mount命令被滥用 干

我正在尝试执行此代码

    Process process = new ProcessBuilder().command("mount").start();
        process.waitFor();
找出sd卡的位置,然后检查它是否由vold管理,文件系统是否为vfat

我的问题是,无论如何,这段代码是否可以被压缩,并成为Android中命令注入的候选

我这边有几点

它不是用户输入,因此在这种情况下不会有命令注入。整个安卓操作系统环境是否可以改变,从而导致mount命令被滥用

干杯, 索拉夫


好的…目前我正在读取/proc/mounts以替换mount命令

是这样做的好方法

此解决方案的参考资料

代码如下

reader = new BufferedReader(new FileReader("/proc/mounts"));
        String line;
        while ((line = reader.readLine()) != null) {
            // Output the line of output from the mount command
            logger.debug("   {}", line);

            if (line.startsWith("/dev/block/vold/")) {
如果这是正确的方法并且没有任何安全问题,任何人都可以

干杯,
Saurav

正如你所说,只要你没有任何用户输入,你就不会受到这种注射的影响

您可能遇到麻烦的唯一情况是,装载二进制文件已被某个恶意二进制文件替换。要遇到这种情况,用户必须在设备上设置根目录,并用自定义ROM替换操作系统


我认为您可以假定mount命令应该正常运行。

感谢synapticvoid的响应。在这种情况下,我可以以某种方式防止这种情况发生,或者提供装载二进制文件的实际路径吗?不,你不能阻止它,它完全取决于用户。如果完整路径存在风险,某些设备可能会将其置于/system/xbin或/system/bin甚至system/sbin中。您只能假设二进制文件存在并且工作正常!那不是真的。您可以显式指定路径,但必须确保它在那里。这可以通过提供你自己的来实现。但是,当没有理由运行外部命令时,这样做是毫无意义的-mount命令的查询表单执行的相同操作可以在应用程序进程中执行。我从来没有说过不可能提供路径,我只是简单地指出了这样一个事实:这是有风险的,因为二进制可能不存在,这取决于设备制造商!无论如何,这是一种低劣的方法;您应该简单地将/proc/mounts作为文本文件读取,并避免产生子进程-通常最好避免这种情况,因为它是一个相当重的操作,通常不适合Android的进程管理和总体设计理念。感谢Chris的回复。这是最好的解决方案吗?