精华内容
下载资源
问答
  • rips0.55汉化版

    2018-08-09 11:38:32
    PHP代码检查工具(审计工具).RIPS是一个用php编写的源代码分析工具,它使用了静态分析技术,能够自动化地挖掘PHP源代码潜在的安全漏洞。...RIPS能够检测XSS、SQL注入、文件泄露、Header Injection漏洞等。
  • RIPS扩展 - 启用自动客户端数据导入。导入新的客户端信息之前检查现有的客户端数据。 欢迎使用Ripsistent,Ripstraordinary,自动RIPS客户端导入实用程序! 此扩展可用于使用户自动将客户端信息(基本信息,服务数据...
  • PHP代码审核工具, RIPS, 0.55汉化版, 可以帮你快速定位 php漏洞代码!
  • rips0.55汉化版.zip

    2020-02-01 12:44:23
    Risp是一款开源的代码审计工具,可以帮助快速对Web进行漏洞挖掘以及代码挖掘效率对目标网站进行白盒测试,减轻人工审计的负担,但是开源版本在2013年就已经停止更新,所以本次分享的0.55版本,将压缩包解压后放到Web...
  • PHP 代码审计神器rips

    2018-07-04 10:53:19
    RIPS是一款对PHP源码进行风险扫描的工具,其对代码扫描的方式是常规的正则匹配,确定sink点;还是如flowdroid构建全局数据流图,并分析存储全局数据可达路径
  • rips0.55汉化版.rar

    2019-06-12 14:29:52
    rips0.55汉化版和使用教程,检测php代码安全,全站检索并给出修改意见!!!!
  • Ripser是用于计算Vietoris-Rips持久性条形码的精益C ++代码。 它可以做这件事,但是做得非常好。 要观看Ripser功能的实时演示,请转到。 计算在浏览器内部进行(用于将Ripser编译为,在最近的浏览器中受支持)。 ...
  • rips-0.55下载

    2016-04-15 10:20:10
    rips-0.55
  • Vietoris-Rips综合建筑商 小型数据库,用于使用增量算法来构建Vietoris-Rips Complex,如下文所述:Afra Zomorodian的 。 Vietoris-Rips Complex的建设比Cech Complex快得多,因此具有更实际的应用。 安装 npm ...
  • 具有RIPS测量的基于RRNS的鲁棒测距算法
  • 常用源码审计工具 rips、seay 打包
  • rips下载

    2021-07-26 18:05:28
    今天看了漏洞银行关于代码审计的视频,视频结尾推荐了一款代码审计工具:rips 由于是纯萌新,下载便让我耗费了一番功夫。 我直接说下载过程了 首先下载xampp(也可使用phpstudy,过程类似)地址:...

    今天看了漏洞银行关于代码审计的视频,视频结尾推荐了一款代码审计工具:rips
    由于是纯萌新,下载便让我耗费了一番功夫。
    我直接说下载过程了
    首先下载xampp(也可使用phpstudy,过程类似)地址:https://www.apachefriends.org/zh_cn/download.html
    安装与配置可看其他博主
    完成后应该如下图:
    在这里插入图片描述

    然后进入rips官网,地址:http://rips-scanner.sourceforge.net/
    在这里插入图片描述
    点击here后进行下载
    下载完成后解压到本地网站根目录下
    在这里插入图片描述
    这里自由选择
    在这里插入图片描述
    然后在浏览器输入 localhost/(你解压的文件名字)/就可以进去了
    在这里插入图片描述
    具体使用有很多文章可参考,我就不多赘述了

    展开全文
  • RIPS扩展 - 添加对UNHCR#,Phone#和DOB的验证 欢迎来到RIPS扩展 - 验证应用程序! 此应用程序将帮助RIPS系统的用户在某些字段未正确填充时显示警告,并防止数据的保存。这里是每个领域的细节: 1)难民署案件号码 ...
  • rips是一款代码审计工具,下载下来并放在网站跟目录就可以了,然后直接通过浏览器访问,很简单,傻瓜式的使用。 代码审计:https://nchc.dl.sourceforge.net/project/rips-scanner/rips-0.55.zip 使用phpstudy搭建...

    rips是一款代码审计工具,下载下来并放在网站跟目录就可以了,然后直接通过浏览器访问,很简单,傻瓜式的使用。

    代码审计:https://nchc.dl.sourceforge.net/project/rips-scanner/rips-0.55.zip

    使用phpstudy搭建你要审计的网站bluecms。

    将rips解压放在网站根目录,然后使用浏览器访问。

    输入网站路径进行代码审计。

    一个一个的来看,先审计ad_js.php文件。

    存在sql注入漏洞:1,get方式传入了ad_id参数;2,判断参数是否为空值,为空值则输出“”“Error”;

    3,将$ad_id的值代入sql语句进行有getone()方法执行。

    通过搜索,发现getone()函数的定义。

    查看mysql.class.php

    定义了一个MySQL类。数据库编码还设置了gbk编码,可能还有宽字节注入。

    找到getone()函数,竟然没有做任何过滤,直接执行了sql语句。

    尝试利用,还真的有宽字节注入,但是这个反斜杠是哪里出现的,类和ad_js.php都没有找到。

    原来在文件开头包含了/include/common.inc.php文件。

    在这个文件里,对所有传入的参数进行了deep_addslashes方法处理

    继续跟进deep_addslashes方法,发现只是在预定义的字符' " \ null之前加入反斜杠。

    确定存在sql注入漏洞,数字型的。

    有7个字段

    回显位置是7

    直接读取管理账号密码

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 下载好Rips之后,打开浏览器,输入url:localhost/rips: Rips 主界面 可以看到,这就是rips的主界面,给人的第一印象就是比较简单,选型并不复杂,所以也非常容易上手! 接下来我会向你一一介绍这些选项的含义。 ...

    一、代码审计工具介绍

    代码审计工具可以辅助我们进行白盒测试,大大提高漏洞分析和代码挖掘的效率。

    在源代码的静态安全审计中,使用自动化工具辅助人工漏洞挖掘,一款好的代码审计软件,可以显著提高审计工作的效率。学会利用自动化代码审计工具,是每一个代码审计人员必备的能力。

    代码审计工具按照编程语言、审计原理、运行环境可以有多种分类。商业性的审计软件一般都支持多种编程语言,比如VCG、Fortify SCA,缺点就是价格比较昂贵。其他常用的代码审计工具还有findbugs、codescan、seay,但是大多都只支持Windows环境。所以针对PHP代码审计,这里介绍一款免费并且支持linux环境的 PHP 代码审计软件——Rips。

    二、RIPS 使用教程

    RIPS是一个用 PHP 编写的源代码分析工具,它使用了静态分析技术,能够自动化地挖掘 PHP 源代码潜在的安全漏洞。渗透测试人员可以直接容易的审阅分析结果,而不用审阅整个程序代码。由于静态源代码分析的限制,漏洞是否真正存在,仍然需要代码审阅者确认。RIPS 能够检测 XSS, SQL 注入, 文件泄露, Header Injection 漏洞等。

    下载好Rips之后,打开浏览器,输入url:localhost/rips:

    cd1cb66e4d7d

    Rips 主界面

    可以看到,这就是rips的主界面,给人的第一印象就是比较简单,选型并不复杂,所以也非常容易上手!

    接下来我会向你一一介绍这些选项的含义。

    subdirs:如果勾选上这个选项,会扫描所有子目录,否则只扫描一级目录,缺省为勾选。

    verbosity level:选择扫描结果的详细程度,缺省为1(建议就使用1)。

    vuln type:选择需要扫描的漏洞类型。支持命令注入、代码执行、SQL注入等十余种漏洞类型,缺省为全部扫描。

    code style:选择扫描结果的显示风格(支持9种语法高亮)。

    /regex/:使用正则表达式过滤结果。

    值得注意的是:官方宣称rips只支持在firefox中使用。

    接下来在path/file中输入扫描目录, 点击scan:

    cd1cb66e4d7d

    scan

    cd1cb66e4d7d

    result

    可以看到,扫描结果以图标的形式给出,非常直观。

    rips 对扫描到的课程存在漏洞的代码,不仅会给出解释,还会给去相应的利用代码。比如:

    cd1cb66e4d7d

    结果详情

    上图中,扫描到一个命令注入漏洞,打开详情,可以看到它给出的解释是Userinput reaches sensitive sink.,即用户能够输入敏感信息, 造成命令注入漏洞。

    点击左边的问号,会为你解释什么是命令注入漏洞:

    cd1cb66e4d7d

    help

    点击左边的红色按钮,还能生成漏洞利用代码:, 比如,就拿这个漏洞来举例,再bash一栏种输入uname -a,点击creat,再将生成的代码保存为testcode.php:

    cd1cb66e4d7d

    code

    cd1cb66e4d7d

    code

    在testcode.php保存目录执行命令:php testcode.php localhost/codeaudit/cmdinject:

    cd1cb66e4d7d

    攻击结果

    可以看到成功返回服务器版本信息。

    另外,help信息中还给出了漏洞的修补方案:

    cd1cb66e4d7d

    rips cmdinject7.png

    翻译过来就是:

    将代码限制为非常严格的字符集或构建允许输入的命令的白名单。

    不要试图过滤恶意的命令,攻击者总是能绕过。

    尽量避免使用系统命令执行功能。

    示例代码:

    math?formula=modes%20%3D%20array%EF%BC%88%E2%80%9Cr%E2%80%9D%EF%BC%8C%E2%80%9Cw%E2%80%9D%EF%BC%8C%E2%80%9Ca%E2%80%9D%EF%BC%89%3B%20if%EF%BC%88%EF%BC%81in_array%EF%BC%88 _ GET [“mode”],$ modes))exit;

    三、总结

    如果你觉得这篇文章讲的不错的话,可以关注我的其他文章和课程:

    展开全文
  • rips-NDSS14.pdf

    2021-11-18 17:26:42
    rips-NDSS14
  • RIPS是一款对PHP源码进行风险扫描的工具,其对代码扫描的方式是常规的正则匹配,确定sink点;还是如flowdroid构建全局数据流图,并分析存储全局数据可达路径;下面就从其源码上略探一二。1、扫描流程分析其源码前,...

    RIPS是一款对PHP源码进行风险扫描的工具,其对代码扫描的方式是常规的正则匹配,确定sink点;还是如flowdroid构建全局数据流图,并分析存储全局数据可达路径;下面就从其源码上略探一二。

    1、扫描流程

    分析其源码前,我们需要缕清其扫描的流程,方便后面的分析,下图展示其进行扫描的主界面:

    91fa37c87851bde4be60d5330c1b566e.png

    先简单介绍下每个标签的基本功能:path/file:待扫描代码的文件地址;

    subdirs:是否对代码的子目录进行扫描,勾选将会扫描子目录,不勾选只扫描当前目录下的PHP文件;

    verbosity level:选择source点,即可控制的输入点,定义在rips下config/sources.php中;

    vuln type:选择sink点,即可能会触发各种风险的函数,定义在rips下config/sinks.php中;

    scan:选择好前面的选项,点击该按钮即可开始扫描;

    code style:扫描结果的展示方式;

    /regex/:要搜索内容的正则表达式;

    search:根据正则表达式对全局代码进行搜索;

    在进行扫描时一般将扫描文件目录粘贴到第一栏中,点击scan进行扫描,那么这个scan就是执行扫描的开始点;点击scan按钮会调用js/script.js中的scan方法进行扫描,该方法将会获取在主界面中获取的参数,并通过XMLHttpRequest方法传递给rips主目录下的main.php中进行处理。在main.php中主要执行一些赋值的操作,及调用scanner.php进行具体的扫描,下面的代码便是其调用scanner.php的相关代码。// scan

    $scan = new Scanner($file_scanning, $scan_functions, $info_functions, $source_functions);

    $scan->parse();

    $scanned_files[$file_scanning] = $scan->inc_map;

    其赋值对象主要是$file_scanning, $scan_functions, $info_functions, $source_functions这四个对象,四个对象的含义如下所示:$file_scanning:表示要扫描的php文件,如果扫描的对象是一个文件,那么该参数就代表这个对象本身;如果扫描对象是一个目录,RIPS将会对目录中的文件进行逐个扫描,该对象就代表目录中的每个文件。

    $scan_functions:sink点,会触发漏洞的函数名称的列表,根据选择的vuln type,通过config/sinks.php进行构造。

    $info_functions:设备信息,根据扫描文件中使用的函数特征值确定,通过config/info.php进行构造。

    $source_functions:source点,可控制的输入点,通过config/sources.php进行构造。

    scanner的扫描可以把它大致分为两步,第一步是初始化Scanner对象;第二步则是最关键的漏洞扫描,通过parse()方法进行。

    2、代码扫描

    2.1 初始化Scanner对象

    此处主要通过__construct方法执行一些初始化操作,对其中一些关键代码进行说明:function __construct($file_name, $scan_functions, $info_functions, $source_functions)

    {

    $this->file_name = $file_name;

    $this->scan_functions = $scan_functions;

    $this->info_functions = $info_functions;

    $this->source_functions = $source_functions;

    此处主要是将main.php中传递过来的文件赋值给类变量,这几个变量是初始化后面一些类变量的基础。下面将是初始化的关键步骤,为方便说明将在代码中直接进行注释说明:$this->inc_file_stack = array(realpath($this->file_name));                           // 待扫描文件的真实地址,存入数组中

    $this->inc_map = array();

    $this->include_paths = Analyzer::get_ini_paths(ini_get("include_path"));   // 文件所包含的路径,单个结果一般为:Array( [0] => .  [1] => ),即文件的自身路径

    $this->file_pointer = end($this->inc_file_stack);                                          // 文件地址数组中最后的元素,值为文件自身真实路径

    if(!isset($GLOBALS['file_sinks_count'][$this->file_pointer]))

    $GLOBALS['file_sinks_count'][$this->file_pointer] = 0;                              // 初始化该文件sink点统计数目

    $this->lines_stack = array();

    $this->lines_stack[] = file($this->file_name);                                             // 读取待扫描文件内容,存储到一个数组中

    $this->lines_pointer = end($this->lines_stack);                                        // 由于文件内容存储在数组的第一个元素中,且数组长度为1,此处代表将文件内容逐行存储在一个数组中

    $this->tif = 0; // tokennr in file

    $this->tif_stack = array();

    // preload output

    echo $GLOBALS['fit'] . '|' . $GLOBALS['file_amount'] . '|' . $this->file_pointer . ' (tokenizing)|' . $GLOBALS['timeleft'] . '|' . "\n";

    @ob_flush();

    flush();

    // tokenizing

    $tokenizer = new Tokenizer($this->file_pointer);

    $this->tokens = $tokenizer->tokenize(implode('',$this->lines_pointer));

    unset($tokenizer);                                                                                     // 上面几行是整个分析的关键,将在下面进行详细的说明

    // add auto includes from php.ini

    if(ini_get('auto_prepend_file')) { $this->add_auto_include(ini_get('auto_prepend_file'), true);}

    if(ini_get('auto_append_file')) { $this->add_auto_include(ini_get('auto_append_file'), false);}

    // 校验php配置文件(php.ini)中是否存在自动包含的文件,如果存在将直接添加到$this->tokens的类变量中

    此处将粗略说明$this->tokens类变量的生成,该变量的生成主要调用lib/tokenizer.php中的方法,下面是其关键代码:public function tokenize($code) {

    $this->tokens = token_get_all($code);

    $this->prepare_tokens();

    $this->array_reconstruct_tokens();

    $this->fix_tokens();

    $this->fix_ternary();

    #die(print_r($this->tokens));

    return $this->tokens;

    }

    通过调用ZEND引擎的token_get_all方法将PHP源码分解成PHP tokens(参考:http://php.net/manual/en/function.token-get-all.php),并对这些tokens进行相关处理优化,处理优化的过程没有进行仔细的研究,此处不做详细介绍。为了让大家对ZEND引擎生成的tokens有个更直观的认识,这是将使用一个简单的例子分别展示源码、token_get_all生成的原始tokens、处理后的tokens,通过后面的对比可以粗略的看出,处理后的tokens比原始生成的tokens更加简洁,去除了一些对于风险扫描无用的tokens,如<?php 、?>、空字节等。如下所示:

    源码:<?php  echo $_GET('info'); ?>

    原始tokens:Array

    (

    [0] => Array

    (

    [0] => 374

    [1] => <?php

    [2] => 1

    )

    [1] => Array

    (

    [0] => 317

    [1] => echo

    [2] => 2

    )

    [2] => Array

    (

    [0] => 377

    [1] =>

    [2] => 2

    )

    [3] => Array

    (

    [0] => 310

    [1] => $_GET

    [2] => 2

    )

    [4] => (

    [5] => Array

    (

    [0] => 316

    [1] => 'info'

    [2] => 2

    )

    [6] => )

    [7] => ;

    [8] => Array

    (

    [0] => 377

    [1] =>

    [2] => 2

    )

    [9] => Array

    (

    [0] => 376

    [1] => ?>

    [2] => 3

    )

    )

    处理后的tokens:Array

    (

    [0] => Array

    (

    [0] => 317

    [1] => echo

    [2] => 2

    )

    [1] => Array

    (

    [0] => 310

    [1] => $_GET

    [2] => 2

    )

    [2] => (

    [3] => Array

    (

    [0] => 316

    [1] => 'info'

    [2] => 2

    )

    [4] => )

    [5] => ;

    [6] => ;

    )

    2.2 parse扫描

    获取了需要扫描的PHP tokens,下一步就是进行最关键的风险扫描了,风险扫描主体函数在lib/scanner.php文件中的parse()方法。该方法中会遍历2.1中生成的tokens,对tokens进行逐个扫描,根据每个token是否为数组(is_array)分别进行操作,由于整体代码比较庞杂,此处挑选处理上的几个关键点,并结合实际的代码,对其扫描的方式进行探究。下面先展示本次测试使用的源码,主要包含两个文件commond_exec.php与para.php两个文件,源码如下所示:commond_exec.php:

    include('para.php');

    $str = 'command';

    $command = para($str);

    shell_exec( $command );

    ?>

    para.php:

    function para($str){

    return $_GET($str);

    }

    ?>

    扫描的目标文件是commond_exec.php,此时其生成的tokens如下所示:Array

    (

    [0] => Array

    (

    [0] => 262

    [1] => include

    [2] => 2

    )

    [1] => (

    [2] => Array

    (

    [0] => 318

    [1] => 'para.php'

    [2] => 2

    )

    [3] => )

    [4] => ;

    [5] => Array

    (

    [0] => 312

    [1] => $str

    [2] => 4

    )

    [6] => =

    [7] => Array

    (

    [0] => 318

    [1] => 'command'

    [2] => 4

    )

    [8] => ;

    [9] => Array

    (

    [0] => 312

    [1] => $command

    [2] => 5

    )

    [10] => =

    [11] => Array

    (

    [0] => 310

    [1] => para

    [2] => 5

    )

    [12] => (

    [13] => Array

    (

    [0] => 312

    [1] => $str

    [2] => 5

    )

    [14] => )

    [15] => ;

    [16] => Array

    (

    [0] => 310

    [1] => shell_exec

    [2] => 6

    )

    [17] => (

    [18] => Array

    (

    [0] => 312

    [1] => $command

    [2] => 6

    )

    [19] => )

    [20] => ;

    [21] => ;

    )

    对tokens进行遍历时,如果该token的类型是数组,那么分别获取该数组中的每个值,如下所示:$token_name = $this->tokens[$i][0];     // 该token的名称,相当于变量名称

    $token_value = $this->tokens[$i][1];    // 该token的值,相当于变量的值

    $line_nr = $this->tokens[$i][2];            // token出现在源码的第几行

    2.2.1 文件包含处理

    对token进行逐个扫描时,第一个出现的token就是便是include函数,RIPS遇到这个函数时会根据文件包含出现的位置,获取被包含文件的tokens,插入到原tokens语句的后面,其具体的操作代码如下所示:$tokenizer = new Tokenizer($try_file);

    $inc_tokens = $tokenizer->tokenize(implode('',$inc_lines));

    unset($tokenizer);

    // if(include('file')) { - include tokens after { and not into the condition :S

    if($this->in_condition)

    {

    $this->tokens = array_merge(

    array_slice($this->tokens, 0, $this->in_condition+1), // before include in condition

    $inc_tokens, // included tokens

    array(array(T_INCLUDE_END, 0, 1)), // extra END-identifier

    array_slice($this->tokens, $this->in_condition+1) // after condition

    );

    } else

    {

    // insert included tokens in current tokenlist and mark end

    $this->tokens = array_merge(

    array_slice($this->tokens, 0, $i+$skip), // before include

    $inc_tokens, // included tokens

    array(array(T_INCLUDE_END, 0, 1)), // extra END-identifier

    array_slice($this->tokens, $i+$skip) // after include

    );

    }

    最后生成的包含include文件的tokens如下所示,对比下会发现5-19的token是新添加的,为被包含文件para.php的tokens。Array

    (

    [0] => Array

    (

    [0] => 262

    [1] => include

    [2] => 2

    )

    [1] => (

    [2] => Array

    (

    [0] => 318

    [1] => 'para.php'

    [2] => 2

    )

    [3] => )

    [4] => ;

    [5] => Array

    (

    [0] => 337

    [1] => function

    [2] => 2

    )

    [6] => Array

    (

    [0] => 310

    [1] => para

    [2] => 2

    )

    [7] => (

    [8] => Array

    (

    [0] => 312

    [1] => $str

    [2] => 2

    )

    [9] => )

    [10] => {

    [11] => Array

    (

    [0] => 339

    [1] => return

    [2] => 3

    )

    [12] => Array

    (

    [0] => 312

    [1] => $_GET

    [2] => 3

    )

    [13] => (

    [14] => Array

    (

    [0] => 312

    [1] => $str

    [2] => 3

    )

    [15] => )

    [16] => ;

    [17] => }

    [18] => ;

    [19] => Array

    (

    [0] => 380

    [1] => 0

    [2] => 1

    )

    [20] => Array

    (

    [0] => 312

    [1] => $str

    [2] => 4

    )

    [21] => =

    [22] => Array

    (

    [0] => 318

    [1] => 'command'

    [2] => 4

    )

    [23] => ;

    [24] => Array

    (

    [0] => 312

    [1] => $command

    [2] => 5

    )

    [25] => =

    [26] => Array

    (

    [0] => 310

    [1] => para

    [2] => 5

    )

    [27] => (

    [28] => Array

    (

    [0] => 312

    [1] => $str

    [2] => 5

    )

    [29] => )

    [30] => ;

    [31] => Array

    (

    [0] => 310

    [1] => shell_exec

    [2] => 6

    )

    [32] => (

    [33] => Array

    (

    [0] => 312

    [1] => $command

    [2] => 6

    )

    [34] => )

    [35] => ;

    [36] => ;

    )

    2.2.2 添加数据源(source点)

    当扫描到第11个token return时,此时会判断返回的语句是否是用户可以控制的语句,如果这条语句是用户能够控制的语句,比如此处使用$_GET进行赋值表明是用户可以控制的语句;也就是说para()方法的返回值是用户可以控制的,那么该方法返回的数据将被认为是一个被污染的数据源,即source点并将该方法添加到source_functions的数组中。对于return返回参数是否是用户可控制的判断,主要是通过函数scan_parameter()实现的,下面抽取几个关键点来了解判断流程的实现,当遇到token为return的语句时,会向后遍历token,直到该语句结束,代码的实现上是通过“;”是否出现进行判断,如下所示:while( $this->tokens[$i + $c] !== ';' )

    对于每个token,判断该token是否是一个数组,如果是一个数组则检查数组元素是否是一个变量,如下所示:if( is_array($this->tokens[$i + $c]) )

    {

    if( $this->tokens[$i + $c][0] === T_VARIABLE )

    如果该token是一个数组且为变量,则使用scan_parameter()函数对其进行检查,该函数调用形式如下。该调用的参数比较多,但是本例中实际起到判断作用的只有第三个参数,即这个token本身:$this->tokens[$i+$c],具体的值为:tokens[12],即$_GET函数。$new_find = new VulnTreeNode();

    $userinput = $this->scan_parameter(

    $new_find,

    $new_find,

    $this->tokens[$i+$c],

    $this->tokens[$i+$c][3],

    $i+$c,

    $this->var_declares_local,

    $this->var_declares_global,

    false,

    $GLOBALS['F_SECURES_ALL'],

    TRUE

    );

    由于$_GET函数为定义的source函数,因此将直接认为返回值是用户可输入的,即$userinput=true。最后将此函数名添加到source_functions列中,以后的扫描该函数将作为source点看待。if($userinput == 1 || $GLOBALS['userfunction_taints'])

    {

    $this->source_functions[] = $this->function_obj->name;

    }

    2.2.3 添加风险点(sink点)

    此处实际是RIPS的一个误报,RIPS将$_GET()作为可变函数名对待,如果函数名可变那么就可以将该函数名赋值为eval,从而造成代码执行的漏洞,sink点的添加也是在scan_parameter()中进行。由于此处是$_GET(),显然此函数包含在source函数中,因此使用scan_parameter()函数其返回值肯定为true,那么在函数内部将会触发如下代码块的执行。if($this->in_function && !$return_scan)

    {

    $this->addtriggerfunction($mainparent);

    }

    触发后主要执行的函数是addtriggerfunction(),该函数的作用主要是向$GLOBALS变量中添加该函数。$GLOBALS['user_functions'][$this->file_name][$this->function_obj->name][0][0] = 0;

    // no securings

    $GLOBALS['user_functions'][$this->file_name][$this->function_obj->name][1] = array();

    // doesnt matter if called with userinput or not

    $GLOBALS['user_functions'][$this->file_name][$this->function_obj->name][3] = true;

    最后在包含文件扫描结束时,即token="}",此处是第17个token,将被全局变量合并到scan_functions中,即添加到sink点。if(isset($GLOBALS['user_functions'][$this->file_name]))

    {

    $this->scan_functions = array_merge($this->scan_functions, $GLOBALS['user_functions'][$this->file_name]);

    }

    2.2.4 命令执行(shell_exec)漏洞

    这个漏洞是本代码中实际包含的一个漏洞,在上面各种准备工作完成后,来看一下这个实际漏洞的扫描流程;当token为shell_exec时,由于该函数是一个危险函数,即包含在sink点,那么分析将直接跳转到TAINT ANALYSIS中进行。同2.2.2类似,会跳转到scan_parameter()函数中对函数的参数进行分析,确定该参数是否是用户可控制的,即包含在source点内。该函数的参数是变量$command,该参数是一个自定义变量,RIPS对于自定义变量会进行自动扫描并通过函数variable_add()添加到var_declares_local、var_declares_global两个变量中的一个。

    下面先对variable_add()函数进行简单介绍,当遍历到tokens[24],$command的赋值操作时,会触发该函数的执行。该函数调用形式如下,其中比较关键的是第二个参数,调用Analyzer::getBraceEnd()静态方法,获取该变量声明的所有token,此处$command的token的序列号为24-30,将这些tokens存储到一个数组中,最后将该变量的相关信息存入var_declares_global数组中。这样就完成了对一个文件中的全局遍历的发现及存储。$this->variable_add(

    $token_value,

    array_slice($this->tokens, $i-$c, $c+Analyzer::getBraceEnd($this->tokens, $i)),

    '',

    0, 0,

    $line_nr,

    $i,

    isset($this->tokens[$i][3]) ? $this->tokens[$i][3] : array()

    );

    由于存储了该变量的tokens信息,那么对于自定义变量的分析,就转变成了对该变量的tokens的分析,遍历该变量的tokens,如果该token来自用户可控制的输入,即sorce点数据源,那么表明自定义变量的也是可控的,此处的source点就是自添加的函数para(),这样就存在一个用户可控制的数据源(source)流向危险函数(sink),形成了一个漏洞触发的完整路径。for($i=$var_declare->tokenscanstart; $itokenscanstop; $i++)

    { ...

    else if( in_array($tokens[$i][1], $this->source_functions) )

    {

    $userinput = true;

    $var_trace->marker = 4;

    $mainparent->title = 'Userinput returned by function '.$tokens[$i][1].'() reaches sensitive sink.';

    3、结语

    上面对于RIPS的源码进行了简单的分析,从中可以看出,其工作的流程大致为遍历token,发现sink点,然后对sink点的参数使用scan_parameter进行后向追踪,如果这个参数是用户可控制的参数,及包含在source点中,那么就存在一条从source到sink的联通路径,及存在一条漏洞触发的路径,则认为是一个风险点。

    * 本文作者:nightmarelee,转载请注明来自FreeBuf.COM

    展开全文
  • 代码审计--21--RIPS详细

    千次阅读 2018-10-06 12:21:48
    5.1 软件介绍 RIPS是一个用php编写的源代码安全检测工具,它使用了静态分析技术,能够自动化地挖掘PHP源代码潜在的安全漏洞,测试人员可以直接容易的审阅分析结果,不用...1、RIPS工具特点 下载地址:https://source...
  • 代码审计利器-RIPS实践

    千次阅读 2019-05-31 23:05:20
    什么是RIPSRIPS是最流行的静态代码分析工具,可自动检测PHP应用程序中的漏洞。 通过对所有源代码文件进行标记化和解析,RIPS能够将PHP源代码转换为程序模型,并检测在程序流程中可能被用户输入(受恶意用户影响)...
  • 常用的代码审计工具之后,选取其中的PHP源码审计工具 —— Rips 做详细的使用说明 工具介绍 在源代码的静态安全审计中,使用自动化工具辅助人工漏洞挖掘,一款好的代码审计软件,可以显著提高审计工作的效率。学会...
  • PHP代码审计工具Rips的使用

    千次阅读 2019-10-02 19:29:23
    Rips 0x00 介绍 最近在准备CTF攻防比赛时发现了一个很好的代码审计工具,接下来就给大家介绍此工具的使用 在安全工作中,代码审计是很重要的一项技能。在面对大规模的代码时, 使用自动化工具辅助人工漏洞挖掘,...
  • rips php扫描

    2012-02-26 12:20:48
    rips php扫描工具,方便找到code漏洞,保证网络安全
  • PHP审计工具之 RIPS

    2020-07-07 17:01:17
    点击红色标记的方框,就可以看到关于这个漏洞的介绍 漏洞详情图 当看见红色标记里面的按钮时,这个洞我们就可以自动生成exploit脚本的,如下所示 exploit生成页面 嗯,我就先介绍到这里啦,RIPS更加强大的功能就自己...
  • Ripser”进行延迟重建和快速Rips代码(由Uli Bauer提供) 安装说明 要运行此代码,您将需要检出并编译Ripser。 首先,运行以下命令 git clone --recursive https://github.com/ctralie/Math412S2017.git 然后,进入`...
  • rips-Chinese-master.zip

    2021-12-17 10:12:16
    汉化版代码审计工具
  • 审计PHP工具篇之 RIPS

    2021-04-12 10:55:20
    点击红色标记的方框,就可以看到关于这个漏洞的介绍 漏洞详情图 当看见红色标记里面的按钮时,这个洞我们就可以自动生成exploit脚本的,如下所示 exploit生成页面 嗯,我就先介绍到这里啦,RIPS更加强大的功能就自己...
  • https://sourceforge.net/projects/rips-scanner/files/latest/download 或者从百度云盘下载: 链接: https://pan.baidu.com/s/1Y6F1E7Cmmies0YvR6O7I-A 提取码: 1huw 复制这段内容后打开百度网盘手机App,操作更...
  • 看到robot.txt又提示了俩新路径,mercy没啥,nomercy进去后是rips界面,写了版本 直接搜漏洞 C:\root> searchsploit rips 0.53 ---------------------------------------------------------------------------------...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 820
精华内容 328
关键字:

RIPS

友情链接: double_fit.zip