01什么是危险函数

函数设计出来就是让人使用的,之所以危险,是因为其功能过于强大.开发人员特别是刚从业的人员很少会完整阅读完整个文档,再或者是没有意识到当给这些函数传递一些非常规的,外部可控的参数会带来什么影响,所以踩坑的几率非常大.
所以在进行代码审计的时候,比较多的部分都是在审计调用这些危险函数的时候,参数是不是外部可控的.有没有进行正确的过滤.

02 PHP危险函数5大特征

2.1 能够执行任意代码的函数有三种:

  • 第1种是最常见的,会把传入的字符串当作php代码直接执行
  • 第2种是通过引入文件执行php代码,php里引入文件执行代码的只有4个函数
  • 第3种是一些数据处理函数,它们存在支持回调函数类型的参数,这个参数可以传入函数的字符串名称,一旦这个参数可控,那么可能造成漏洞,这些函数的特征非常明显,参数类型是callback形式,审计的基本上就是看他们的回调函数是不是用字符串的形式传递,是否可控,在PHP里存在大量的这种函数,这里只举5个比较常见的

2.2 常见能够读取网络资源的函数
常见能够读取网络资源的函数,审计点一般是发起网络请求时有无白名单,否则存在SSRF漏洞

2.3 能够执行系统命令或者调用外部程序的函数
能够执行系统命令或者调用外部程序的函数,这些函数使用不当容易引起命令注入,一般需要通常需要结合escapeshellcmd或escapeshellarg函数过滤传入的变量

2.4 能够操作文件(读写,移动,删除)的函数
能够操作文件(读写,移动,删除)的函数,在审计的时候也要注意传入的变量是否可控,是否存在穿越目录,导致任意文件读写的情况

2.5 能够修改运行时候的上下文环境(覆盖变量/函数)

03 编程语言自身的特性

脚本语言的特点就是灵活,所以语言本身的设计上有很多动态的设计,比如:动态类型,可变变量,可变函数

3.1 动态类型

动态类型可能导致一些比较条件的时候绕过,比如true == 'a'这个条件在PHP里为真,动态类型带来的条件判断问题,很多开发者都会在上面踩坑,详细的规则可以看php的官方文档

http://php.net/manual/zh/types.comparisons.php

3.2 可变变量

可变变量就是有2个$符号的变量,比如这2行代码,其实声明了3个变量,1个是$a,1个变量是$b,还有一个是$hello,之所以有$hello这个变量,是因为第3行的$$a,是把$a的值当成一个变量名使用.当$a的值可控的时候,就可以覆盖其它已经定义的变量,比如当$a的值是b的时候,第三行的$$a就会把$b的test覆盖成world.

<?php
$a = 'hello';
$b = 'test';
$$a = 'world';
?>

3.3可变函数

可变函数就是一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它,比如这段代码会输出function hello

$a = 'hello';
function hello(){
echo 'function hello';
}
$a();

所以审计的时候也需要关注可变函数的变量是否可控。

04 小结

对于敏感函数的审计点,无非就是参数是否可控,是否有严格的过滤,过滤方案是不是业界最优解,然后去回溯这些参数的调用过程,看看在哪一步没有过滤或者是过滤不严的地方.整个审计的过程是比较枯燥的,而且可能要审计很久能发现一个漏洞甚至是没有任何发现。

既然审计套路这么固定,肯定有一些现成的工具,下面就给大家介绍2款。

  • 第一款是rips,这款工具是用php写的,开源版本虽然停更已久,现在主推商业版本,不过近几年来php所添加的函数,并没有增加多少危险函数,所以这款工具还是可以使用的.而且它使用了php自带语法分析函数token_get_all来分析上下文,相比一些依赖正则表达式的审计工具准确度有不少的提升。
  • 第二款工具是Seay,这款工具是法师的代码审计系统,同样有自动审计的功能,还能列出单个php文件里的所有变量和函数,以及这些变量的生命周期。扫描结果里面同样也是一些漏洞点的信息,验证的话可以双击某一条漏洞转到到源码的地方审计。

涨姿势的点赞集合哟~

php敏感字符串过滤_PHP代码审计入门:常见的危险函数和审计点相关推荐

  1. php敏感字符串过滤_PHP实现的敏感词过滤方法示例

    本文实例讲述了PHP实现的敏感词过滤方法.分享给大家供大家参考,具体如下: 1.敏感词过滤方法 /** * @todo 敏感词过滤,返回结果 * @param array $list 定义敏感词一维数 ...

  2. php敏感字符串过滤_PHP实现敏感词过滤

    正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式通常被用来检索.替换那些符合某个模式(规则) ...

  3. php敏感字符串过滤_PHP实现的敏感词过滤方法

    PHP实现的敏感词过滤方法,以下是一份过滤敏感词的编码.有需要可以参考参考. /** * @todo 敏感词过滤,返回结果 * @param array $list 定义敏感词一维数组 * @para ...

  4. php敏感字符串过滤_PHP的一个过滤敏感词或脏话的方法

    PHP的一个过滤敏感词或脏话的方法 主要使用了  int substr_count ( string haystack, string needle [, int offset [, int leng ...

  5. php+mysql防注入字符串过滤_php 防sql注入过滤代码

    我们提供了三个函数不来过滤一些特殊的字符,主要是利用php把sql敏感字符串给过滤掉了,好了下面来看看这款代码吧,有需要的朋友拿去看看,实例代码如下: function phpsql_show($st ...

  6. php mysql防注入字符串过滤_php中防止SQL注入的方法

    最好对magic_quotes_gpc已经开放的情况下,还是对$_POST['lastname']进行检查一下. 再说下mysql_real_escape_string和mysql_escape_st ...

  7. python敏感词过滤replace_Serverless 实战:3 分钟实现文本敏感词过滤

    敏感词过滤是随着互联网社区一起发展起来的一种阻止网络犯罪和网络暴力的技术手段,通过对可能存在犯罪或网络暴力的关键词进行有针对性的筛查和屏蔽,能够防患于未然,将后果严重的犯罪行为扼杀于萌芽之中. 随着各 ...

  8. mysql 敏感词_PHP实现的敏感词过滤方法示例

    本文实例讲述了PHP实现的敏感词过滤方法.分享给大家供大家参考,具体如下: 1.敏感词过滤方法 /** * @todo 敏感词过滤,返回结果 * @param array $list 定义敏感词一维数 ...

  9. 字符串匹配算法 -- AC自动机 基于Trie树的高效的敏感词过滤算法

    文章目录 1. 算法背景 2. AC自动机实现原理 2.1 构建失败指针 2.2 依赖失败指针过滤敏感词 3. 复杂度及完整代码 1. 算法背景 之前介绍过单模式串匹配的高效算法:BM和KMP 以及 ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第11期)
  2. SQL Server 中master..spt_values的应用
  3. Code Sign error: Provisioning profile 'xxxxxxxxxxxxxxxxxxxxxxxxx'
  4. 基于ATMEGA8的Arduino Nano(UNO)开发板
  5. Java8 - 一文搞定Fork/Join 框架
  6. oracle如何复制dept,[oracle]表复制的sql语句
  7. 【数据结构与算法】排序优化
  8. Spring Data JPA 从入门到精通~查询方法的创建
  9. 循序渐进之Maven(4) - 第一个SpringMVC项目
  10. 全频音箱与分频音箱的区别
  11. 15.go install
  12. 路径规划——RRT算法实现
  13. BeanShell用法汇总
  14. 自定义数字时钟DigitalClockView
  15. 爱奇艺影业,你明天还为传统电影业打工吗?
  16. 计算机设置调整吃鸡,绝地求生韦神托马斯主播的电脑画面设置灵敏度_绝地求生主播的电脑画面设置和灵敏度介绍_游戏吧...
  17. 编程课程_您可以从今天开始的300项免费在线编程课程
  18. 判断机器大端还是小端
  19. 电路板级的EMC设计 (2)元件的选择和电路设计技术
  20. mysql求2个日期之间的工作日数(周一到周五)

热门文章

  1. “我求你们不要再给我打电话了,我不炒股!”
  2. springboot 替换tomcat_Spring Boot实战 之 解剖HelloWorld原型应用
  3. oracle12154错误 Linux,关于“EXP-00056: ORACLE error 12154 encountered”的解决方法
  4. Python取出两个文件中相同的电话号码及地址(文件类型为:txt文本)
  5. python之super
  6. python super()函数(用来调用父类方法)
  7. numpy np.matmul()(两个数组的矩阵乘积)
  8. Intel Realsense D435 hardware_reset() 摄像头重置记录 context.query_devices()
  9. 分布式系统——向zabbix中添加监控项, 以nginx和mysql为例
  10. 博本 微型 电脑 linux,博本电脑下载与安装Windows7iso镜像系统教程