PHP 运行时漏洞检测

本文介绍了一个名为prvd的PHP运行时漏洞检测系统,它利用PHP扩展xmark进行源数据标记和函数hook,实现了taint模式和payload模式来检测潜在的安全问题。prvd在实际测试中能有效发现SQL注入、 SSRF等漏洞,同时通过Sentry作为漏洞上报平台。
摘要由CSDN通过智能技术生成

在这里插入图片描述

0x00 前言

这片博文将简单的介绍我编写的 PHP 运行时漏洞检测系统 prvd 的检测逻辑, 以及该系统在实际测试中的效果。

0x01 基本知识

在这里我们先介绍几个常用的词语:
- source数据来源点,可以是:

  • 网络,例如常规的 Web 参数等
  • 文件系统
  • 数据库
  • 等等其他用户可控或者间接可控的地方
    - filter数据过滤处理点,可以是:
  • 编码解码,例如 base64_decode 等
  • 常规字符串操作,例如 strtolower 等
  • 安全过滤,例如 mysqli_escape_string 等
  • 等等其他会更改字符串内容的地方
    - sink漏洞触发点,可以是:
  • 操作文件相关行为,例如 file_put_content 等
  • 操作网络相关函数,例如 curl 等
  • 操作命令相关行为,例如 system 等
  • 等等其他危险行为

有些地方既可以是 source 点,也可以是 sink 点,比如说 file_put_content 在参数可控的时候是 sink
点,因为返回的数据也是我们可控的,这里返回的数据也是 source 点。

0x02 xmark

我们先简单地介绍一下 xmark,这是一个 PHP7 扩展,能够直接使用 PHP 代码做到:

  • 对字符串变量进行打标记
  • Hook 绝大多数函数/类
  • Hook 部分 opcode

基于 xmark 所提供的功能,即便是我们不熟悉 PHP 内部实现,我们也能够很简单的去实现:

  • PHP RASP
  • PHP 解密工具,例如 phpdecoder
  • PHP 运行时漏洞检测

因为 PHP 并不像 Python、Ruby 等其他语言可以很方便的 Hook 函数、类,所以我们开发了这么一个扩展来完成类似的功能。

实际上 xmark 这个项目有不少代码是直接拷贝 taint 的, 那为什么要改这样一个轮子呢?

  • taint 的 source 点覆盖不全面&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值