Author: tr1ple

这部分主要分析scanner.php的逻辑,在token流重构完成后,此时ini_get是否包含auto_prepend_file或者auto_append_file

取出的文件路径将和tokens数组结合,每一个文件都为一个包含require+文件名的token数组

接着回到main.php中,此时调用scanner的parse开始解析,这里的一个设计点问题就是要扫描漏洞,此时已经需要准备好的有哪些东西

1.file_scanning:

这里实际上就代表的是将要进行扫描的文件,在这里实际上是对每个待扫描的php文件都将调用parse进行解析,files就是前端指定的目录位置,勾选subdirs就包括其子目录的php文件

2.scan_functions:

扫描的结果显示级别是根据前端verbosity来进行选择,扫描函数是根据vuln type来选择

主要分为两个大类,客户端攻击和服务端

客户端主要包括

a.xss

主要是以下函数在输出时可能存在xss,其中每种函数都对应一个数组,0代表跟踪该函数所有参数,1代表跟踪第一个,2代表第2个,

其中securing_xss为一些过滤函数,包括把字符转为实体,将左右尖括号、单双引号、&转为html实体,所以这种防御并不是百分百有效的

b.http 头部注入

c.会话固定漏洞

服务端主要包括:

a.代码执行

这里的securing_preg主要针对php5.x的e修饰符导致的代码执行,preg_quote将对正则进行转义

b.反射注入

c.文件读取

securing_file主要包括以下三种

d.文件系统操作相关和e文件包含相关也都是用的相同的securing_file

f.命令执行相关

securing_function主要关注两个命令转义函数

g.sql操作相关:

securing_function:

h.xpath注入

securing_functions

i.ldap注入

j.连接相关的函数

k.php对象注入:

l.其他一些高危函数

因此以上一共是3种客户端+12种服务端=15种预配置的漏扫类型,但是这些漏洞并没有完全涵盖比如csrf、ssrf、xxe以及无法检测一些越权漏洞等逻辑漏洞,以及反序列化也不一定是unserialize,可能是phar反序列化

上面预先配置的这些函数也是作者对php的函数都做了相关的调查,建立在对php语言与漏洞本身的理解基础上(白盒对基础的要求还是高)

3.info_functions

info类中主要包括一些辅助审计的函数检测,比如出现phpinfo,将对应phpinfo detected,以及不同数据库用到的函数如果出现,则代表当前应用使用了哪些数据库

4.source_functions

待扫描的函数初始化后,将初始化source点

source点主要包括:

a.otherinput 包括http头部一些信息,超全局数组变量等操作函数

b.从文件中提取的输入

c.从数据库中提取的输入

这些输入点全部都定义在source.php,其中还包括userinput,http server相关的一些参数,不过这两类输入在初始化时并未加入source_functions数组

info中还包含了常用的一些pop链构造需要的一些gadget方法

RIPS源码阅读记录(二)的更多相关文章

  1. Redis源码阅读(二)高可用设计——复制

    Redis源码阅读(二)高可用设计-复制 复制的概念:Redis的复制简单理解就是一个Redis服务器从另一台Redis服务器复制所有的Redis数据库数据,能保持两台Redis服务器的数据库数据一致 ...

  2. 【原】FMDB源码阅读(二)

    [原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...

  3. 【原】AFNetworking源码阅读(二)

    [原]AFNetworking源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中我们在iOS Example代码中提到了AFHTTPSessionMa ...

  4. 【原】SDWebImage源码阅读(二)

    [原]SDWebImage源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 解决上一篇遗留的坑 上一篇中对sd_setImageWithURL函数简单分析了一下,还 ...

  5. EventBus源码解析 源码阅读记录

    EventBus源码阅读记录 repo地址: greenrobot/EventBus EventBus的构造 双重加锁的单例. static volatile EventBus defaultInst ...

  6. 【详解】ThreadPoolExecutor源码阅读(二)

    系列目录 [详解]ThreadPoolExecutor源码阅读(一) [详解]ThreadPoolExecutor源码阅读(二) [详解]ThreadPoolExecutor源码阅读(三) AQS在W ...

  7. Caddy源码阅读(二)启动流程与 Event 事件通知

    Caddy源码阅读(二)启动流程与 Event 事件通知 Preface Caddy 是 Go 语言构建的轻量配置化服务器.https://github.com/caddyserver/caddy C ...

  8. 【 js 基础 】【 源码学习 】backbone 源码阅读(二)

    最近看完了 backbone.js 的源码,这里对于源码的细节就不再赘述了,大家可以 star 我的源码阅读项目(source-code-study)进行参考交流,有详细的源码注释,以及知识总结,同时 ...

  9. Rpc框架dubbo-client(v2.6.3) 源码阅读(二)

    接上一篇 dubbo-server 之后,再来看一下 dubbo-client 是如何工作的. dubbo提供者服务示例, 其结构是这样的!dubbo://192.168.11.6:20880/com ...

随机推荐

  1. 用Graphviz画简单依赖图示例

    代码: digraph module { 0 [label="global.h"]; 1 [label="bst_operator.c"]; 2 [label= ...

  2. bzoj2561最小生成树

    bzoj2561最小生成树 题意: 给定一个连通无向图,假设现在加入一条边权为L的边(u,v),求需要删掉最少多少条边,才能够使得这条边既可能出现在最小生成树上,也可能出现在最大生成树上. 题解: 最 ...

  3. 区分C语言中的指针函数和函数指针

    1.指针函数: 类型说明符 *函数名(形参表) { ..........   /*函数体*/ ..........    /*函数体*/ } 其中函数名之前加了"*"号表明,这是一 ...

  4. 一篇文章,学会jmeter模拟文件上传、下载操作

    最近很多同学都在问jmeter上传,下载文件的脚本怎么做? 正巧这阵子忙完有时间,就来“折腾”一番,哈哈 现整理出来和大家分享 到底该怎么做? 一.准备工作: 上传接口一个(自行开发解决了) 下载接口 ...

  5. js:数组(创建、遍历、函数)

    1.数组 采用单个变量只能存储一个数据,数组能够存储多个数据,获取方式也比较简单.它是将一组数据存储在当个变量下的存储方式. 2.数组的创建 (1)new方式创建,不指定数组长度 <script ...

  6. ztree : checkbox 选中/不选中时动态添加/删除DOM元素

    先上代码. var IDMark_Switch = "_switch", IDMark_Icon = "_ico", IDMark_Span = "_ ...

  7. STL源码剖析:迭代器

    准备知识 什么是迭代器? 迭代器是链接容器和算法的桥梁,所有的算法都通过迭代器操作容器中的数据 迭代器是一种智能指针,最重要的操作符重载就是operator*,operator-> 迭代器的实现 ...

  8. DJANGO-天天生鲜项目从0到1-010-购物车-购物车操作页面(勾选+删改)

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  9. vue学习(七) v-model 双向数据绑定

    //html <div id="app"> <input type="text"v-model="msg" style=& ...

  10. MySQL组复制MGR(四)-- 单主模式与多主模式

    (一)概述 组复制可以运行在单主模式下,也可以运行在多主模式下,默认为单主模式.组的不同成员不能部署在不同模式下,要切换模式,需要使用不同配置重新启动组而不是单个server. 相关参数如下: # 该 ...