当前位置: 首页 > news >正文

玩转CodeQLpy之用友GRP-U8漏洞挖掘

0x01 前言

CodeQLpy是作者使用python3实现的基于CodeQL的java代码审计工具,github地址https://github.com/webraybtl/CodeQLpy。

通过CodeQLpy可以辅助代码审计人员快速定位代码中的问题,目前支持对SprintBoot的jar包,SpringMVC的war包,直接下载的源码文件夹,maven项目源码等方式进行自动化代码审计,详细使用方式参考github。

本文旨在阐述CodeQLpy在代码审计中的作用,文章后续所有漏洞均以提交CNVD,以此漏洞从事任何攻击行为均属于违法行为,与本文作者无关。

0x02 案例

用友GRP-U8是一款常见的WEB应用,经常参加比赛的小伙伴一定不会对这个产品陌生,在高校和政府有不错的使用量。如图2.1所示。

图2.1 GRP-U8产品界面

使用CodeQLpy可以直接从目标源码中找到上百个高危的漏洞,包括但不限于反序列化,任意文件上传,任意文件删除,SQL注入,SSRF,XSS等,如图2.2所示。

图2.2 使用CodeQLpy之后的部分结果

总计结果数接近1000个,其中有效漏洞超过100个。找了几个有代表性的漏洞来演示。

1) 任意文件删除漏洞

POST ViewExcel?djlxid=902&url=logs/info.log.1

漏洞对应的代码在com.ufgov.midas.yy.servlet.ViewExcelServlet,其中用户可控的source参数是url。

继续跟踪readExcelContent方法,内部处理逻辑很多,可以只关注我们关心的部分。

继续跟踪deleteFile方法,这里可以很清晰的看的文件删除的操作。

2)SQL注入漏洞

/listSelectDialogServlet?slType=slFZX&slCdtn=1=2;waitfor%20delay%20'0:0:3'

漏洞代码在com.ufgov.midas.yy.servlet.ListSelectDialogServlet

继续跟踪getProjectLevel方法,这里可以很清晰的看到进行了SQL语句拼接的操作。

3)任意文件上传漏洞

上传之后会在WEB跟目录生成文件2222.jsp

漏洞代码在com.mobile.action.U8AppProxy

继续跟踪doGet方法

跟进doPost方法,当id=saveheder时会进行文件上传操作

跟进uploadBytes方法,这里就是标准的文件写入的操作

0x03 技巧

由于项目最终保存的结果时csv文件,不利于数据流追踪,可以结合Visual Studio Code(后续简称VS)查看完整的流。

利用CodeQLpy生成的数据库,结合CSV文件中保存的有结果的插件名称,可以在VS中复现漏洞查找过程。

1) 从项目的plugins/java或者plugins/java_ext目录中找到漏洞扫描插件,并复制到VS中。

2) 要查看流,必须使用下面的写法,如图3.1所示。其中下面方框中的注释必须要有,并且最终的查询结果有四列,最好按照图3.1的写法。

图3.1 查看流的ql脚本写法

3) 查看结果中的flow流,可以看到完整的数据流,如图3.2所示。

图3.2 查询ql完整的flow流

0x04 总结

类似的漏洞还有几百个,把发现漏洞交给工具,把验证漏洞留给自己。目前工具仍处于前期测试阶段,如果有任何bug请在github的issue中提出。

原文链接

http://www.lryc.cn/news/35868.html

相关文章:

  • GMP调度模型总结
  • 蓝桥回文日期题
  • 【2023】某python语言程序设计跟学第三周内容
  • c++11右值引发的概念
  • MySQL 02 :三层结构、备份删除数据库
  • 质量员错题合集
  • 请教大神们,pmp考试和复习有什么攻略诀窍吗?
  • Go语言基础之接口
  • 【Go自学第一节】GoLang 数据类型
  • 学习ForkJoin
  • System has not been booted with systemd as init system (PID 1). Can‘t operate.
  • 使用Endnote自定义参考文献格式
  • jsPlumb Components Crack
  • Java接口
  • 二叉树OJ题目详解
  • #Vue3篇:响应式工具ref()、toRef()、 toRefs()、reactive()的用法和区别
  • docker容器内安装gcc(trunk 最新版本)以及LLVM
  • 手把手教你如何做数据报表
  • loadrunner的函数lr_paramarr()学习
  • Hive---数据导出
  • 还不会CAD批量打印图纸?学会这招再也不怕
  • 硬件设计从失败案例中找方法
  • 使用python求PLS-DA的方差贡献率
  • 前端面试题--JavaScript篇
  • 【批处理脚本】-3.5-pause暂停命令详解
  • 软件测试11
  • 2023 面试题js、es6篇
  • (六十六)设计索引的时候,我们一般要考虑哪些因素呢?(下)
  • python程序设计基础 实验四
  • ASP.NET CORE API 使用Orleans