这是这个cms的第二篇文章,第一篇之前发的,因为参考比较多,并且自己也就是详细跟了一下,没挖出来自己的洞,所以发在了公众号上,主要是讲了点自己Java代码审计的思路和方法,有兴趣可以看看。
今天详解一点功能点的审计,,任意文件删除,任意文件读取漏洞(其实也不算,因为限制了web-ini没法读,也就是配置文件我们可能读取不到,先看看吧)以及绕过备份getshell。
公众号文章链接:https://mp.weixin.qq.com/s/t1RDRZKTmOOkGMv82-WtMA
这里前面只选择了一部分功能点,因为基本是大同小异,增删改查都是用了预编译,逻辑都是差不多,就随便找了几个。因为预编译比较多,就想着全局搜索orderby看看有没有漏网之鱼,但是基本都是系统加载时候直接写死了的,sql注入估计很难挖到了(其实是产生了错觉)。但是功能点还没看完,不急每一个都跟进去看看就OK。先对增删改查简单的分析一下(前面都是自己练手对每个流程分析一下,比较简单基础,勿喷。)
流程分析
登录分析

1.判断是登入还是退出
2.检查验证码
3.检查ip,账号,密码。密码这里做了一个html解码
4.判断用户名是否可以登录,在数据库做了个查询,包括锁定等
5.判断账号密码是否匹配
6.获取一系列的如访问信息,然后保存登录信息
这里能看到,验证码错误以后直接返回没有刷新,所以这里可以对账号密码进行暴力破解。中间的sql查询均采用了预编译,不截图了。这个站预编译很多,但是还有少许的漏网之鱼。


添加管理员分析

1.判断是否是管理员
2.获取request的内容
3.检查checkedRoleId,转化为String或者String[]
4.判断user的字段信息不能为空
5.添加管理员


编辑管理员代码

删除管理员代码

中间的编辑之类的都大同小异,这里发现了删除和前面好像有点不同,没有做管理员权限认证,试一下。但是直接尝试失败了,怀疑应该是全局做了权限校验。先放着后面看。这里可以看出来,基本都是获取了前端的数据,然后进行权限鉴别增删改查,数据库Dao文件里都做了预编译,order by后面看了几处也没法利用,宽字符没有,先放一下。
修改密码分析
1.验证是否是管理员登录
2.获取request请求的内容
3.判断书否输入了两次密码,并且密码是否一致
4.获取userID
5.根据userID修改密码
所以这里就有漏洞出来了,越权修改密码,根据userID可以修改任意用户的密码,如果是能找到一个地方能获取用户的userID,那就可以算任意密码重置了。这种一般可以找下用户互动的地方。这里因为存在token,没办法进行csrf修改管理员密码。先放着,继续跟其他的功能点

漏洞
一 失败的sql注入
一般对于注入的查找,我们看一下Dao文件里的,前期我们分析了很多基本都是预编译,但是总有开发可能会漏掉。这里就找到了一个直接拼接,但是应该是做了全局过滤,所以虽然是找到了 还是要找到然后绕过才行。先看怎么找

(1)Dao文件发现过滤
(2)找调用了该Dao的service
(3)找一下调用了该service的控制器看看传入的参数是否可控,有些时候可能是前面实例化了对象后面取得对象的某个字段,比如这里,确实是可控的,且classID可以前端修改,那么正常情况下就有注入的可能了。但是能看到这里是报错了,大概率是过滤器引起的,我们看一下日志,发现确实是因为“爆了非法。

找一下看看哪些字符串被处理了,看了一下危险字符,不出意料的话这些都被拦截了。验证了一下,这些确实都被过滤了,我人麻了。先放着不管,最后再来研究一下这个具体拿来干啥的,替换的哪些请求。(后面再来看的时候才发现传入的classid是long类型,只是wcond转为了String,没注意到,所以这里的想找注入是gg了)

二 任意文件下载突破
兜兜转转继续审计,重复的增删改查不看了,看点其他的功能看,看到了后台有一处下载。看一下,找到这个控制器,跟一下。

前面没有太多好说的,传入路径,参数,主要是看看有没有对我们传入的路径做处理。这里对../ 和web-inf进行了判断,也就是我们开始说的没法读取web-INF文件夹。同时要记得有全局过滤,../这一种根本传不过来。但是我们开始发现了有替代,后期测试也发现了,会对客户端传入的参数也能做替换,也就是说我们仿照他的规则写一个就是了。这里实现了路径穿越,读取了上层的1.txt,其实也就是说如果没有限制只能在web目录,基本上能读取有权限的任意文件了。(一般这种读取还没有碰到必须要在web目录的)

读取一下D盘的e0m.txt文件看看能不能跳出web目录,这里和上面不同,是因为entry代表路径,下面downFileInfo写成了文件名。

三 任意文件删除
其实任意文件删除的逻辑和任意文件下载差不多,都是因为对路径没有做处理,导致了可以进行代码替换达到任意文件删除,这里就复现一下吧。还是删除d:e0m.txt,返回302,然后去D盘看,e0m.txt已经被删除了。

四 系统文件备份getshell
这里怀疑是上传zip包的功能环境搭建出了点问题,所以没发上传zip包(正常看别人之前都行,先空着这个)。由于备份还原时对目录校验不严格。可以进行目录备份getshell。这里由于接口有点问题,就直接在某个文件夹下放置zip包,然后模拟上传了zip包。模拟放到了tmoplate目录下,备份文件再sys_bak下

修改target路径,开始一直没成功说找不到数据库文件,跟了一下发现这里有个坑点,数据库文件要和备份名字一样,而且如果路径不同规则也更改了,这里我们模拟的,实战中碰到了对应的上传的路径去改就行了。关于备份文件改了名是因为默认的备份名由于tomcat版本原因不能解析。简单说一下,先获取密码和文件路径,密码是admin的账号密码,文件路径和后面我们备份有关,也正是因为这里没有做处理。导致了我们可以进行目录穿越。配合上传zip包的话,实现备份getshell。前面我们任意文件下载那里配合,也就是我们可以备份了网站以后,然后下载下来,添加我们的
点击收藏 | 1 关注 | 2
  • 动动手指,沙发就是你的了!
登录 后跟帖