RIPS源码精读(一):逻辑流程及lib文件夹大致说明
很早就有深入分析学习一款源代码审计工具的想法,在查找rips源码分析相关资料时,发现相关的学习分析资料较少,于是选择rips作为该系列文章的分析对象,因为没有最新版的rips的源码,因此选取的rips源码为已公开的版本。因为我是第一次将具体的分析写下来,并且本身的技术能力问题,在某些场景下的用语或者技术细节描述可能存在偏差,请师傅们包涵。
引言
RIPS是一个源代码分析工具,它使用了静态分析技术,能够自动化地挖掘PHP源代码潜在的安全漏洞
本篇内容
作为本系列文章的开始,只介绍rips的逻辑流程以及lib文件夹下各文件大致内容分析,不具体分析代码审计的细节,相关细节在之后的文章中分析
整体结构
RIPS工具的整体架构如下:
+-- CHANGELOG [file]
+-- config [dir]
| +-- general.php
| +-- help.php
| +-- info.php
| +-- securing.php
| +-- sinks.php
| +-- sources.php
| +-- tokens.php
+-- css [dir]
| +-- ayti.css
| +-- barf.css
| +-- code-dark.css
| +-- espresso.css
| +-- notepad++.css
| +-- phps.css
| +-- print.css
| +-- rips.css
| +-- rips.png
| +-- scanning.gif
| +-- term.css
| +-- twlight.css
+-- index.php [file]
+-- js [dir]
| +-- exploit.js
| +-- hotpatch.js
| +-- netron.js
| +-- script.js
+-- lib [dir]
| +-- analyzer.php
| +-- constructer.php
| +-- filer.php
| +-- printer.php
| +-- scanner.php
| +-- searcher.php
| +-- tokenizer.php
+-- LICENSE [file]
+-- main.php [file]
+-- README.md [file]
+-- windows [dir]
| +-- code.php
| +-- exploit.php
| +-- function.php
| +-- help.php
| +-- hotpatch.php
| +-- leakscan.php
config目录:放置各种配置信息
css目录:放置css样式文件
js目录:放置js代码文件
lib目录:rips的核心代码文件
window:rips的前端构成
lib文件夹说明
lib文件夹存放rips运行的核心文件,定义了大量函数以及类用以完成rips完整的代码分析功能
analyzer.php
仅定义了Analyzer类,并在类中定义了三个函数,分别是get_tokens_value,get_var_value,getBraceEnd,Analyzer类主要用以根据token信息分析文件信息
constructer.php
本文件定义了五个类,分别为VarDeclare、VulnBlock、VulnTreeNode、InfoTreeNode、FunctionDeclare,分别用以存储变量、漏洞总干、每个漏洞具体信息、存储信息、存储函数
filer.php
仅定义了函数read_recursiv,用以遍历文件夹下的文件信息
printer.php
定义大量函数,基本都是用于将分析得到的结果输出至前端页面
scanner.php
仅定义了scanner类,类中包含大量方法,本文件为rips分析操作的核心文件,包括token处理、字段处理等功能
searcher.php
仅定义了searchFile函数,主要用于根据token信息分析漏洞情况,并使用VulnTreeNode类加以实例化
tokenizer.php
仅定义了Tokenizer类,类中定义大量函数,其余文件中所用到的token信息均来源于此文件
index.php 分析
index.php是rips项目的入口文件,因此我放在了第一个分析。
代码构成主要是前端文件,功能方面主要将目标路径、扫描类型等参数发送至分析模块。
在index.php的112行附近,触发点击事件,进入main.php
main.php分析
main.php是整个rips代码分析的开始部分
配置文件引入:
include('config/general.php'); // 主要为各种参数的初始设置
include('config/sources.php'); // 可能从外部引入数据的函数或全局变量,如$_GET、file_get_contents()
include('config/tokens.php'); // 将代码分割成许多个token,以便于词法分析
include('config/securing.php'); // 根据函数的目的使用以及效果不同划分,如 htmlspecialchars 划入数组变量 $F_SECURING_XSS
include('config/sinks.php'); // 敏感函数汇总,根据函数对应的功能不同进行更进一步的划分
include('config/info.php'); // 对各种函数名添加对应注释,如sqlite_open()=>'using DBMS SQLite'
核心代码引入:
include('lib/constructer.php'); // 类信息
include('lib/filer.php'); // 仅定义了一个函数,用以获取指定路径下所有文件
include('lib/tokenizer.php'); // prepare and fix token list
include('lib/analyzer.php'); // string analyzers
include('lib/scanner.php'); // provides class for scan
很早就有深入分析学习一款源代码审计工具的想法,在查找rips源码分析相关资料时,发现相关的学习分析资料较少,于是选择rips作为该系列文章的分析对象,因为没有最新版的rips的源码,因此选取的rips源码为已公开的版本。因为我是第一次将具体的分析写下来,并且本身的技术能力问题,在某些场景下的用语或者技术细节描述可能存在偏差,请师傅们包涵。
引言
RIPS是一个源代码分析工具,它使用了静态分析技术,能够自动化地挖掘PHP源代码潜在的安全漏洞
本篇内容
作为本系列文章的开始,只介绍rips的逻辑流程以及lib文件夹下各文件大致内容分析,不具体分析代码审计的细节,相关细节在之后的文章中分析
整体结构
RIPS工具的整体架构如下:
+-- CHANGELOG [file]
+-- config [dir]
| +-- general.php
| +-- help.php
| +-- info.php
| +-- securing.php
| +-- sinks.php
| +-- sources.php
| +-- tokens.php
+-- css [dir]
| +-- ayti.css
| +-- barf.css
copyright 无奈人生
| +-- code-dark.css
| +-- espresso.css
| +-- notepad++.css
| +-- phps.css
| +-- print.css
| +-- rips.css
| +-- rips.png
| +-- scanning.gif
| +-- term.css
| +-- twlight.css
+-- index.php [file]
+-- js [dir]
| +-- exploit.js
| +-- hotpatch.js
| +-- netron.js
| +-- script.js
+-- lib [dir]
| +-- analyzer.php
| +-- constructer.php
| +-- filer.php
| +-- printer.php
| +-- scanner.php
| +-- searcher.php
| +-- tokenizer.php
+-- LICENSE [file]
+-- main.php [file]
+-- README.md [file]
+-- windows [dir]
| +-- code.php
| +-- exploit.php
| +-- function.php
| +-- help.php
| +-- hotpatch.php
| +-- leakscan.php
config目录:放置各种配置信息
css目录:放置css样式文件
js目录:放置js代码文件
lib目录:rips的核心代码文件
window:rips的前端构成
lib文件夹说明
lib文件夹存放rips运行的核心文件,定义了大量函数以及类用以完成rips完整的代码分析功能
analyzer.php
仅定义了Analyzer类,并在类中定义了三个函数,分别是get_tokens_value,get_var_value,getBraceEnd,Analyzer类主要用以根据token信息分析文件信息
constructer.php
本文件定义了五个类,分别为VarDeclare、VulnBlock、VulnTreeNode、InfoTreeNode、FunctionDeclare,分别用以存储变量、漏洞总干、每个漏洞具体信息、存储信息、存储函数
filer.php
仅定义了函数read_recursiv,用以遍历文件夹下的文件信息
printer.php
定义大量函数,基本都是用于将分析得到的结果输出至前端页面
scanner.php
仅定义了scanner类,类中包含大量方法,本文件为rips分析操作的核心文件,包括token处理、字段处理等功能
searcher.php
仅定义了searchFile函数,主要用于根据token信息分析漏洞情况,并使用VulnTreeNode类加以实例化
tokenizer.php www.wnhack.com
仅定义了Tokenizer类,类中定义大量函数,其余文件中所用到的token信息均来源于此文件
index.php 分析
index.php是rips项目的入口文件,因此我放在了第一个分析。
代码构成主要是前端文件,功能方面主要将目标路径、扫描类型等参数发送至分析模块。
在index.php的112行附近,触发点击事件,进入main.php
main.php分析
main.php是整个rips代码分析的开始部分
配置文件引入:
include('config/general.php'); // 主要为各种参数的初始设置
include('config/sources.php'); // 可能从外部引入数据的函数或全局变量,如$_GET、file_get_contents()
include('config/tokens.php'); // 将代码分割成许多个token,以便于词法分析
include('config/securing.php'); // 根据函数的目的使用以及效果不同划分,如 htmlspecialchars 划入数组变量 $F_SECURING_XSS
include('config/sinks.php'); // 敏感函数汇总,根据函数对应的功能不同进行更进一步的划分
include('config/info.php'); // 对各种函数名添加对应注释,如sqlite_open()=>'using DBMS SQLite'
核心代码引入:
include('lib/constructer.php'); // 类信息
include('lib/filer.php'); // 仅定义了一个函数,用以获取指定路径下所有文件
include('lib/tokenizer.php'); // prepare and fix token list
include('lib/analyzer.php'); // string analyzers
include('lib/scanner.php'); // provides class for scan
无奈人生安全网