分享一下前段时间攻防演练中信息收集到源码getshell的思路(信息敏感,以厚码展示)。
一、信息收集源码
打开该gov靶标网站,暂时无法判断是否由建站系统搭建的。
通过右键查看html源码,看看是否有特征关键字。
这段内容看起来具有唯一性,尝试复制到github中搜索,看看是否可以找到对应的cms。
成功搜到了一套代码,下载下来看看是否是靶标系统的cms。
本地运行该cms系统,主页面很类似,应该就是同一套系统。
二、代码审计
1、fastjson反序列化
首先先看组件,使用了fastjson,该版本存在反序列化漏洞。
看看代码哪里使用了该组件
传入的参数可控,但不完全可控,accesstoken要先进入doget方法赋值给userinfo,再进行json转换。
进入doget方法
传入的accesstoken进入该方法后返回出来的参数无法控制,就算打入poc也无法利用漏洞。
代码中其他json.parse的地方也类似,请求无法完全控制,所以直接pass,看看是否还有其他漏洞可利用
2、shiro鉴权绕过
shiro1.4版本存在鉴权绕过漏洞,无需登录就可以未授权访问
看看定义了哪些 URL 路径是可匿名访问。
bypass方法:http://xxxx/可匿名访问路径/..;/鉴权路径/xxxx/
在本地复现一下,成功绕过权限校验,可未授权访问后台。
3、sql注入
mybatis xml中有使用拼接的sql语句
跟进到对应的content层接口代码。
构造数据包,本地复现延时成功
sqlmap也跑出来了。
这个sql注入可配合刚才的shiro鉴权绕过漏洞实现前台sql注入。但是sql注入也不太好拿shell,看看是否还有其他漏洞点。
4、shiro反序列化
在ApacheShiro<=1.2.4版本中AES加密时采用的key是硬编码在代码中的,于是我们就可以构造Remembe Me的值,然后让其反序列化执行。
一般来说shiro1.4.0版本是很难进行反序列化利用的,因为该版本的shiro密钥不是硬编码在代码里的,每次运行代码都会随机生成新的shiro密钥,通过爆破密钥是很难爆破出来的,如果开发将密钥手动硬编码在代码里面,即使使用的是高版本shiro,也可以利用shiro反序列化。
亏前面审了这么久,原来该cms直接将shiro的密钥手动硬编码在代码里面了,这不是直接送漏洞上门了吗。只要该靶标搭建系统的时候没有将shiro密钥修改,就可以利用shiro反序列化漏洞。
三、漏洞复现
直接使用工具梭哈靶标系统,居然没有waf,直接拿下。
原文始发于微信公众号(有恒安全):攻防演练-信息收集源码getshell
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论