记一次java代码审计
VSole2021-09-16 15:10:38
首发:先知社区 https://xz.aliyun.com/t/10198前段时间属实是有点整的太难了。这几天静下心来继续弄点简单的。就直接进行审计把。不说那么多,环境部署好了,开干。说一下我审计的前提准备。过滤器是一定要看的。当然才开始审计的时候可能会看的比较恼火,看不懂当我没说。简单的还是要看一下。涉及到一些函数处理的可以等到实际挖洞的时候再跟也行。然后就是cms的整个架构,哪个模块对应什么功能都是需要了解的比较透彻。涉及框架的,框架的漏洞涉及的组件要清楚,框架的配置文件再看看,就开冲。才开始代码审计,还是每个接口都看一下。老规矩。
注册接口审计
注册流程分析 (1)判断是否登录,登录以后就跳出注册页面 (2)判断是否验证码为空或者错误则返回并告知验证码出错( 验证码为刷新可暴力破解用户名枚举)(3)邮箱格式判断 (4)判断用户名,密码格式是否正确 (5)判断邮箱用户id是否存在,存在就返回已存在。否则就进行注册 (6)预编译进行sql插入。 这样子分析下来,也只能做个用户名和注册邮箱枚举了,放两个个sql处理的关键的图, 主要是看这里拼接出了预编译。
登录接口审计
登录接口审计,没啥大问题,放几张图。 这里有个小问题就是任意跳转,不过要登录成功了才行。可以看看代码。
任意跳转
这里获取了传入的pre_page做判断,如果登录成功就重定向过去。burp抓包也能看到。
前台不要浪费太多时间先,直接冲后台
这种要养成习惯,这种权限相关的要做个笔记,万一有机会绕过呢。usertype=1是 登录后台的权限设置。
找到一处文件上传的地址,看看
这种url的也要看看,说不定有ssrf
这里是得到系统的路径,暂时我们是不可控的
看一下对文件名是怎么处理的 (1)文件路径做更改,前面有个append的路径添加进去了(都是写死的,暂时不用太关注) (2)对文件进行重命名
文件重命名分析 (1)判断文件是否存在 (2)判断新的路径的文件是否存在,不存在就创建(注意到这里我们的文件路径都是 不可控的)(因为这里是先上传保存,再进行处理删除,所以说这里存在竞争,但是实 际是利用不了的,后续可以看。) (3)获取源文件名。(未对源文件名做处理) (4)判断并截取了文件的后缀。{后缀名:fileExt 文件名originalFileName} (5)对文件名做了时间+随机数处理 (6)重新生成了一个文件对象,并返回。
看一下这里 先创建了临时路径,然后再上传了我们的传入文件,此时还是没有改名的。 也就是说如果我们可以访问,那么就存在竞争了。 (当然前面也很体贴的帮我们看了能不能有写权限)(最后发现这个目录下如果访问 jsp,jspx就直接404了)
找了一下过滤器,发现。。。。。。。。jsp ,jspx都不能直接访问。
保存的时候还是不出意外的做了预编译。跟到这里流程差不多了, 但是我们好像没有发现对后缀进行了处理。试一试直接上传jsp
出现了问题,跟一下看看,是在 ((MultipartRequest)request).getFiles(); 未获取到。限制了jsp和jspx不能上传。
暂时放一下。如果是apache的话还能上传配置文件,windows$DATA流试了一下没成功。
SQL查看
上传暂时放弃一下,看一下有没有注入,预编译虽然比较多,但是我们知道limit, orderby后面是不能预编译的。先放一个跟出来的sql检查。 说一下这个下断点跟就行了,没有太多的技术要求,主要还是看代码。 (看一下过滤的,果断猜测xss过滤也是在这里。如果最后拿不下shell, 能出几个xss钓cookie也还是勉勉强强吧。)
先看第一处,因为才开始顺手一点,发现这里确实是直接拼接的, 但是因为获取的整数类型,传入payload类型不对所以直接报错了。 (这里也要注意,不要看到直接拼接就下断定有。推荐一个工具 seay的mysql监控工具,可以看的很直观)
看一下模块这里,这里现在是继承者全村大半人的希望了,如果没有出东西, 最后还是要去看看有没有注入啥 所以这里不能做路径穿越穿出去,但是好像没有对路径做限制, 只限制了不能读取config和几个路径。所以这里应该是有问题的。 并且他默认是往根目录去读取。
比如这里,都出来了web-inf/lib目录下的包。
尝试看看读取文件,说实话这里有点服气,只给了文件的信息,没有给内容。 那也就是说没有太大的卵用。
然后高潮就来了,他这个模块的功能有点多。还能进行下载, 重命名等。放在根目录,岂不是看到了希望的曙光,要是能读个数据库密码啥的 也是不需此行,试一下。只能说不负众望。
payload http://10.70.40.114:8080/xxx/admin/filemanager?mode=download&path=/web-inf/classes/conf/db.properties&config=filemanager.config.js 不要急,一般这种造成的都会有连坐,比如任意文件删除(只限制再web目录)。 (这里怕把系统整完了,就新建一个文件然后删除)
成功了。其他的替代这一种不是很想尝试,因为他限制了不能直接访问jsp, jspx也就是直接写马不行的。传配置文件的方式我们上传就能直接解决不需要这么麻烦。
系统都是一些配置编辑的功能,没有特别的新的。这次只出了一个文件读取和文件删除 ,能够读取数据库配置文件还是有一定的危害。因为还有sql哪些没有审计, 所以说不一定拿不到通用shell(apache的话上传配置文件可以拿)。主要是审计思路 的多多练习,和审计习惯的锻炼

VSole
网络安全专家