PHP代码审计之环境配置
- 前言
- 一、PHP环境配置
- 1.1 phpstudy和phpstorm下载配置
- 1.2 Xdebug 配置
- 1.3 phpstudy 基本使用
- 1.4 phpstorm基本使用
- 1.5 RIPR下载使用
- 二、代码审计配置文件
- 2.5 PHP的核心配置(php.ini)
- 1. safe_mode
- 2. magic_quote_gpc
- 3. magic_quote_runtime
- 4. register_globel
- 5. disable_functions
- 6. allow_url_include
- 7. allow_url_open
- 8. open_basedir
- 2.5 mysql的核心配置
- 1. secure_file_priv
- 2. basedir
- 3. datadir
前言
php 代码审计 如字面意思,对php源代码进行审查,理解代码的逻辑,发现其中的安全漏洞。
一、PHP环境配置
1.1 phpstudy和phpstorm下载配置
phpstudy和phpstorm下载配置
1.2 Xdebug 配置
Xdebug 配置
1.3 phpstudy 基本使用
1.4 phpstorm基本使用
如下图所示,查找替换操作
1.5 RIPR下载使用
- RIPR下载
RIPS是一款开源的,具有较强漏洞挖掘能力的自动化代码审计工具。它使用PHP语言编写的,用于静态审计PHP代码的安全性。
RIPS下载地址
下载成功之后直接放到网站下面,直接访问就可以使用,我就是下载到宝塔下面,然后直接访问的,如下所示:
- RIPS使用
二、代码审计配置文件
2.5 PHP的核心配置(php.ini)
1. safe_mode
safe_mode=on 表示PHP开启了安全模式,开启了安全模式就说明PHP某些危险函数被禁用或者被限制使用了,比如说:
文件操作函数就被限制使用了,只有对该文件有读写权限的用户才可以操作该函数:具体函数有如下
:
- read()
…
如下函数被禁止使用:
- shell_exec()
- exec()
…
2. magic_quote_gpc
magic_quote_gpc=on表示对于可控变量,如果有’"/等字符就会被转义,等可控变量输出的时候又会被非转义,就是输入进来使用addslashes,输出去使用stripslashes()
3. magic_quote_runtime
对于文件操作,如果文件中有’"/等字符就会被转义
4. register_globel
如果 register_globel被开启,那么 G E T [ ′ n a m e ′ ] 等价于 _GET['name']等价于 GET[′name′]等价于name
如上的配置变量再PHP5.4后不在使用
5. disable_functions
禁用一些函数,各个函数以逗号分割,disable_functions禁用的函数可能被绕过
6. allow_url_include
7. allow_url_open
6和7变量主要和一些PHP伪协议有关
8. open_basedir
open_basedir等于PHP可以被操作的文件目录
2.5 mysql的核心配置
1. secure_file_priv
secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的,
secure-file-priv在mysql.ini文件或/etc/my.cnf中,如果指定文件没有该字段,可以自行添加
(phpstudy:mysql.ini文件中进行配置,宝塔:/etc/my.cnf进行配置)
- secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
- 当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
- 当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
如上所示,当开启了secure_file_priv后,还要有如下的配置才能够使用loadfile()和into outefile函数
- loadfile
- 当前用户有读权限
- 知道网站的绝对路径
- into outefile
- 当前用户有写权限
- 知道网站的绝对路径
想要知道当前用户的权限可以使用如下的命令
' order by 2-- 查看字段数
' union all select database(),user()-- 查看当前数据库和用户
注意,如下的root表示如上user()的结果
查看当前用户是否有文件读写的权限:
1' and (select File_priv from mysql.user where user='root' and host='localhost')='Y'--
1' and (select File_priv from mysql.user where user='root' and host='%')='Y'--
mysql数据库下面的user表有当前用户的权限信息,使用如上的boolean注入,就可以发现当前用户是否有读写权限
2. basedir
该参数指定了安装 MySQL 的安装路径,填写全路径可以解决相对路径所造成的问题。
3. datadir
该参数指定了 MySQL 的数据库文件放在什么路径下。数据库文件即我们常说的 MySQL data 文件。(
宝塔面板只能够在这个路径使用into outefile
)