Files
2025-09-25 03:56:33 +08:00

42 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 提权时选择可读写目录,为何尽量不用带空格的目录
**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` 等,可以省去考虑引号包裹的麻烦,确保命令能够一次性成功执行,提高效率