前言
某次攻防演练中遇到几个oa系统,其中一个医院的oa系统还算有些意思。在此复盘一下。
登录
映入眼帘的就是一个登录页面。
首先看到一处”忘记密码”的功能点,对此功能点抓包测试。
以经验判断,只需要在填写任意验证码时将返回包的code值500修改为200即可来到修改密码的功能。但遗憾的是当我不断修改时页面并没有发生任何变化。
当我尝试将返回包里的状态码修改为200时,成功跳转到修改密码的功能点。
如此就可以重置任意用户的密码。
钓鱼
重置一枚账号后进入系统后首先翻找上传接口,一通忙活发现所有的上传全部存放在filePath里,确认是任意文件上传但无法解析webshell。
只能转换思路,想着既然是医院的oa系统用户量比较大,那就尝试一下钓鱼。首先重置了一个信息网络管理办公室员工的密码,以她的身份发送邮件。这样的可信度比较高一些。
因为对c#代码比较陌生,没有手动实现,也是第一次钓鱼,只能利用工具生成一个简单的免杀二进制文件,重命名为oa系统升级补丁.exe。
经过一晚上的等待,还真有一台上线的个人pc机。
但查看ip地址发现并不是该医院的办公网,猜测办公网可能不出网。也许是木马做的并不完美,该pc机在几分钟以后就掉线了。
shiro
回到oa系统,只能去翻找文件,看是否能找到该医院其他的脆弱资产。下载了多个apk、word文档、表格等,均没有发现薄弱点。但在”院内信”发现了几个测试的jar包,结合开发文档好像是源码。
下载分析了一下,发现系统使用了shiro框架并找到了key值。
当满怀开心进行利用的时候,竟然提示未发现shiro框架。
去burp的插件里看了看也没有发现shiro框架。于是将burp的历史记录再次翻找一遍。
果然发现本来的rememberMe已经被修改为xxx_oa_remember_Me。再次利用得以验证。
将该oa在空间搜索引擎上搜索,发现还是一个通用,侥幸获得一枚0day。
总结
1、返回包修改状态码为200可重置任意用户密码;
2、钓鱼样本做的太多粗糙,引起了对方的察觉;
3、细心的观察到oa系统竟然存在源代码,顺利找到key,并结合认证字段拿下该目标系统。
原文始发于微信公众号(Wings安全团队):记一次失败的钓鱼,成功的key