PHP代码审计学习_day1

0x00 工具的下载和安装

RIP、seay、phpstrom等等,自行百度安装。


0x01 MVC架构

MVC是一种使用MVC设计创建Web应用程序的模式。MVC模式同时提供了对HTML、CSS和JavaScript的完全控制。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。表示应用程序核心(比如数据库记录列表),通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。显示数据(数据库记录),通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。处理输入(写入数据库记录),通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。


0x02 常见的PHP框架

ThinkPHP:全中文,易上手,对环境配置没有什么要求。
Yaf:据说是世界上最快的PHP框架,用C写的扩展,安装的时候需要编译。
Laravel、Kohana、Codeigniter、Yii
Smyfony:这个框架据说很强。
doitphp:国内PHP框架的后起之秀。
注:以上顺序没有排名之分。


0x03 功能点定向审计

程序安装、文件上传、文件管理、登录验证、备份恢复、找回密码。


0x04 PHP核心配置php.ini

(1)基本配置-语法

大小写敏感
directive = value(指令 = 值)
foo = bar ≠ FOO = bar
运算符
|、&、~、!
空值的表达方式
foo = ;
foo = none;
foo = "none";

(2)基本配置-安全模式

安全模式
safe_mode = off
安全模式,用来限制文档的存取、限制环境变量的存取、控制外部程序的执行。
注:本特性已在PHP5.4.0被移除
这里举一个例子,创建一个test.php文件,内容为

<?php
$cmd = $_GET['id'];
system($cmd);
?>

访问127.0.0.1/test.php?id=ipconfig,就可以看到ipconfig回显的内容。
然后去开启safe_mode = on,再次访问,就没有任何的回显了。
限制环境变量存取
safe_mode_allowed_env_vars = string
指定PHP程序可以改变的环境变量的前缀,当这个选项的值为空时,那么php可以改变任何环境变量,如safe_mode_allowed_env_vars = PHP_,当这个选项的值为空时,那么php可以改变任何环境变量。
外部程序执行目录
safe_mode_exec_dir = "E:Local TestWWW"(指定一个网站的主目录就可以了,其他的看情况而定)
禁用函数
disable_functions = 你想禁用的函数名
为了更安全的运行PHP,可以用此指令来禁止一些敏感函数的使用,当你想用该指令禁止一些危险函数时,切记把dl()函数也加到禁止列表,攻击者可以利用dl()函数加载自定义的php扩展来突破disable_function。配置禁用函数时可以使用逗号分隔函数名。
com组件
com.allow_dcom = false
PHP设置在安全模式下(safe_mode),仍旧允许攻击者使用COM()函数来创建系统组件来执行任意命令,可以关闭这个函数来防止出现漏洞。
使用COM()函数需要在PHP.ini中配置extension=php_com_dotnet.dll,如果PHP版本小于5.4.5,则不需要。

(3)基本配置-控制变量

全局变量注册开关
register_globals = off
默认值为off,在4.2版本之前是默认开启的。当为On时,程序可以接收来自服务器的各种环境变量,包括表单提交的变量,这是对服务器来讲时非常不安全的,所以不能让他注册为全局变量。
为off时,服务器端通过$_GET['name']来获取数据。
为on时,服务器端对POST或GET提交的变量,都会自动使用全局变量来接受值。
魔术引号自动过滤
magic_quotes_gpc = on
注:该特性在PHP5.4.0中被移除
在php.ini中默认关闭。为on时,会自动将所有的单引号、双引号、反斜杠和空字符都加上反斜杠来进行转义,开启会提高网站的安全性,但也会影响HTTP请求的数据。也可以使用addslashes来转义提交的HTTP请求数据,或是用stripslashes来删除转义。

(4)基本配置-远程文件

是否允许包含远程文件
allow_url_include = off
为on时,可以直接包含远程文件,若包含的变量为可控的,则可以直接控制变量来执行PHP代码。
是否允许打开远程文件
allow_url_open = on
允许本地PHP文件通过调用URL重写来打开和关闭写权限,默认的封装协议提供的ftp和http协议来访问文件。

(5)基本配置-目录权限

HTTP头部版本信息
expose_php = off
防止了通过http头部泄露的php版本信息
文件上传临时目录
upload_tmp_dir =
上传文件临时保存的目录,如果不设置的话,则采用系统的临时目录
用户可访问目录
open_basedir = 自己指定目录
能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问不应该访问的文件,一定程度上限制了phpshell的危害。

(6)基本配置-错误信息

内部错误选项
display_errors = on
显示PHP脚本的内部错误,网站发布后建议关闭PHP的错误回显,在调试的时候通常把PHP错误显示打开
错误报告级别
error_reporting = E_ALL & ~E_NOTICE
这个设置的作用是将错误级别调到最高,显示所有问题,方便排错。


注:以上的php.ini中的配置,在php.ini中都会有注释来进行说明,不明白或是不清楚的都可以查看注释

原文地址:https://www.cnblogs.com/-an-/p/13340827.html