玩转CodeQLpy之代码审计实战案例

news2025/1/17 5:55:18

0x01 背景介绍

CodeQLpy是一款半自动化的代码审计工具,能有效提高代码审计的效率,目前项目仍处于测试阶段。项目地址https://github.com/webraybtl/CodeQLpy,在github主页有对应的安装和使用介绍,如图1.1所示。

-t: 指定待扫描的源码路径。支持文件夹,jar包和war包,如果是文件夹,则必须是网站跟目录。

-d: 指定待扫描的CodeQL数据库。

-c: 指定待扫描的源码是编译前源码还是编译后源码。

-s: 指定是否跳过环境检查,本项目运行依赖于codeql和java环境,首次运行建议不跳过。

-v: 指定待测试源码的jdk版本,目前支持6,7,8,11。默认为8。

这里以某通用WEB应用为例,通过指纹body="changeAccount(\"varAccount\")" || body="KoronCom.TrustedSites"可以在资产测绘平台上找到近3000个资产。

0x02 工具使用

该系统的源码是主要由jsp文件和class文件组成,其中部分源码经过混淆,如图2.1所示。其中类名称和字段名称的可读性很差,不方便阅读,而且该系统的代码量较大,大约有4600个文件。如果通过传统的方式来进行代码审计,对审计人员的要求将会非常高。

图2.1 经过混淆的源码

使用CodeQLpy可以方便的帮助审计人员从大量源码中发现可能存在的安全隐患,使用步骤如下。

Step1:生成数据库初始化

python3 main.py -t /Users/xxx/Downloads/OAapp/ -c

图2.2 数据库初始化

最终运行成功之后会相应下一步进行数据库创建的命令。

Step2:生成数据库

这一步直接使用上一步命令最终返回的生成数据库的命令在cmd/bash环境中运行即可

mac命令如下

arch -x86_64 codeql database create out/database/OAapp --language=java --command='/bin/bash -c /Users/xxx/CodeQLpy/out/decode/run.sh' --overwrite

windows命令如下

codeql database create out/database/OAapp --language=java --command='run.cmd' --overwrite

生成的过程中会报很多错误,可以忽略,如图2.3所示。因为这一步创建的数据库是用上一步反编译的源码进行编译,反编译的源码不能保证完全正确,所以会有错。但是有错的源码仍然可以创建数据库,不影响我们进行代码审计。

图2.3 创建数据库

Step3:代码审计

这一步需要使用上一步命令最终相应的生成数据库的路径,如图2.4所示。

python3 main.py -d /Users/xxx/CodeQLpy/out/database/OAapp/

图2.4 使用ql插件分析可能存在的漏洞

最终得到的结果是csv文件,保存路径在out/result/目录,打开对应的文件,如图2.5所示。

图2.5 扫描结果内容

0x03 结果验证

扫描出来的结果很多,我们挑选几个有代表性的进行验证。

1)BeanShell远程命令执行漏洞

相关存在漏洞的文件在com/menyi/web/util/UtilServlet.class,如图3.1所示。从图中可以看出用户可控的输入value,传入了Interpreter类的eval方法,导致BeanShell任意代码执行。

图3.1 BeanShell远程命令执行漏洞

在测试平台上利用此漏洞,如图3.2所示。

图3.2 BeanShell远程命令执行漏洞exp

2)FilePathInjection任意文件读取漏洞

相关存在漏洞的代码在com.menyi.web.util.ReportServlet.class。如图3.3所示。

图3.3 任意文件读取漏洞

在测试平台上利用此漏洞,如图3.4所示。

图3.4 任意文件读取漏洞Exp

3)SQL注入漏洞

漏洞文件是在com.koron.oa.workflow.OAMyWorkFlowAction.class。如图3.5所示。

图3.5 用户可控输入tablename

继续跟进getOAMyWorkFlowInfo,如图3.6所示。

图3.6 tableName参数传递到SQL语句

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/158745.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SignalR在Asp.NetCore的使用入门

SignalR在ASP.NET CORE下的使用 SignalR是微软提供的实时Web通信的库, 它会自己根据情况使用不同的链接方式,主要有 WebSocketlong pollingForever frameSever Events Sent 等方式,故可以不管其具体的实现方式,差不多等于开箱…

Docker部署 Oracle12c

Docker部署 Oracle12c Docker部署 registry Docker搭建 svn Docker部署 Harbor Docker 部署SQL Server 2017 Docker 安装 MS SqlServer Docker部署 Oracle12c 文章目录Docker部署 Oracle12c部署步骤1.查询oracle镜像2.下载镜像3.创建容器4.进入容器5.连接oracle数据库部署步骤…

Unreal动态多播委托

相对于普通多播委托,动态多播委托可以在蓝图中绑定事件。在这里记录一下它的使用方式:定义动态多播委托类型:声明委托变量:绑定函数:通过Add绑定:需要定义FScriptDelegate变量:为FScriptDelegate添加绑定函数这种方法的好处是可以针对单个函数进行解绑:通过AddDynamic标记宏绑定…

Linux 调度器之抢占式调度

文章目录前言一、简介1.1 need_resched标志1.2 try_to_wake_up二、抢占调度2.1 抢占简介2.2 用户态抢占2.2.1 从系统调用返回用户空间2.2.2 从中断返回用户空间2.3 内核态抢占2.2.1 preempt_count2.2.2 调用preempt_enable()2.2.3 从中断返回内核空间时总结参考资料前言 在这片…

worker多线程的使用与理解

JavaScript是单线程的,并不是说它是单线程语言,只能说在浏览器中运行是单线程的,单线程会免去许多麻烦,比如说,有两个线程同时进行DOM操作,一个是在父级下添加子元素,一个是删除这个父级元素&am…

Pandas数据清洗函数大全

文章目录 一、drop():删除指定行列 1. 删除指定行2. 删除指定列 二、del():删除指定列三、isnull():判断是否为缺失 1. 判断是否为缺失2. 判断哪些列存在缺失3. 统计缺失个数 四、notnull():判断是否不为缺失五、dropna()&#x…

Java笔记024-Math类、Arrays类、System类、BigInteger和BigDecimal类、日期类

常用类Math类基本介绍Math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数方法一览(均为静态方法)Math常见方法应用案例1、 abs绝对值2、pow求幂3、ceil向上取整4、floor 向下取整5、round 四舍五入6、sqrt 求开方7、random求随机数//思考&am…

Webpack常见的插件和模式

1、认识Plugin Webpack的另一个核心是Plugin,官方有这样一段对Plugin的描述: While loaders are used to transform certain types of modules, plugins can be leveraged to perform a wider range of tasks like bundle optimization, asset manageme…

《对线面试官》| 高频计算机网络面试题 pt.2

目录11、Get与POST的区别12、Session、Cookie 的区别13、简单聊聊 HTTP 协议吧14、URI 和 URL 的区别15、GET 和 POST 方法都是安全和幂等的吗?16、说说 HTTP/1.1 相比 HTTP/1.0 提高了什么性能?17、那上面的 HTTP/1.1 的性能瓶颈,HTTP/2 做了…

中国蚁剑的工作原理

中国蚁剑连接http://192.168.11.157/dvwa/hackable/uploads/pass.php蚁剑连接并同时用wireshark抓取流量1274 行,追踪tcp流因为我们的php.php内容是 $_POST[pass],所以这里是post了一个pass参数,后面跟上了命令。通过站长工具-URL解码/编码 (…

15.Isaac教程--Isaac机器人引擎简介

Isaac机器人引擎简介 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录Isaac机器人引擎简介基础Codelets完整的应用基础 本节介绍如何使用 Isaac 机器人引擎。 它介绍了相关术语并解释了 Isaac 应用程序的结构。 Isaac 应用程序由 JavaS…

卫星AIS接收机

1.设备简介星载AIS模块,专门针对小卫星设计的AIS载荷,设计时考虑到CubeSat的尺寸、重量和功率限制,也可以作为较大的LEO卫星上的有效载荷。2.产品特征独立4信道AIS接收机集成LNA和SAW滤波器AIS帧的数据存储支持频谱样本采集安全在轨软件升级支…

【Wiki】XWiki安装教程_War包版本

目录0、XWiki说明1、war包安装说明1.1、环境说明1.2、如果懒得下载可以使用这边准备好的物料包汇总2、war包安装2.1、Tomcat安装2.2、java安装(需要root权限)2.3 、使用 source /etc/profile 刷新linux配置2.4、数据库安装2.5、解压war包与xip2.6、修改配置文件2.6.1、修改WEB-…

mysql快速生成100W条测试数据(4)全球各城市房价和销售数据并存入mysql数据库

首先这个就是我们需要生成的数据类型,这种只是我们用于测试以及学习时候使用,主要就是全球城市房价的均值和一些虚拟的销售数据 这是之前的文章里面包含一些以前的一些操作流程可以进行参考学习 更加详细操作步骤在第一篇文章里面 mysql快速生成100W条测…

Speckle Revit连接器使用教程

Speckle Revit 连接器目前支持 Autodesk Revit 2020、2021、2022 和 🆕2023。 1、安装Speckle revit连接器 要安装 Revit 连接器并添加 Speckle 帐户,请按照 Speckle 管理器中的说明进行操作。 安装后,可以在Speckle选项卡下的功能区菜单中…

一个前端大神电脑里的秘密

前言作为前端仔,当你入职一家公司,拿到新发的电脑,你会对电脑干点啥,装开发环境?装软件?你是否铺天盖地到处找之前电脑备份的东西?又或者是想不起来有什么上一台电脑好用的软件叫什么名&#xf…

KT148A语音芯片420s秒的语音空间是什么意思,mp3文件支持多大

一、问题简介 我想问一下KT148A这个芯片真的能存420秒的语音么?我随便一个5秒的语音mp3格式都65k了,如果是这样的话 那我的mp3的源文件在最小的采样率和最小码率的情况下 mp3文件可以支持多大?有没有实际测试的数据,使用的是一线串…

【可解释性机器学习】可解释机器学习简介与特征选择方法

特征选择:Feature Importance、Permutation Importance、SHAP1. Introduction什么是可解释机器学习(Explainable ML)?为什么需要Explainable ML?直接使用一些可以interpretable的模型不好吗?2. Local Explanation方法…

Homekit智能家居DIY-智能吸顶灯

灯要看什么因素 照度 可以简单理解为清晰度,复杂点套公式来说照度光通量(亮度)单位面积,简单理解的话就是越靠近灯光,看的就越清楚,是个常识性问题。 不同房间户型对照度的要求自然不尽相同,…

http协议之Range

http协议中可能会遇到:请求取消或数据传输中断,这时客户端已经收到了部分数据,后面再请求时最好能请求剩余部分(断点续传);或者,对于某个较大的文件,能够支持客户端多线程分片下载..…