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

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 等,可以省去考虑引号包裹的麻烦,确保命令能够一次性成功执行,提高效率
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 03:12:58

results matching ""

    No results matching ""