tianticms代码审计——伊拉克版本
正所谓伊拉克版本必有缺陷
缺陷
前台环境没有搭建好,但前台没啥功能点
环境搭建
使用maven阿里源进行打包即可,全文搜索jdbc修改三处配置文件下的数据库连接,数据库文件在
tianti-modules/tianti-module-admin/src/main/webapp/scripts/tianti_stage.sql
我设置admin.war在admin路径下,getway为空不成功,所以这里仅测试后台功能,伊拉克版本见谅(前台也只是静态界面)
代码审计
组件漏洞
查看pom.xml
发现组件
log4j 1.2.17 可能存在漏洞 CVE-2019-17571 但需要SimpleSocketServer 开启端口
fastjson 1.2.20 可能存在反序列化漏洞
shiro 1.3.2 可能存在命令执行漏洞
hibernate 可能存在hql注入
验证 log4j1.2.17 CVE-2019-17571
使用全文搜索没有发现使用SimpleSocketServer开启端口,无法利用
fastjson
查找序列化方法parseObject,木有,利用不了
shiro反序列化 查找key在shiro配置文件
使用shiro综合利用工具,使用该key进行爆破利用链,找到利用链并且可以成功执行,漏洞存在
hibernate组件
全文查找select,发现基本上都采用了预编译写法,也就是
where username = :username
无法利用,有两个存在漏洞的写法分别为
public int getCount(String sql){String sqlCount="select count(0) count_num from ("+sql+") as total";List<Map<String, Object>> list = this.querySqlObjects(sqlCount);if(list.size() > 0){int countNum=((BigInteger) list.get(0).get("count_num")).intValue();return countNum;}else{return 0;}
}
public List<User> findUserListByRoleCondition(String roleId,String name){String hql="select urr.user from UserRoleRel urr where 1=1 ";if(roleId != null){hql+=" and urr.role.id = "+roleId;}if(StringUtils.isNotBlank(name)){hql+=" and urr.user.realName like '%"+name+"%' ";}return this.queryForList(hql);
}
可惜没有找到相关方法调用,注入失败
文件上传
全文搜索upload,发现路径user/upload/uploadAttach路径,但是由于使用随机校验码进行重命名已经用.分割验证后缀的方式进行验证,无法利用
查看后台功能,在其他的数据操作方面,使用了spring-data框架进行数据库更新操作,进行了预编译操作,无法注入,更新用户名密码位置,采用的是session获取用户id与数据库进行比对,也无法利用
或许前台有些查找功能,但是这种预编译写法,仍无法利用
至于xss之类的,后台的xss木有用
菜菜,大佬, 带带