参考csdn文章:
https://blog.csdn.net/weixin_38766356/article/details/103983787?ops_request_misc=&request_id=&biz_id=102&utm_term=%E7%94%A8%E5%8F%8Bnc&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-5-103983787.nonecase&spm=1018.2226.3001.4187
安装包:
https://pan.baidu.com/s/1sl7kj0ePHrJG3MeITABwyg?pwd=w2pq 提取码: w2pq
拿到代码之后,我们可以发现有很多的包,而且都是jar包,给审计的时候造成了很大的麻烦,所以我们先从Servlet的实现下手。
访问地址:ip+port/service/组件名
1.实现IHttpServletAdaptor接口,实现doAction方法,发布后代理类会且只会访问这个方法。
2.发布为组件(upm),设置组件名,将accessProtected=“false”,如果为ture,将会进行token验证。
NPM文件
```<?xml version=’1.0’ encoding=’UTF-8’?>
<module name="so">
<public>
<component name="CrmNcSynServlet" accessProtected="false" remote="false" singleton="true" tx="NONE"><!-- supportAlias="true"-->
<implementation>nc.crm.syn.servlet.CrmNcSynServlet</implementation>
</component>
</public>
</module>```
直接看webapps中的web.xml
url中/servlet/后面会交给NCInvokerServlet处理
查看invokerServlet代码
获得请求传入路径后,截取/~后的字符串,为moduleName、serviceName赋值,然后getServiceObject(moduleName, serviceName)调用。
TIPs:以下写法都能路由到同一个servlet有时候waf规则限制了~可以拿来绕过。
/ic/nc.bs.framework.mx.monitor.MonitorServlet
/servlet/~ic/MonitorServlet
/servlet/monitorservlet
module下有超级多的文件夹,这便为挖0day创造了无限的可能,先用一个nday举例,/servlet/~baseapp/nc.document.pub.fileSystem.servlet.DownloadServlet
根据路由找到代码,发现直接将post数据进行了反序列化,而用友又是有cc依赖的,所以直接cc6打过去就行了。
其实我们可以不用传统的审计方式,codesql之类的,直接fuzz(批量反编译这些jar包,然后找readObject,cc6的poc直接打过去,看自己搭建的环境有没有弹计算机就行了)。
这边直接把baseapp下所有的jar拖到jd-gui反编译,找readObject,直接就找到了一个
构造路由/servlet/~baseapp/nc.file.pub.imple.FileUploadServlet,poc验证一下
数据包返回500,但是服务端已经弹出了计算器
以前的几个nday都是利用返回包的序列化数据构造回显,其他的得盲打,我个人是喜欢写shell,这样不出网的机器也能用。现在ncupload路径下的jsp马不能直接用,但是用天蝎的jspx可以。
在有设备防护的情况下,内存马会比较好,目前正在写wsmemshell的poc。
https://lfysec.top/2021/09/10/%E7%94%A8%E5%8F%8BNC%E6%8C%96%E6%8E%98%E7%AC%94%E8%AE%B0/
```
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
Track-聂风 | 90.00 | 0 | 2023-04-18 14:02:29 | 活动奖励 |
Track-聂风 | 90.00 | 0 | 2023-04-18 14:02:25 | 投稿奖励 |
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.