某租车系统JAVA代码审计
由于开源的JAVA WEB项目不是很多,这里找到一个没有用struct2或是spring框架的cms,希望借此cms来帮助新手敲开JAVA代码审计的大门,文章会详细写一些笔者进行审计过程走过的,漏洞利用过程并不是多高深,大牛可以绕过,此篇权当抛砖引玉~
系统基于租车业务场景而搭建的O2O服务平台,可为用户提供商务租车、接送机、旅游租车、企业租车、自驾租车、婚庆用车等自助租车服务。
系统包含车辆库管理、门店管理、员工管理、司机管理、订单管理、活动管理、评价管理、财务管理、统计等。
下载完讲一下安装这块,笔者的使用是tomcat8.5+phpmystudy,tomcat8.5部署web这个就不多说了,多百度百度自然就会了,这里的phpmystudy主要是需要使用到其中的mysql数据库,单独mysql数据库也行~
这是网站首页,然后我们来进行一个功能上的浏览与汇总,这里可能是习惯问题,笔者在做代码审计的时候一般不会先看代码,而是根据功能点去进行一个代码的回溯,这样做会减少大量的代码审计时间,但是缺点就是一些不在显示页面的功能点所存在的漏洞可能就会挖掘不到,这里选择可以因情况而异~
第一个功能点可能就是这个用户的注册功能,那用户的注册一般所存在的问题大多为sql注入、xss漏洞、逻辑漏洞、头像处getshell等等,顺着这样的思去找,效率上应该会大大提高。
审计的时候首先测试用户功能点,这里首先是最常见的一些逻辑漏洞(任意密码重置这类)、SQL注入、存储型xss漏洞、后台头像getshell、订单遍历等等,之后再测试租车功能,看看有无逻辑漏洞(1元购)和订单遍历(修改ID获取其他用户的信息)等等,整个流程肯定大抵就是这样,下面进入审计实战!
首先有一个获取手机动态码,那么这里由于是本地搭建,肯定发不出去,分析一下,这里存在的潜在风险可能就是短信,这里看了代码好像并没有加上一些检查机制,应该是存在的。
这里说下怎么进行代码的回溯,我是采用的search,比如说这里的功能点为getTelCode,然后到eclipse中去进行全局的,基本不到一分钟就能定位到代码。
进入到个人中心,首先是功能点所引发的潜在漏洞汇总,映入眼帘的就是一个基本资料的修改:存储型xss OR SQL注入??
包括这里的资料修改和收货地址修改其实都存在上述两个问题,,这里选择一个进行代码和测试即可~
优惠券这里没,最后就是积分功能,那么会不会存在使用积分付费,然后由于校验不完整,使用负积分付费从而导致积分反增不减这样的漏洞出现?
首先测试来修改用户的“基本资料”,这里可以fuzz一下后台语句,可以修改为woaini”,然后看回显,,其实就可以大致猜出后台代码。
可以看到这里都是直接request获得,并没有任何过滤,看代码的更大就是看看这里的sql语句怎么实现的,首先我们是登录用户,然后姓名、地址、电话什么的都没输错,因此进入最后一个else语句。
可以看到这里的sql语句采用的是预编译,因此sql注入漏洞可能不存在,但是预编译最怕的就是字符串的直接拼接,这里在sql语句里看了全部的sql语句,并不存在这样的案例,因此sql这条可能走到底了。
这里由于不存在数量这样的参数,因此修改数量为负数这样的情况并不存在,实际上是从session来获取用户的积分,因此积分上应该也不存在漏洞,最后只能提交订单然后抓包看参数进行代码溯源~
这里由于都是通过id这样的参数来进行传递,那么可以在审计的过程中留意id是否判断所属用户,也就是越权的问题,最重要的可能就是这里的price参数有无检查!
这里我们需要跟进这个ordinary_user,到这里price这个参数都没有任何过滤,是通过直接request请求获取的。
这里就不截取代码了,可以明显看到这里的price参数依然没有进行任何校验,因此到这里我们可以最终判断,这个price参数可以进行任意修改!
第二种则是修改页面的表单参数,这里后来查看付款源码,发现会在页面中hidden传过来的参数。
进入到个人中心,这里的订单信息获取是通过session来获取用户,因此也就无法获取他人的订单信息。
不过这里有几个功能,第一个就是取消订单的功能,那么对订单编号是否进行了用户归属的检验呢?让代码来告诉我们!
这里会将输入的订单与用户自身的订单号来进行一个匹配,若匹配成功才会取消订单信息,因此这里不存在越权的漏洞!
这篇文章重点是一下笔者的JAVA代码审计的思与方法,希望抛砖引玉,能够有越来越多高质量的JAVA代码审计文章的出现~