PHP代码审计之基础篇

最近在学PHP代码审计,那就将学习的笔记都整理一遍吧~


前期准备:

当然,最基本的前提是至少大致学过PHP的语法。

1、安装相关软件,如Sublime text、 Notepad++、editplus、 Seay源代码审计系统等

2、获得源码,可以到网上下载各种网站源码

3、安装网站


审计方法:

通读全文法:麻烦但全面

敏感函数参数回溯法:高效常用,Seay源代码审计系统

定向功能分析法:主要根据程序的业务逻辑来审计,首先是用浏览器逐个访问,看看程序有哪些功能,根据相关功能推测可能存在的漏洞


审计的基本流程:

1、整体了解

2、根据定向功能法针对每一项功能进行审计

3、敏感函数参数回溯法


整体了解:

1、网站结构:

浏览源码文件夹,了解程序的大致目录。

admin:后台管理目录

install:网站的安装目录,其中的install.sql为数据库的结构信息

sys:这个目录里面一般存放着配置信息文件和公共函数库,分别为config.php和lib.php

user:这里面记录着用户的一些操作,如用户注册等

index.php:一般为网页的首页文件,也是审计的突破口

2、入口文件:

index.php、admin.php文件一般都是整个程序的入口,通过index文件可以知道程序的架构、运行流程、包含哪些配置文件、哪些过滤文件以及安全过滤文件,了解程序的业务逻辑。

3、配置文件:

一般类似config.php等文件,保存一些数据库相关信息、程序的一些信息。先看看数据库编码,若是gbk则可能存在宽字节注入;若变量的值用双引号,则可能存在双引号解析代码执行的问题。

4、过滤功能:

通过公共函数文件、安全过滤文件可看出用户输入的数据哪些被过滤和哪些无过滤,在哪、如何过滤,能否绕过过滤的数据,过滤的方式是替换还是正则,有无GPC和使用addslasher()处理等。


常见的功能漏洞:

程序初始安装漏洞

站点信息泄露

文件上传管理

登录认证、权限管理漏洞

数据库备份漏洞

验证码漏洞等


漏洞形成的条件:

1、可控的变量(一切输入都是有害的)

2、变量到达有利用价值的函数(危险的函数)

代码审计的本质:找漏洞其实相当于找对应变量和函数。

变量跟踪的过程:

正向跟踪——通过变量找函数

逆向跟踪——通过函数找变量


常见的INI配置:

1、php INI文件:

PHP 的配置文件一般是 php.ini 文件

php.ini 文件必须命名为'php.ini'并放置在httpd.conf中的PHPIniDir指令指定的目录中,使用phpinfo()函数可以查看。

一般情况下需要对其进行配置,使环境更加安全

2、配置文件:

php.ini:在启动PHP时被读取。对于服务器模块版本的PHP,仅在Web服务器启动时读取一次;对于CGI和CLI版本,每次调用都会读取。在php.ini中可以使用环境变量。Apache Web服务器在启动时,会把目录转到根目录,这将导致PHP尝试在根目录下读取php.ini,若存在的话。还可以在httpd.conf中覆盖php.ini的值以进行更灵活的配置:php_value name value。PHP常量仅能在php.ini中使用,在httpd.conf中必须使用相应的掩码值。


.user.ini文件:自PHP5.3.0起,PHP支持基于每个目录的.htaccess风格的INI文件,此类文件仅被CGI/FastCGI SAPI处理;此功能使得PECL的htscanner扩展作废;若使用Apache,则用.htaccess文件有同样的效果。在.user.ini风格的INI文件中只有具有PHP_INI_PERDIR和PHP_INI_USER模式的INI设置可被识别。当使用PHP作为Apache模块时,也可以用Apache的配置文件和.htaccess文件中的指令来修改PHP的配置设定;需要有“AllowOverride Options”或“AllowOverride All”权限。


语法:设置指令的格式:directive = value 大小写敏感

Value可以使:用引号界定的字符串("foo”)、数组、PHP常量(E_ALL、M_PI)、INI常量(On、Off、none)、表达式

INI文件中表达式仅使用:!、()、|位或、&位与、~位非、

一个空字符串可以用在等号后不写任何东西表示,或者用 none 关键字:

foo =     ; 将foo设为空字符串

foo = none  ; 将foo设为空字符串

foo = "none" ; 将foo设为字符串''none''


启用全局变量:register_globals=off

作用是关闭自动注册的全局变量。

设置为On,php会将$_POST,$_GET,$_COOKIE,$_ENV,$_SESSION数组中的$key=>$value直接注册为变量,但有三个问题:不知道变量来源;变量之间相互覆盖;安全问题。因而要设置为Off。


  • 13
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值