环境准备;PHPstudy

编译器准备;PHPstorm,notepad++

工具准备;seay源代码审计系统,rips,xdebug,forify SCY

漏洞辅助验证工具;burpsuite,火狐浏览器,加解密转换工具,SQL执行监控工具

后台回复0002

审计基础MVC架构

mvc是一种使用MVC(model view controller 模型-视图-控制器),设计创建web应用程序的模式。

MVC模式同时提供了对HTML,CSS和JavaScript的完全控制。

model(模型)是应用程序中用于处理应用程序数据逻辑的部分,表示应用程序核心(比如数据库记录列表),通常模型对象负责在数据库中存取数据。

view(视图)是应用程序中处理数据显示的部分。显示数据(数据库记录),通常视图是一句模型数据创建的

controller(控制器)是应用程序中处理用户交互的部分,处理输入(写入数据库记录),通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

使用mvc的目的是使模型和视图实现代码分离。从而使有一数据有不同的表现形式他强制性的使应用程序的输入,处理,输出分开处理,各有各的模块。如下关系图

mvc关系

代码审计基础(一)_java

PHP框架了解。

框架其实就是可重用代码的集合,框架的代码是框架架构的代码

常见的如下

zendframwork: (ZF)Yii
CakePHPSymfony
CodeIgniter(CICanPHP
Laravel SlimFramework
ThinkPHPPHPUnit
KYPHPinitPHP
SpeedPHP

PHP语法

大小写敏感,大小写的变量如A与a所表达的意思是不同的

代码审计基础(一)_java_02

这里指小写的foo不等同与大写的FOO

运算符

代码审计基础(一)_java_03

空值得表达的方式

foo =     ;#这样会被理解为一个空的值

foo = None;#这样也会被理解为一个空的值

foo = “None”;#这样会被理解成一个字符串

安全模式(5.2.x的版本)

safe_mode模式

代码审计基础(一)_java_04

代码保存于test.php

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

从get提交上来保存到cmd然后用system去执行。如下

构造

http://127.0.0.1/test.php?cmd=dir

代码审计基础(一)_java_05


这是在safe_mode关闭的情况下

代码审计基础(一)_java_06

代码审计基础(一)_java_07

刷新被屏蔽了,这个特性在php5.4.0被移除。

限制环境变量存取。

safe_mode_allowed_env_vars = string

指定PHP程序可以改变的环境变量的前缀,当这个值为空时,那么PHP可以改变任何环境变量

禁用函数与禁用类

代码审计基础(一)_java_08

类如禁用system函数如下

代码审计基础(一)_java_09

同时把safe_mode设置成off

代码审计基础(一)_java_10


com组件

com.allow _dcom =false

php 设置在安全模式下(safe_mode),仍然允许攻击者使用COM函数来创建系统组件,来执行任意命令,如果version<5.4.5就不需要

代码审计基础(一)_java_11


改成false

com.allow_dcom = false

全局变量注册开关。

register_globals = On
<?phpif(isset($_ESSION['username'])){    echo "do evering";}else{    echo "您尚未登陆";
}?>

简单的去写这个

register_globals = off

代码审计基础(一)_java_12

打开

register_globals = on

代码审计基础(一)_java_13

这样相当于拥有了username的权限,所以要把这个全局内容关闭

官方配置文档https://www.php.net/manual/zh/ini.list.php


代码审计基础(一)_java_14