网络安全自学篇-PHP代码审计(一)

一个网络安全学习爱好者在学习过程中记录下的笔记,希望在CSDN能和大家一起成长,学习,分享,进步,下面分享的是php代码审计的简介以及代码审计环境的介绍及各种工具,希望对入门网安的朋友们有所帮助,大神有兴趣看看即可,勿喷感谢,同时也欢迎各位师傅私聊交流学习。文章有所参考,也感谢教授我网安知识的师父们,感谢出生在这个互联网时代,知识触手可及。

代码审计简介

相较与黑盒测试而言,代码审计(白盒测试)可以帮助我们更能了解web应用的框架和结构方便我们挖掘出黑盒测试中难以发觉的一些漏洞,总而言之就是对代码进行审计,并发现代码的vulnerability。

代码安全性分析

从输入、输出的验证,安全功能以及异常处理入手

环境搭建

采用Phpstorm+Phpstudy
相关链接:
http://www.xue51.com/soft/37849.html
https://www.xp.cn/

审计辅助

Notepad++、Seay源代码审计工具、RIPS、Fortify SCA
相关链接:
https://dl.pconline.com.cn/html_2/1/117/id=10699&pn=0.html
https://www.jb51.net/softs/199462.html
http://rips-scanner.sourceforge.net/
https://www.zdfans.com/html/48084.html

验证辅助

Burpsuite、hackbar、Proxy(代理工具)、Modheader等

架构认识

案例:

MVC架构

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
Model(模型):是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据。
View(视图):是应用程序中处理数据显示的部分,也就是=用户看到并与之交互的界面。
Controller(控制器):是应用程序中处理用户交互的部分,例如当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

MVC架构处理流程

接收请求->全局过滤->模块文件->Controller(函数内容)->Model(函数内容)->View(显示)

常见的PHP框架

ThinkPHP、Yaf、Laravel 、Kohana、CodeIgniter、Yii、Smyfony、doitphp等

审计方式

一、通读原文
函数集文件、配置文件、lib安全过滤文件、Index文件、主目录、模块目录、插件目录、上传目录、模板目录、数据目录、配置目录、配置文件、公共函数文件、安全过滤文件、数据库结构、入口文件等
二、 敏感关键字回溯参数
select、insert、eval、exec等等
三、查找可控变量

$_POST$_GET$_REQUEST
	$var = $_GET['var'];
	eval($var);

四、功能点定向审计
程序安装、文件上传、文件管理、登录验证、备份恢复、找回密码

PHP核心安全配置详解

基本配置-语法

directive =value(指令=值)
foo = bar != FOO =bar

运算符

|、&、~、!

空值

foo = ;
foo = none;
foo = "none“;

安全模式

safe_mode= on(用来限制文档的存取、限制环境变量的存取,控制外部程序的执行,PHP5.4.0以上被移除)
safe_model_allowed_env_vars = string,限制环境变量的存取,即PHP程序能改变环境变量的前缀,当选项值为空时,PHP可以改变任何环境变量
safe_mode_exec_dir=“E:\Phpstudy\WWW”,控制外部程序的执行
disable_functions,禁用函数,禁止一些敏感函数,但不要禁止dl函数,攻击者可以利用dl()函数加载自定义的php扩展来突破disable_function
com.allow_dcom= false,com组件,PHP设置在安全模式下(safe_mode),仍旧允许攻击者使用COM()函数来创建系统组件来执行任意命令
register_globals= off,全局变量注册开关
magic_quotes_gpc= on,相当于addslashes
allow_url_include= off,包含远程文件,注意变量是否可控
allow_url_open= on,允许本地PHP文件通过调用URL重写来打开和关闭写权限
expose_php= off,防止通过http头部泄露的php版本信息
upload_tmp_dir = “E:\Phpstudy\WWW\temp\upload”,上传文件临时保存的目录
open_basedir= “E:\Phpstudy\WWW”,控制PHP脚本只能访问指定的目录
display_errors= on,网站发布后建议关闭
error_reporting= E_ALL & ~E_NOTICE,方便排错

你可能感兴趣的:(网络安全自学篇-PHP代码审计)