雷石|yonyouNC命令执行Bypass测试分享
2023-7-7 11:42:11 Author: 雷石安全实验室(查看原文) 阅读量:36 收藏

前言

在渗透和攻防中,多次遇到用友NC系统。一直以来都是用别人的工具,自己从来没分析研究过用友的源码和利用,遇到一些场景或需要利用漏洞执行命令时踩了很多坑。最近便通过灰盒测试简单分析了下NC6的命令执行,并尝试bypass。
测试环境:win server+NC6.3,win server+NC6.5

01.

NC6.3

首先是用友NC6.3,无论是bsh.servlet.BshServlet命令执行还是反序列化执行系统命令,都会遇到dir、echo命令执行失败。通过监控进程,发现未调用cmd,猜测是被过滤。

当命令执行成功时,会调用系统cmd执行。

通过测试,发现加上cmd/c能够成功调用cmd并执行

尝试echo命令写入文件,也没有问题,完全正常写入exec("cmd /c echo ccc > nc63.txt");

NC6.5

02.

在NC6.5中,发现在NC6.3中的方法已不再适用。增加了转义,特殊符号全部失效。例如通过echo写入需要用到的“>” ,会被双引号转义成字符串而非命令。
被转义:可以看到 cmd和特殊字符都被添加了双引号包裹

失败尝试:

尝试Bypass:
首先是执行无参数的命令,观察发现上面使用cmd /c 时,cmd被加了双引号,但还是成功调用cmd命令。
1.在cmd下测试命令加上双引号还是会正常执行。
2.NC6.5中会以空格分界,对含有特殊字符的字符串添加引号。
通过测试,发现上面两个特写。用如下方式,将执行结果通过尖括号输出到文本。

成功执行方式:

命令执行带参数:
如果出现命令需要有参数的场景怎么办?
win中的系统命令大多都是用斜线“/” 来声明参数名。经过尝试,发现可以直接省去空格连写:

写文件:
但在实战中还是要写入webshell的,就要用到echo 和">"符号。
这一步确实让我折腾了一番,后来想到用闭合双引号方式来干扰转义。

经过测试,用如下方式写入的缺点是会多出空格和引号:

小结

会用利用脚本是一回事,复现了漏洞是一回事,能否在攻防中利用漏洞并拿到权限又是另一回事。

看似有了exp复现漏洞就是掌握了,但在实战中总会遇到不同环境、不同场景,也会出现不同状况,还是要掌握漏洞原理才能逐个攻破。

推荐阅读

·文章预览

往期回顾

01

Electron应用调试技巧分享

02

Python安全工具开发思路分享

03

一个好用的RPC框架

雷石安全实验室

商务咨询:

0571-87031601

商务邮箱:

[email protected]


文章来源: http://mp.weixin.qq.com/s?__biz=MzI5MDE0MjQ1NQ==&mid=2247525640&idx=1&sn=1489f033721d5b3628f7c9f2095defab&chksm=ec264490db51cd8680b0da48ec422295b0f70401225a13948e59ec6f18f3a47cc5fa0fce75bc#rd
如有侵权请联系:admin#unsafe.sh