实战 | 通过文件上传绕过getshell
2024-3-21 23:1:56 Author: mp.weixin.qq.com(查看原文) 阅读量:28 收藏

免责声明:

由于传播、利用本公众号所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

前言

开始之前,先对环境进行一个简单的描述,由于这次目标单位属于传统行业,人员整体安全意识较弱,所以前期准备了邮件信息收集和钓鱼,另外不清楚目标服务器是不是做了特殊设置,邮件一直发不过去,之后对邮件服务器添加了spf和dkim记录,邮件才发送成功,推测目标服务器部署了邮件网关系统,这样的话钓鱼的成功率较低,接下来就钓鱼和web打点同时进行。

曲折的web打点

拿到目标后的首要任务就是打点,按照常规手段对目标的域名,子域名,目录,端口,ip,ip段进行信息收集,之后进行指纹识别,发现目标单位在互联网上的暴露的业务并不多,由于单位对外的http业务很少,也没有登录、注册接口,后来对25端口暴破了一些邮箱,也没有进展,马上要准备放弃web打点了,但是在一个子域名下的敏感目录发现不太对劲,我们立刻开始对这个前端js审计

JS审计

发现这个js中有个注释信息非常可疑,并留下了一串数字,猜测这个数字可能是记录产品版本号的,根据多年渗透经验,对于这种突然出现的一串数字不能放过!!!于是开始了漫长的网盘,搜索引擎,码云,github敏感信息收集,这里推荐Git信息收集使用工具Gitrob。于是我们在github上发现了源码。

代码审计

拿到这个站点的部分源码,开始进行常规的java代码审计,通过对常见的RCE sink点进行定位,作者心中默念readobject,ProcessBuilder,Runtime,ScriptEngine,parseObject,MultipartFile,果然幸运女神降临,突然发现了在一处代码块里使用了InputStream类,并且这个方法的输入并没有设置过滤,貌似可控,任意文件读取!!!于是我们马上构建请求包验证漏洞。

日志分析

之后的思路是利用之前的文件读取漏洞,读取分析中间件的日志看下有没有一些敏感信息泄漏,这个中间件部署了不只这一个应用,还有一些其他应用的接口,把日志保存下来,用脚本自动化的去提取出这些接口,探测,有一个接口比较可疑。

文件上传白名单绕过getshell

发现一个疑似上传的接口,访问一下,是个遗留的上传图片的接口,感觉可以shell,先试了下上传一个正常的图片可以上传成功,测试之后发现使用了白名单机制,只允许JPEG、JPG、PNG、BMP等文件格式的,没有对文件头进行限制,能getshell的几率瞬间直线下滑,突然想起来之前的一种文件上传白名单绕过的思路,假如上传的代码没有加锁,这时候可以利用上传时候的代码执行的需要一定的时间,加大客户端请求时候的并发,造成文件上传时候条件竞争。准备好webshell,这个webshell的功能要能写一个大马到webapp根目录下,然后我们访问这个大马。先开两个intruder,然后请求上传的文件的并发开到100。

在经历了半个小时左右的404之后,发现了一个200,访问一下,果然可以了!之后就可以直接写jsp的webshell或者注入内存马。

其他

好的思路对于web打点很重要,很多成功的思路都是在不断试错过程中摸索出来的,所以师傅们对于一些细节一定要注意,条件竞争对于挖掘一些逻辑漏洞也很适用,订单购买/兑换/0元购等等,也有文件上传的场景也可以有很好的效果。打开这个口子之后连着主站,和内网是通的,之后的过程就轻松很多了。

如果你是一个长期主义者,欢迎加入我的知识星球,我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款
前面有同学问我有没优惠券,这里发放100张100元的优惠券,用完今年不再发放

往期回顾

dom-xss精选文章

年度精选文章

Nuclei权威指南-如何躺赚

漏洞赏金猎人系列-如何测试设置功能IV

漏洞赏金猎人系列-如何测试注册功能以及相关Tips

文章来源:源鲁安全实验室


文章来源: https://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247493925&idx=1&sn=8a9d543c376e4306b8191e8e16c844c5&chksm=e8a5e346dfd26a502eacc1b25a41ba365d493efcbddd3e92990c35d604e8800bc203ec21337c&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh