zoukankan      html  css  js  c++  java
  • [代码审计]某租车系统JAVA代码审计[前台sql注入]

    0x00 前言

    艰难徘徊这么久,终于迈出第一步,畏畏缩缩是阻碍大多数人前进的绊脚石,共勉。

    系统是租车系统,这个系统是Adog师傅之前发在freebuf(http://www.freebuf.com/articles/web/162910.html)的,他审的时候没有发现sql注入,但在评论中有个师傅说有前台sql注入。

    那么我就来找找前台的sql注入吧,虽说是java但其实代码审计的点都是通用的,万变不离其宗。

    扯远了,这篇文章,算是踏入java代码审计领域的开篇。

    0x01 基础环境搭建

    源码下载:http://down.admin5.com/jsp/135501.html

    环境还是某study一把梭,下载链接(http://phpstudy.php.cn/phpstudy/JspStudy.zip)

    IDE的话用的是IDEA

    安装步骤按照使用说明来就是了

    安装步骤1中,注意要把tomcat的server.xml中的这一行注释掉

    步骤2:在数据库的目录中打开cmd窗口,导入mysql的命令: (jspstudy的mysql默认账号密码是root/root)

    mysql -u root -p opencar <opencar.sql

    顺便一提这个租车系统的默认配置账号密码也是root/root,见db.properties

    接着重启jspstudy即可。

    访问url:http://localhost:8080/opencarrun/,无报错则表示成功安装。

    0x02 前台sql注入

     加载源码到IDEA,打开大概是这样子的。

    xss和短信轰炸就不说了,直接找sql注入。

    根据Adog师傅的文章,我找到了几个处理sql语句的类,比如

    加红的原因是因为IDEA找不到类的位置,加载的opencar文件夹也确实没有源码。

    那么如何找到这里的源码呢?其实在opencarrunWEB-INFlib中存放了相关的依赖jar包,其中有一个名为car-weishang-1.0.jar的jar包

    因为是jar包,我们需要反编译回java文件。

    下载jd-gui(http://jd.benow.ca/),可以单独下载,也可以下载idea的插件,我这里是单独下载。

    反编译一下这个包,可以拿到相关的源码:

    重点关注service下的,因为是前台,所以权限有限,可以重点关注get前缀的方法(表示查询)

    找sql注入的话其实也没有比较好的方法,就是一个个看,再辅以一定的搜索技巧(看源码规律配上正则来搜)。

    这套系统从Adog师傅的文章知道是用了预编译的,那么我们要考虑的就是预编译防御不了的地方,比如like,in,order by这三个位置的。

    参考京东安全的这篇文章(https://mp.weixin.qq.com/s?__biz=MjM5OTk2MTMxOQ==&mid=2727827368&idx=1&sn=765d0835f0069b5145523c31e8229850&mpshare=1&scene=1&srcid=0926a6QC3pGbQ3Pznszb4n2q),虽然说的是mybatis框架的,但是预编译的道理还是一样。

    再结合,java是强类型语言,要注入的话就必须是String类型,那么我们只需要分析可传String参数的方法即可。

    经过刷选,最终符合条件的方法没几个,再一一去看代码是否会有注入,有注入了再去回调调用的地方,最终找到外部传进来的参数和访问url。

    很幸运找到了几个。

    看到ShopService类的getGoodsPojoListByTypeAndcatAndBranAndPrice方法

    回溯看看方法在哪里调用到(Ctrl+Shift+F)

    在GoodList.java文件中,跟进去。

    这个方法的几个参数都是有注入的。

    同理还有ShopService类的getGoodsPojoListByTypeAndcatAndBranAndPriceCount方法、getGoodsListByExtendCat方法也是一样,但是位置都是在getGoodsPojoListByTypeAndcatAndBranAndPrice方法之后,所以利用的话还是getGoodsPojoListByTypeAndcatAndBranAndPrice方法比较好利用,至于其他service类也是有可能有注入,就不再一一分析。

    分析GoodList.java的访问url是什么,看到匹配的是/goods url下面。

    直接访问会跳404页面

     通过对前端页面研究发现是通过首页的搜索页面进去的。

     

    其中的cat_id就是我们的注入参数(当然还有其他的,不一一举例),因为系统是对异常进行了捕获的,所以不能直接进行报错注入。

    那么就只能进行盲注了,用union回显也是不行的,因为这里的三条语句都是受影响,那么就只能用延时盲注了。

    但因为受影响的字段较多,且会执行三遍,并且这里用不了and,只能用or。

    那么用or  1=1 和 or 1=2查询的时间就已经足够了。

    or 1=2的时候大约执行7-8秒,or 1=1的时候大约执行24-26秒左右。

    那么我们可以使false的时候为or 1=2,true为or 1=1 ,payload如下:

    http://localhost:8080/opencarrun/goods?cat_id=1)%20or+1=if(ascii(substr(user(),1))=114,1,2)%23&menuId=7+

    底层不知道为什么还有一个报错,但不影响注入

    虽然是前台注入,但是这个注入点颇为鸡肋,实战意义不大,仅供参考。

    到此,该CMS告一段落。

    0x03 总结

    刚开始还有很多生疏的地方,慢慢来吧。

  • 相关阅读:
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
    log4net写txt日志
    easyui上传文件
    让 SVN (TortoiseSVN)提交时忽略bin和obj目录
    C#进阶系列——WebApi 跨域问题解决方案:CORS
    js控制radio选中
    sql注入
    修改类不用重启Tomcat加载整个项目
    URIEncoding与useBodyEncodingForURI 在tomcat中文乱码处理上的区别
    ActiveMQ 使用场景
  • 原文地址:https://www.cnblogs.com/r00tuser/p/9708911.html
Copyright © 2011-2022 走看看