记一次java代码审计

前期
前段时间做的东西属实是有点偏难不友好。这几天静下心来继续弄点稍微简单的。就直接进行审计把。不说那么多,环境部署好了,开干。
说一下我审计的前提准备。过滤器是一定要看的。当然才开始审计的时候可能会看的比较恼火,看不懂当我没说。简单的还是要看一下。涉及到一些函数处理的可以等到实际挖洞的时候再跟也行。然后就是cms的整个架构,哪个模块对应什么功能都是需要了解的比较透彻。涉及框架的,框架的漏洞涉及的组件要清楚,框架的配置文件再看看。就开冲。
才开始代码审计,还是每个接口都看一下。老规矩。
开始
注册接口审计
注册流程分析
(1)判断是否登录,登录以后就跳出注册页面
(2)判断是否验证码为空或者错误则返回并告知验证码出错(验证码为刷新可暴力破解用户名枚举)
(3)邮箱格式判断
(4)判断用户名,密码格式是否正确
(5)判断邮箱用户id是否存在,存在就返回已存在。否则就进行注册
(6)预编译进行sql插入。
这样子分析下来,也只能做个用户名和注册邮箱枚举了,放两个个sql处理的关键的图,主要是看这里拼接出了预编译。

记一次java代码审计
记一次java代码审计

登录接口审计
登录接口审计,没啥大问题,放几张图。
这里有个小问题就是任意跳转,不过要登录成功了才行。可以看看代码。

记一次java代码审计
记一次java代码审计

任意跳转
这里获取了传入的pre_page做判断,如果登录成功就重定向过去。burp抓包也能看到。

记一次java代码审计
记一次java代码审计
记一次java代码审计

前台不要浪费太多时间先,直接冲后台
这种要养成习惯,这种权限相关的要做个笔记,万一有机会绕过呢。usertype=1是登录后台的权限设置。

记一次java代码审计

文件上传分析
找到一处文件上传的地址,看看
这种url的也要看看,说不定有ssrf

记一次java代码审计

这里是得到系统的路径,暂时我们是不可控的

记一次java代码审计

看一下对文件名是怎么处理的
(1)文件路径做更改,前面有个append的路径添加进去了(都是写死的,暂时不用太关注)
(2)对文件进行重命名

记一次java代码审计

文件重命名分析
(1)判断文件是否存在
(2)判断新的路径的文件是否存在,不存在就创建(注意到这里我们的文件路径都是不可控的)(因为这里是先上传保存,再进行处理删除,所以说这里存在竞争,但是实际是利用不了的,后续可以看。)
(3)获取源文件名。(未对源文件名做处理)
(4)判断并截取了文件的后缀。{后缀名:fileExt 文件名originalFileName}
(5)对文件名做了时间+随机数处理
(6)重新生成了一个文件对象,并返回。

记一次java代码审计
记一次java代码审计

看一下这里 先创建了临时路径,然后再上传了我们的传入文件,此时还是没有改名的。也就是说如果我们可以访问,那么就存在竞争了。(当然前面也很体贴的帮我们看了能不能有写权限)(最后发现这个目录下如果访问jsp,jspx就直接404了)

记一次java代码审计
记一次java代码审计

找了一下过滤器,发现。。。。。。。。jsp ,jspx都不能直接访问。

记一次java代码审计
记一次java代码审计

保存的时候还是不出意外的做了预编译。跟到这里流程差不多了,但是我们好像没有发现对后缀进行了处理。试一试直接上传jsp

记一次java代码审计

出现了问题,跟一下看看,是在 ((MultipartRequest)request).getFiles();未获取到。限制了jsp和jspx不能上传。

记一次java代码审计
记一次java代码审计
记一次java代码审计

暂时放一下。如果是apache的话还能上传配置文件,windows$DATA流试了一下没成功。
SQL简单分析
上传暂时放弃一下,看一下有没有注入,预编译虽然比较多,但是我们知道limit,orderby后面是不能预编译的。先放一个跟出来的sql检查。
说一下这个下断点跟就行了,没有太多的技术要求,主要还是看代码。(看一下过滤的,果断猜测xss过滤也是在这里。如果最后拿不下shell,能出几个xss钓cookie也还是勉勉强强吧。)

记一次java代码审计

先看第一处,因为才开始顺手一点,发现这里确实是直接拼接的,但是因为获取的整数类型,传入payload类型不对所以直接报错了。(这里也要注意,不要看到直接拼接就下断定有。推荐一个工具 seay的mysql监控工具,可以看的很直观)

记一次java代码审计
记一次java代码审计
记一次java代码审计
记一次java代码审计

模块文件读取
看一下模块这里,这里现在是继承者全村大半人的希望了,如果没有出东西,最后还是要去看看有没有注入啥的能不能getshell。这里的路径表面看起来是直接传的

记一次java代码审计
记一次java代码审计

emm,path做了个正则处理。过滤了..然后如果还有..就直接无了。

记一次java代码审计
记一次java代码审计

所以这里不能做路径穿越穿出去,但是好像没有对路径做限制,只限制了不能读取config和几个路径。所以这里应该是有问题的。并且他默认是往根目录去读取。

记一次java代码审计

比如这里,都出来了web-inf/lib目录下的包。

记一次java代码审计

尝试看看读取文件,这里只给了文件的信息,没有给内容。那也就是说没有太大的卵用。

记一次java代码审计

然后高潮就来了,他这个模块的功能有点多。还能进行下载,重命名等。本身目录放在根目录,岂不是看到了希望的曙光,要是能读个数据库密码啥的也是不需此行,试一下。只能说不负众望。

记一次java代码审计


模块文件删除
不要急,一般这种造成的都会有连坐,比如任意文件删除(只限制再web目录)。(这里怕把系统整坏了,就新建一个文件然后删除)

记一次java代码审计

成功了。其他的功能如替代等这一种不是很想尝试,因为他限制了不能直接访问jsp,jspx也就是直接写马不行的。传配置文件的方式我们上传就能直接解决不需要这么麻烦。

记一次java代码审计

系统都是一些配置编辑的功能,没有特别的新的。
因为还有sql哪些没有审计,所以说不一定拿不到通用shell(apache的话上传配置文件可以拿)。大半天这次只出了一个文件读取和文件删除,能够读取数据库配置文件还是有一定的危害。主要是审计思路的多多练习,和审计习惯的锻炼。

转载自

https://xz.aliyun.com/t/10198

主题测试文章,只做测试使用。发布者:视频运营,转转请注明出处:https://community.anqiangkj.com/archives/10541

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年3月18日 下午2:55
下一篇 2022年3月18日 下午3:32

相关推荐

发表回复

您的电子邮箱地址不会被公开。