文件上传的一个骚操作(低权限+bypassAV)
字数 1143 2025-08-10 08:28:40

Windows低权限环境下文件上传与AV绕过技术详解

技术背景

在渗透测试过程中,经常会遇到以下场景:

  • 获得低权限命令shell(如MSSQL、PostgreSQL等)
  • 需要下载文件但遭遇权限限制或杀毒软件拦截
  • 传统下载方法(bitsadmin、certutil、powershell等)被安全产品阻断

传统方法的问题

  1. 常见下载命令被拦截

    • bitsadmin
    • certutil远程下载
    • powershell下载
    • 某管家等安全软件会彻底拦截并显示明显警告
  2. 直接写入webshell的限制

    • 可能被WAF或杀软检测
    • 某狗等安全产品会拦截恶意脚本

核心解决方案:Certutil编码/解码技术

基本原理

利用Windows自带的certutil工具进行文件编码和解码操作,绕过安全产品的检测。

详细操作步骤

  1. 本地编码阶段

    Certutil -encode 源文件.txt 目标文件.exe
    

    或指定完整路径:

    Certutil -encode d:\source.txt d:\target.exe
    
  2. 目标服务器写入阶段

    • 将编码后的文本内容通过echo命令逐行写入目标服务器:
    echo 编码内容>>d:\encoded.txt
    
    • 注意:数据库客户端(如Navicat)可能有128字符的长度限制
  3. 服务器端解码阶段

    Certutil -decode encoded.txt final.exe
    

    或指定完整路径:

    Certutil -decode d:\encoded.txt d:\final.exe
    
  4. 执行阶段

    cmd.exe /c final.exe
    

技术优势

  1. 绕过检测

    • 编码/解码操作不会触发杀软拦截
    • 文本形式的传输不易被识别为恶意行为
  2. 通用性强

    • 支持多种文件类型:exe、aspx、php、jsp等
    • 可用于上传免杀webshell(如哥斯拉)
  3. 格式容错

    • 编码文本中的换行符不影响最终解码结果
    • 可以手动拆分长文本以适应echo命令限制

实战注意事项

  1. 长度限制解决方案

    • 减小payload体积(如使用精简的C2马,约50KB)
    • sqlmap的--os-shell比Navicat的echo命令限制更宽松
  2. 验证写入完整性

    • 对于webshell,可通过浏览器访问查看是否写入成功
    • 检查文件大小与原始文件是否一致
  3. 替代方案

    • 利用MSSQL的OLE特性直接写入文件
    • 将cmd.exe复制到其他位置可能绕过某些限制

已知问题与解决方案

  1. Win10兼容性问题

    • 某些情况下解码后可能出现"16位版本不兼容"错误
    • 解决方案:确保源文件与目标系统架构匹配
  2. 杀软对抗

    • 火绒等可能拦截certutil操作
    • 诺顿可能杀解码后的文件
    • 解决方案:结合其他免杀技术

总结

这种基于certutil编码/解码的文件上传方法在低权限环境下具有显著优势:

  • 利用系统自带工具,无需额外依赖
  • 绕过大多数安全产品的检测机制
  • 适用于多种文件类型上传场景
  • 在命令长度限制下仍可实施

该方法特别适合以下场景:

  • 数据库注入获得的os-shell
  • 受限的命令执行环境
  • 需要隐蔽上传payload的情况

通过合理拆分payload和分段写入,即使面对严格的字符限制也能成功实施文件上传,为后续渗透测试提供有力支持。

Windows低权限环境下文件上传与AV绕过技术详解 技术背景 在渗透测试过程中,经常会遇到以下场景: 获得低权限命令shell(如MSSQL、PostgreSQL等) 需要下载文件但遭遇权限限制或杀毒软件拦截 传统下载方法(bitsadmin、certutil、powershell等)被安全产品阻断 传统方法的问题 常见下载命令被拦截 : bitsadmin certutil远程下载 powershell下载 某管家等安全软件会彻底拦截并显示明显警告 直接写入webshell的限制 : 可能被WAF或杀软检测 某狗等安全产品会拦截恶意脚本 核心解决方案:Certutil编码/解码技术 基本原理 利用Windows自带的certutil工具进行文件编码和解码操作,绕过安全产品的检测。 详细操作步骤 本地编码阶段 : 或指定完整路径: 目标服务器写入阶段 : 将编码后的文本内容通过echo命令逐行写入目标服务器: 注意:数据库客户端(如Navicat)可能有128字符的长度限制 服务器端解码阶段 : 或指定完整路径: 执行阶段 : 技术优势 绕过检测 : 编码/解码操作不会触发杀软拦截 文本形式的传输不易被识别为恶意行为 通用性强 : 支持多种文件类型:exe、aspx、php、jsp等 可用于上传免杀webshell(如哥斯拉) 格式容错 : 编码文本中的换行符不影响最终解码结果 可以手动拆分长文本以适应echo命令限制 实战注意事项 长度限制解决方案 : 减小payload体积(如使用精简的C2马,约50KB) sqlmap的--os-shell比Navicat的echo命令限制更宽松 验证写入完整性 : 对于webshell,可通过浏览器访问查看是否写入成功 检查文件大小与原始文件是否一致 替代方案 : 利用MSSQL的OLE特性直接写入文件 将cmd.exe复制到其他位置可能绕过某些限制 已知问题与解决方案 Win10兼容性问题 : 某些情况下解码后可能出现"16位版本不兼容"错误 解决方案:确保源文件与目标系统架构匹配 杀软对抗 : 火绒等可能拦截certutil操作 诺顿可能杀解码后的文件 解决方案:结合其他免杀技术 总结 这种基于certutil编码/解码的文件上传方法在低权限环境下具有显著优势: 利用系统自带工具,无需额外依赖 绕过大多数安全产品的检测机制 适用于多种文件类型上传场景 在命令长度限制下仍可实施 该方法特别适合以下场景: 数据库注入获得的os-shell 受限的命令执行环境 需要隐蔽上传payload的情况 通过合理拆分payload和分段写入,即使面对严格的字符限制也能成功实施文件上传,为后续渗透测试提供有力支持。