前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >codeql基础

codeql基础

原创
作者头像
c2k2o6
发布2022-02-15 14:20:45
4140
发布2022-02-15 14:20:45
举报
文章被收录于专栏:c2k2o6

https://blog.csdn.net/weixin_39408343/article/details/95984062

污点跟踪分析技术

跟踪并分析污点信息在程序中的执行流程

什么是污点?

scanf("%d", &x);

通常来自于程序的外部输入,即hacker输入的点,标记为污点数据

通过跟踪和污点数据有关的程序执行流程,信息流向,可以知道是否会影响关键的程序操作,从而进行漏洞挖掘

产生点source点,污点信息的开端

制定并利用特定规则跟踪污点信息的传播流程

关键程序点 sink点 检测关键操作是否会收到污点信息的影响

数据依赖传播和控制依赖传播

数据依赖传播 即 显式信息流

控制依赖传播 即 隐式信息流

比如

代码语言:javascript
复制

if (x > 0)
    y = 1;
else
    y = 0;

y的值由x的值影响决定,若x为污染信息,y也是污染信息

代码语言:javascript
复制

String user = getUser();
String pass = getPass();
String sqlQuery = 
"select * from login where user = 
'" +user + "' and pass='" + pass + "'";
Statement stam = con.createStatement();
ResultSetrs = stam.executeQuery(sqlQuery);
if(rs.next())
  success = true;

跟踪用户输入的user和pass,将其标记为污点信息,传入sqlQuery变量,sqlQuery变量也被感染为污点信息,进而程序被判定存在sql注入漏洞

代码语言:javascript
复制

Usage: codeql <command> <argument>...
Create and query CodeQL databases, or work with the QL language.

GitHub makes this program freely available for the analysis of open-source
software and certain other uses, but it is not itself free software. Type
codeql --license to see the license terms.

      --license              Show the license terms for the CodeQL toolchain.
Common options:
  -h, --help                 Show this help text.
  -v, --verbose              Incrementally increase the number of progress
                               messages printed.
  -q, --quiet                Incrementally decrease the number of progress
                               messages printed.
Some advanced options have been hidden; try --help -v for a fuller view.
Commands:
  query     Compile and execute QL code.
  bqrs      Get information from .bqrs files.
  database  Create, analyze and process CodeQL databases.
  dataset   [Plumbing] Work with raw QL datasets.
  test      Execute QL unit tests.
  resolve   [Deep plumbing] Helper commands to resolve disk locations etc.
  execute   [Deep plumbing] Low-level commands that need special JVM options.
  version   Show the version of the CodeQL toolchain.
  generate  Commands that generate useful output.
  github    Commands useful for interacting with the GitHub API through CodeQL.
  pack      [Experimental] Commands to manage QL packages.

AST抽象语法树

源代码------》》》》 转换为 -----》》》》 AST

抽象语法树 abstract syntax  code  AST,是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,抽象语法树并不会表示出真实语法出现的每一个细节,例如

嵌套括号被隐含在树的结构中,并没有以节点的形式呈现。

抽象语法树并不依赖于源语言的语法,也就是说语法分析阶段所采用的上下文无文文法,因为在写文法时,经常会对文法进行等价的转换(消除左递归,回溯,二义性等),这样会给文法分析引入一些多余的成分,对后续阶段造成不利影响,甚至会使合个阶段变得混乱。因些,很多编译器经常要独立地构造语法分析树,为前端,后端建立一个清晰的接口。

抽象语法树在很多领域有广泛的应用,比如浏览器,智能编辑器,编译器。

抽象语法树实例

从局部看起,从下网上看

图片
图片
图片
图片
图片
图片
图片
图片
图片
图片
图片
图片

迭代

图片
图片

消除左递归

递归分为立即左递归和非立即左递归

图片
图片

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
智能编辑
智能编辑(Intelligent Editing,IE)多维度的 AI 技术结合腾讯领先的音视频编解码方案,提供视频剪辑、拆条、智能集锦等功能,满足企业高效、智能的视频内容生产需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档