CodeQL基本使用

news2024/12/23 9:32:35

0x01 安装codeql

去github下载一个对应版本的codeql捆绑包。

https://github.com/github/codeql-action/releases

然后解压,这里我是解压到桌面

img

然后用添加到环境变量中 然后在任意位置输入codeql命令,如果能有以下提示就表示安装成功

img

img

然后下载vscode, 并且给vscode安装codeql扩展

img

0x02 创建codeql数据库

在使用 CodeQL 分析代码之前,需要创建一个 CodeQL 数据库。

创建codeql数据库命令:

codeql database create <database> --language=<language-identifier> 

是创建数据库的路径 执行命令会自动创建一个文件夹

是选定的语言 比如java,python等

比如需要审计一个python程序,那么命令就可以如下 (注意这条命令需要在需要审计的源代码目录中使用,codeql默认是使用当前位置作为源文件目录)

codeql database create pythondb --language=python # 也可以用source-root指定源码路径 比如源码文件在d:/python_code codeql database create pythondb --language=python --source-root="d:/python_code"

然后准备好一份python的源代码。我这里是随便去github搜索了一份别人写好的代码

img

执行完毕后可以发现多了一个文件夹,这个就是codeql创建的数据库

img

0x03 codeql使用

打开vscode,打开源码文件夹

img

切换到codeql插件然后选择刚刚codeql创建的数据库文件夹

img

成功之后点击queries选项里面的蓝色字体,可以快速的创建一个ql查询文件。

img

选择对应的语法然后回车

img

成功如下

img

0x04 ql语法简介

分析一下自动生成的脚本文件是什么意思

import python // 用于引入Python语言的元数据和查询库 比如import java就是引用java的元数据和查询库 from File f // 引入文件(File)元数据的语法 select f, “Hello, world!” // (其实这是一条语句) select和sql中的select类似查询一个具体值

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

select关键字

和sql的select类似,查询一个字符串的结果。

img

from关键字

用于定义变量,格式如 from 变量类型 变量名, 如定义字符串变量str如下 (多个变量用逗号分隔)

from string str

from string str1, string str2

wher关键字

用于赋值和逻辑运算,比如where str = "abcde" 就是将str变量赋值为abcde字符串 

where str1 = "a" and str2 = "b" 

注意以上语句需要配合使用不能单独使用,这里是和编程语言的语法有一些区别,更加贴近于sql语法

img

还有一些内置的类,如Function 表示一个函数类

篇幅关系,更多语法查阅官方文档:https://codeql.github.com/docs/

0x05 实际使用

比如这里是用codeql查找sql注入,个人感觉codeql更加考验对于漏洞的理解,比起其他传统的代码审计工具,codeql显得更加灵活。

codeql其实自带了很多ql脚本,这些脚本可以帮助我们去查找漏洞最简单的方式就是使用 CodeQL CLI 捆绑包中包含的标准查询。

命令格式如下

codeql database analyze <database> --format=<format> --output=<output>

//format就是指定分析过程中生成的结果文件的格式,比如csv格式等

//output就是输出的文件名

比如

img

然后打开生成的result.csv文件 可以看到如下结果

img

img

比如查看第一个sql注入漏洞就可以打开/utils/query.py文件 然后找到12行,函数直接excute了sql语句。且中途未经过过滤。

img

在vs中使用codeql可以编写语句,比如查询query函数在哪个位置

img

点击鼠标就可以跳转到对应源码界面

img

然后还可以查询query函数有哪些地方调用了。

 import python  
 from Call call, Name name 
 where call.getFunc() = name and name.getId() = "query" select call, call.getLocation(), "使用了query函数."

img

然后挑选一个函数去跟踪,发现字符串直接拼接到sql语句中。

img

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

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

相关文章

戴尔服务器有8条内存条,开机有一条内存条自检提示出错,可以不用管他吗,有影响吗?

环境 戴尔R730 问题描述 戴尔服务器有8条内存条&#xff0c;开机有一条内存条自检提示出错&#xff0c;可以不用管他吗&#xff0c;有影响吗&#xff1f; 提示B1内存有问题 解决方案 不能&#xff0c;有影响&#xff0c;安装系统时卡住在启动节目无法正常安装&#xff0c;…

mysql原理--redo日志1

1.redo日志是个啥 我们知道 InnoDB 存储引擎是以页为单位来管理存储空间的&#xff0c;我们进行的增删改查操作其实本质上都是在访问页面&#xff08;包括读页面、写页面、创建新页面等操作&#xff09;。我们前边唠叨 Buffer Pool 的时候说过&#xff0c;在真正访问页面之前&a…

神州数码集团荣获“TiDB 社区最佳贡献企业”

日前&#xff0c;神州数码在 TiDB 开源社区中获得了“TiDB 社区最佳贡献企业”奖。PingCAP 颁发该奖项以认可生态企业在社区中的卓越贡献和积极参与。 神州数码与 PingCAP 最早于 2020 年 12 月 28 日进行战略合作&#xff0c;基于全球领先的开源分布式关系型数据库 TiDB&…

详细分析Java中的@JsonFormat注解和@DateTimeFormat注解

目录 前言1. JsonFormat注解2. DateTimeFormat注解3. Demo3.1 无注解3.2 有注解 4. 拓展 前言 下文中涉及MybatisPlus的逻辑删除的知识&#xff0c;可看我之前这篇文章&#xff1a;详细讲解MybatisPlus实现逻辑删除 对应的Navicat设置数据库最新时间可看我这篇文章&#xff1…

修改SSH默认端口,使SSH连接更安全

以CentOS7.9为例&#xff1a; 1、修改配置文件 vi /etc/ssh/sshd_config 2、远程电脑可连接&#xff0c;暂时将SELinux关闭 # 查询状态 getenforce # 关闭 setenforce 0 # 开启 setenforce 1 3、SELinux设置&#xff08;如果启用&#xff09;&#xff0c;semanage管理工具安…

雷达信号处理——恒虚警检测(CFAR)

雷达信号处理的流程 雷达信号处理的一般流程&#xff1a;ADC数据——1D-FFT——2D-FFT——CFAR检测——测距、测速、测角。 雷达目标检测 首先要搞清楚什么是检测&#xff0c;检测就是判断有无。雷达在探测的时候&#xff0c;会出现很多峰值&#xff0c;这些峰值有可能是目标…

GPT function calling v2

原文&#xff1a;GPT function calling v2 - 知乎 OpenAI在2023年11月10号举行了第一次开发者大会&#xff08;OpenAI DevDays&#xff09;&#xff0c;其中介绍了很多新奇有趣的新功能和新应用&#xff0c;而且更新了一波GPT的API&#xff0c;在1.0版本后的API调用与之前的0.…

品牌出海新风尚:联名营销战略全面解析

随着全球化的推进&#xff0c;品牌出海已经成为许多企业拓展市场的重要战略之一。然而&#xff0c;要想在海外市场中获得成功&#xff0c;品牌需要面对一系列的挑战&#xff0c;包括文化差异、市场竞争、消费者需求等等。在这样的背景下&#xff0c;联名营销作为一种有效的品牌…

【ChatGPT-Share,国内可用】GPTS商店大更新:一探前沿科技的魅力!

使用地址&#xff1a;https://hello.zhangsan.cloud/list GPTS商店预览,王炸更新 精选应用&#xff1a; 系统内置应用&#xff1a; 绘画应用&#xff1a; 写作应用&#xff1a; 高效工具应用&#xff1a; 学术搜索和分析应用&#xff1a; 编程应用&#xff1a; 教育应…

6.3、SDN在云计算中的应用

目录 一、SDN概念 1.1、传统网络机制 1.2、SDN网络机制 1.3、二者区别 1.4、SDN架构 二、云数据中心 2.1、公有云环境特点 2.2、两大挑战 2.3、云数据中心引入SDN技术解决两大挑战 三、SDN云计算解决方案 3.1、SDN云计算解决方案之控制平面openflow协议 3.1.…

vue前端开发自学,父子组件传递数据,借助于Props实现子传父

vue前端开发自学,父子组件传递数据,借助于Props实现子传父&#xff01; 之前我们说过&#xff0c;Props这个是用在父传子的情况下&#xff0c;今天为大家介绍的代码&#xff0c;就是在父组件里&#xff0c;自定义事件&#xff0c;绑定一个函数&#xff0c;让子组件可以接受到这…

架构01 - 知识体系详解

架构&#xff0c;又称为知识体系&#xff0c;是指在特定领域或系统中的组织结构和设计原则。它涵盖了该领域或系统的核心概念、基础理论、方法技术以及实践经验等。架构的主要作用是提供一个全面且系统化的视角&#xff0c;帮助人们理解和应用相关知识&#xff0c;并指导系统的…

PHP短链接url还原成长链接

在开发过程中&#xff0c;碰到了需要校验用户回填的短链接是不是系统所需要的&#xff0c;于是就需要还原找出短链接所对应的长链接。 长链接转短链接 在百度上搜索程序员&#xff0c;跳转页面后的url就是一个长链接。当然你可以从任何地方复制一个长链接过来。 长链接 http…

MySQL 按日期流水号 条码 分布式流水号

有这样一个场景&#xff0c;有多台终端&#xff0c;要获取唯一的流水号&#xff0c;流水号格式是 日期0001形式&#xff0c;使用MySQL的存储过程全局锁实现这个需求。 以下是代码示例。 注&#xff1a;所有的终端连接到MySQL服务器获取流水号&#xff0c;如果获取到的是 “-1”…

2022 年全国职业院校技能大赛高职组云计算赛项试卷

【赛程名称】云计算赛项第一场-私有云 某企业拟使用OpenStack 搭建一个企业云平台&#xff0c;以实现资源池化弹性管理、企业应用集中管理、统一安全认证和授权等管理。 系统架构如图 1 所示&#xff0c;IP 地址规划如表 1 所示。 图 1 系统架构图 表 1 IP 地址规划 设备…

【Oracle】数据库对象

一、视图 1、视图概述 视图是一种数据库对象 视图 > 封装sql语句 > 虚拟表 2、视图的优点 简化操作&#xff1a;视图可以简化用户处理数据的方式。着重于特定数据&#xff1a;不必要的数据或敏感数据可以不出现在视图中。视图提供了一个简单而有效的安全机制&#x…

使用 gitee+sphinx+readthedocs 搭建个人博客

给大家安利如何快速搭建个人博客网站&#xff01; 前言 这是我本地运行的一个使用sphinx构建的博客服务&#xff0c;这些文章&#xff0c;都是用markdown写的。 一直有个想法&#xff0c;就是把自己写的这些文件&#xff0c;搞成一个博客网站&#xff0c;放到网上&#xff0c…

正面PK智驾,华为与博世「硬扛」

12月20日&#xff0c;随着奇瑞星纪元ES的亮相上市&#xff0c;华为与博世&#xff0c;分别作为新旧时代的供应商角色&#xff0c;首次在高阶智驾赛道进行正面PK。 11月28日&#xff0c;奇瑞和华为合作的首款车型智界S7上市&#xff0c;作为星纪元ES的兄弟车型&#xff0c;搭载华…

Jenkins基础篇--凭据(Credential)管理

什么是凭据 Jenkins的Credentials直译为证书、文凭&#xff0c;我们可以理解为它是钥匙&#xff0c;用来做某些事情的认证。 如Jenkins 和 GitLab交互时&#xff0c;需要添加GitLab的API令牌和登录凭证。 如Jenkins 添加从节点时&#xff0c;需要添加从节点的登录凭证或者Je…

Maven和MyBatis框架简单实现数据库交互

MyBatis是一种基于Java语言的持久层框架&#xff0c;它的主要目的是简化与数据库的交互过程。MyBatis通过XML或注解配置来映射Java对象和数据库表之间的关系&#xff0c;并提供了灵活的查询方式和结果集处理机制。MyBatis还提供了事务管理、缓存机制、插件扩展等特性。 使用My…