### 提权时选择可读写目录，为何尽量不用带空格的目录

1. 命令行解析问题

在 Linux、Windows 等操作系统的命令行环境中，空格被视为命令、参数和选项的分隔符

例如，你想将一个文件写入 `/tmp/my file/` 目录：

- 错误的做法：`echo "hello" > /tmp/my file/test.txt`
  - 命令行会将其解释为：
    - 命令：`echo "hello"`
    - 参数：`>`
    - 参数：`/tmp/my`
    - 参数：`file/test.txt`
  - 显然，这会导致命令执行失败，因为 `/tmp/my` 目录不存在
- 正确的做法：为了让命令行将带空格的路径看作一个整体，需要用引号将路径包裹起来
  - `echo "hello" > "/tmp/my file/test.txt"`
  - `echo "hello" > /tmp/"my file"/test.txt`
  - `echo "hello" > /tmp/my\ file/test.txt`

2. 脚本和编程语言的兼容性

在进行提权时，我们通常不是手动输入命令，而是通过 Webshell 或漏洞执行脚本来完成操作。这些脚本（如 PHP、Python、Bash）在执行系统命令时，如果对带有空格的路径处理不当，就会导致提权失败

- Bash 脚本：如果脚本中的变量没有用引号包裹，那么当变量值包含空格时，会引发解析错误
  - 错误示例：`path=$webshell_path; cp /tmp/shell $path/shell.php`
  - 正确示例：`path="$webshell_path"; cp /tmp/shell "$path/shell.php"`
- PHP `system()` 或 `exec()` 函数：
  - 错误示例：`system('cp /tmp/shell ' . $webshell_dir . '/shell.php');`
    - 如果 `$webshell_dir` 的值是 `/var/www/my site`，PHP 会执行 `cp /tmp/shell /var/www/my site/shell.php`，这会失败
  - 正确示例：`system('cp /tmp/shell "' . $webshell_dir . '/shell.php"');`
    - 加上双引号后，命令会正确执行

3. 避免不必要的复杂性

在渗透测试的实战环境中，时间非常宝贵。为了快速、稳定地完成提权，我们会尽量选择最可靠的方法

- 绕过引号限制：在某些情况下，Webshell 或命令执行漏洞可能对引号（`"` 或 `'`）进行了过滤或转义，这会使得正确处理带有空格的路径变得更加困难
- 减少出错概率：选择一个不带空格的目录，例如 `/tmp`、`/var/tmp`、`/dev/shm` 等，可以省去考虑引号包裹的麻烦，确保命令能够一次性成功执行，提高效率