初探PHP代码审计--代码审计基础流程
作为一名练习时长两年半的网安练习生,之前在学习的路上可谓是走了非常多的弯路的,蓦然回首发现之前的学习路程是多么的没有方向;
回归正题,代码审计可以说是网络安全工作中的一份重要内容,是安全岗位进阶的必备技能;
-
那么什么是代码审计呢?
代码审计(Code audit)是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。也就是说代码审计是检查源代码中的安全缺陷,探查某些敏感操作是不是用户可控的; -
代码审计分类?
其实代码审计在我的理解上分为两大类:白盒静态分析和功能点人工代码审计,白盒静态分析呢,指不运行被测程序本身,仅通过分析或检查源程序的文法、结构、过程、接口等来检查程序的正确性,找出程序中存在的风险;而功能点人工代码审计呢,是指对某个或某几个重要的功能点的源代码进行人工代码审计,发现功能点存在的代码安全问题,能够发现一些业务逻辑层面的漏洞。
以上两点是我对代码审计的简单理解,下面介绍下代码审计的基础流程(PHP代码审计):

其实根本的代码审计还是要有足够的代码基础,对软件开发过程中功能实现的逻辑流程需了解;
(一) 正向审计分析
在正常的代码审计过程当中,我们可以靠一个叫做正向分析的方法来进行审计的工作,由于漏洞形成过程基本都在围绕的一点进行的,也就是任何漏洞,全部都是在围绕着一个点,那就是用户可控,这个参数可控,大家可以想一想是不是,那么在代码审计的过程当中,其中的一个方法也可以围绕这个点来进行,但是要知道什么代码是可以造成用户可控参数的。
下面为常见的PHP代码可造成用户可控参数:
<?php
$_GET["php"] //GET方式传参
$_POST["php"] //POST方式传参
$_COOKIE["php"] //COOKIE方式进行传参
$FILE["php"] //文件上传
$REQUEST["php"] //表示get于POST都可以传参
$_ENV
$_SESSION
$Server["user-Agent"] //半控制情况具体分析
$file_get_contents("php://input") //流方式传参
......
?>
**所要注意的是在php中文件包含可能会存在某些过滤机制,所以需要分析漏洞点所包含的文件;**
(二) 逆向审计分析
在代码审计的工作当中经常我们是多种方式方法进行配合最终拿到一些漏洞,那么除了上述的正向审计,其实还存在一种审计方法为逆向审计。逆向审计顾名思义,与正向审计相对,正向审计当中我们是查看是查看可控参数是否到了敏感函数当中,那么逆向审计我们即为直接全局搜索敏感函数,查看敏感函数当中的变量最终是否为我们用户可控的,以此来发现漏洞。
下面为常见的PHP敏感函数:
<?php
//读取类操作
file_get_contents(
file_put_contents(
fopen(
fwrite(
fputs(
fread(
readfile(
unlink(
# #
//RCE类操作
system(
eval(
popen(
exec(
shell_exec(
.......
?>
(三) 从功能点入手,对功能点排查
此类模块就得根据经验判断该类应用通常会在哪些功能中出现漏洞。应多尝试demo,我也会在日后更新我所审计的demo。完成后会及时做出文章进行分享,希望大家可以多多交流指正;
(三) 静态工具扫描
对于某些漏洞,使用代码静态扫描工具代替人工漏洞挖掘可以显著提高工作效率。常用的代码审计工具Fority(Seay,RIPS), 它通过内置的五大主要分析引擎:数据流、语义、结构、控制流、配置流等对应用软件的源代码进行静态的分析,通过与软件安全漏洞规则集进行匹配、查找,从而将源代码中存在的安全漏洞扫描出来,并可导出报告。扫描的结果中包括详细的安全漏洞信息、相关的安全知识、修复意见。
总的来说:代码审计意义重大,是整个安全保障体系中核心又最重要的工作,往往被人们忽视。时代新威提示大家一定不要疏忽代码审计的重要性,防备安全隐患。

浙公网安备 33010602011771号