文件上传的一个骚操作(低权限+bypassAV)
字数 1143 2025-08-10 08:28:40
Windows低权限环境下文件上传与AV绕过技术详解
技术背景
在渗透测试过程中,经常会遇到以下场景:
- 获得低权限命令shell(如MSSQL、PostgreSQL等)
- 需要下载文件但遭遇权限限制或杀毒软件拦截
- 传统下载方法(bitsadmin、certutil、powershell等)被安全产品阻断
传统方法的问题
-
常见下载命令被拦截:
- bitsadmin
- certutil远程下载
- powershell下载
- 某管家等安全软件会彻底拦截并显示明显警告
-
直接写入webshell的限制:
- 可能被WAF或杀软检测
- 某狗等安全产品会拦截恶意脚本
核心解决方案:Certutil编码/解码技术
基本原理
利用Windows自带的certutil工具进行文件编码和解码操作,绕过安全产品的检测。
详细操作步骤
-
本地编码阶段:
Certutil -encode 源文件.txt 目标文件.exe或指定完整路径:
Certutil -encode d:\source.txt d:\target.exe -
目标服务器写入阶段:
- 将编码后的文本内容通过echo命令逐行写入目标服务器:
echo 编码内容>>d:\encoded.txt- 注意:数据库客户端(如Navicat)可能有128字符的长度限制
-
服务器端解码阶段:
Certutil -decode encoded.txt final.exe或指定完整路径:
Certutil -decode d:\encoded.txt d:\final.exe -
执行阶段:
cmd.exe /c final.exe
技术优势
-
绕过检测:
- 编码/解码操作不会触发杀软拦截
- 文本形式的传输不易被识别为恶意行为
-
通用性强:
- 支持多种文件类型: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和分段写入,即使面对严格的字符限制也能成功实施文件上传,为后续渗透测试提供有力支持。