Web代码审计概述
概念:
代码审计,是对应用程序源代码进行系统性检查的工作。它的目的是为了找到并且修复应用程序在开发阶段存在的一些漏洞或者程序逻辑错误,避免程序漏洞被非法利用给企业带来不必要的风险。代码审计不是简单的检查代码,审计代码的原因是确保代码能安全的做到对信息和资源进行足够的保护,所以熟悉整个应用程序的业务流程对于控制潜在的风险是非常重要的。
**简单的来说:代码审计就是提前从源码中发现漏洞,做到提前预警!**
意义
代码审计的思路
形成漏洞的条件
程序的两大根本:变量与函数
形成漏洞的条件:
A、可以控制的变量
【一切输入都是有害的 】
B、变量到达有利用价值的函数[危险函数]
【一切进入函数的变量是有害的】
漏洞的利用效果取决于最终函数的功能
变量进入什么样的函数就导致什么要的效果
Web代码审计基础知识
从PHP代码审计开始
为什么是PHP?
A、跨平台、应用广泛、复杂
B、变量处理灵活 [如变量覆盖、全局变量等]
C、函数库巨大
[导致漏洞类型多,既有通用的又有特有的]
D、代码审计的思路是可以通用的
初识函数-常见输出函数
echo
输出一个字符串或变量,但是不能输出数组。
print_r()
输出一个数组。
var_dump()
输出一个变量的结构,这个变量包含普通变量,数组,对象等
初识函数-获取当前进程所有变量/函数/常量/类
get_defined_vars(void)
此函数返回一个包含当前可用的变量列表的多维数组,这些变量包括环境变量、服务器变量和用户定义的变量。在函数中使用此函数可以调试函数中的变量,而不会返回其他的变量。
$GLOBALS 变量
此函数返回所有全局变量,当然函数中定义的变量不是全局量。
get_defined_functions(void)
获取所有已经定义的函数,包含内部函数和用户定义的函数。
输出用户定义的函数方法为:
h
h
h
=
g
e
t
d
e
f
i
n
e
d
f
u
n
c
t
i
o
n
s
(
)
;
v
a
r
d
u
m
p
(
hhh=get_defined_functions(); var_dump(
hhh=getdefinedfunctions();vardump(hhh[‘user’]);
get_defined_constants(void)
返回所有可用的常量,包含系统常量和用户定义的常量。
get_declared_classes(void)
返回所有可用的类,包含系统类和用户定义的类。
get_included_files()
返回包含的文件路径的数组,included 和 required 的包含文件
php 断点调试方法
exit 或 die 输出一个消息并退出程序执行。
以上函数可能会产生的漏洞
文件包含 包含漏洞
代码执行 执行任意代码漏洞
命令执行 执行任意命令漏洞
文件系统操作 文件(目录)读写等漏洞
数据库操作 SQL注射漏洞
数据显示 XSS等客服端漏洞
……
我们还需要了解的环境变量
$GLOBALS 全局调用
$_SERVER 访问信息获取
$_REQUEST 全部接受
$_POST 接受POST
$_GET 接受GET
$_FILES 文件上传
$_ENV 系统环境变量
$_COOKIE 处理COOKIE
$_SESSION 处理SESSION
……
需要熟悉开发框架
Web应用框架(Web application framework)是一种开发框架,用来支持动态网站、网络应用程序及网络服务的开发。其类型有基于请求的和基于组件的两种框架
常见的应用框架有:
Thinkphp,Yii,Laraver等
参考链接:https://www.php.cn/php-weizijiaocheng-386709.html