资讯专栏INFORMATION COLUMN

PHP代码审计总结

Amio / 691人阅读

摘要:尽量使安全措施对用户透明,或采用用户熟悉的方式。比如在用户访问受控信息前需要输入用户名和密码来确认身份。跟踪数据数据从哪来,要到哪去在代码审计中,主要检查代码中与外部交互的部分。注意真实环境中可能会有用户自定义的函数,根据实际情况进行判断

开发安全应用的原则

1.深度防范(冗余,谨慎过头了)
2.最小权限(分配尽量少的权限)
3.简单就是美(复杂容易出错,出错导致漏洞)
4.暴露最小化(隐藏关键数据)
等等等等

方法

1.平衡风险与可用性
用户操作的友好性与安全措施比较矛盾,在提高安全性的同时,通常会降低可用性(操作麻烦,步骤繁琐)。
尽量使安全措施对用户透明,或采用用户熟悉的方式。比如在用户访问受控信息前需要输入用户名和密码来确认身份。
2.跟踪数据
(数据从哪来,要到哪去)在代码审计中,主要检查代码中与外部交互的部分。
3.过滤输入

4.转义输出

代码审计

漏洞形成的条件:
1.可控变量(一切输入都是有害的)
2.对变量进行操作的函数(一切进入函数的变量都是有害的)
漏洞的利用效果取决于最终函数的功能,变量进入什么样的函数就导致什么漏洞
文件包含---->包含漏洞
代码执行---->执行任意代码漏洞
命令执行---->执行任意命令漏洞
文件系统操作---->文件(目录)读写等漏洞
数据库操作---->SQL注射漏洞
数据显示 ---->XSS等客服端漏洞

代码审计本质

找漏洞==找对应变量与函数
变量跟踪的过程
通过变量找函数[正向跟踪变量]
通过函数找变量[逆向跟踪变量]

变量的传递与二次漏洞
变量存储、提取、传递是一个复杂的立体的过程,过程中经过多个不一样的函数的处理后继续传递,最终达到漏洞函数,传递的过程中任意环节可控就可能导致漏洞,中间函数处理的过程诞生新的变量,新的变量达到新的漏洞函数诞生新的漏洞[二次漏洞]

变量

$_SERVER
$_GET $_POST
$_COOKIE
$_REQUEST
$_FILES $_ENV
$_HTTP_COOKIE_VARS
$_HTTP_ENV_VARS
$_HTTP_GET_VARS
$_HTTP_POST_FILES
$_HTTP_POST_VARS
$_HTTP_SERVER_VARS
*

在PHP中这些变量可由用户输入,应对这些变量进行检查,各个变量(函数)的含义用法可在手册中查看
手册地址:
https://www.php.net/manual/zh/reserved.variables.server.php

函数

我们通过在全部程序文件中搜索这些函数,确定函数的参数是否会因为外部提交而改变
检查这些参数是否有经过安全处理
命令注入

system、exec、passthru、``、shell_exec、popen、proc_open、pcntl_exec

防范方法:

1.使用自定义函数或函数库来替代外部命令的功能
2.使用 escapeshellarg 函数来处理命令参数
3.使用 safe_mode_exec_dir 指定可执行文件的路径
XSS

反射型跨站,因为是立即输出显示给客户端,所以应该在当前的 php 页面检查变量被
客户提交之后有无立即显示,在这个过程中变量是否有经过安全检查。
存储型跨站,检查变量在输入后入库,又输出显示的这个过程中,变量是否有经过安
全检查。

echo、print、printf、vprintf、<%=$test%>

防范方法:

1.如果输入数据只包含字母和数字,那么任何特殊字符都应当阻止
2.对输入的数据经行严格匹配,比如邮件格式,用户名只包含英文或者中文、下划线、连字符,对输出进行 HTML 编码

文件包含

include、include_once、require、require_once、show_source、highlight_file、readfile、file_get_contents、fopen、file

防范方法:

1.对输入数据进行精确匹配,比如根据变量的值确定语言 en.php、cn.php,那么这两个文件放在同一个目录下’language/’.$_POST[‘lang’].’.php’,那么检查提交的数据是否是 en 或者 cn 是最
严格的,检查是否只包含字母也不错
2.通过过滤参数中的/、…等字符

代码注入

eval、preg_replace+/e、assert、call_user_func、
call_user_func_array、create_function

防范方法:
1.输入数据精确匹配
2.白名单方式过滤可执行的函数

SQL注入

SQL 注入因为要操作数据库,所以一般会查找SQL 语句关键字:

insert、delete、update、select,

查看传递的变量参数是否用户可控制,有无做过安全处理

防范方法:
参数化查询,预编译

XXE

Xpath

HTTP响应拆分

使用 header 函数和使用**$_SERVER变量**。注意:PHP 的高版本会禁止 HTTP 表头中出现换行字符,这类可以直接跳过本测试。

文件上传

PHP 文件上传通常会使用 move_uploaded_file,也可以找到文件上传的程序进行具体分析

防范方法:
1.使用白名单方式检测文件后缀
2.上传之后按时间能算法生成文件名称
3.上传目录脚本文件不可执行
4.注意%00截断

文件类函数

copy、rmdir、unlink、delete、fwrite、chmod、
fgetc、fgetcsv、fgets、fgetss、file、file_get_contents、fread、readfile、ftruncate、file_put_contents、
fputcsv、fputs,

通常 PHP 中每一个文件操作函数都可能是危险的。

注意

真实环境中可能会有用户自定义的函数,根据实际情况进行判断

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/118950.html

相关文章

  • PHP 开发者如何做代码审查?

    摘要:我们做代码审计之前选好工具也是十分必要的。一审计工具介绍代码审计系统功能介绍是一款基于开发的针对代码安全审计的软件。自定义审计规则。黑盒敏感信息泄露一键审计。挖掘这种漏洞主要是检查是否使用了,搜索和。 GitChat 作者:汤青松原文:PHP 开发者如何做代码审查?关注微信公众号:「GitChat 技术杂谈」 一本正经的讲技术 【不要错过文末彩蛋】 前言 工欲善其事,必先利其器。我们做...

    Achilles 评论0 收藏0
  • 通过代码审计找出网站中的XSS漏洞实战(三)

    摘要:一背景笔者此前录制了一套的视频教程,在漏洞案例一节中讲解手工挖掘工具挖掘代码审计三部分内容准备将内容用文章的形式再次写一此前两篇已经写完,内容有一些关联性,其中手工挖掘篇地址为快速找出网站中可能存在的漏洞实践一本文主要记录通过代码审计的方式 一、背景 笔者此前录制了一套XSS的视频教程,在漏洞案例一节中讲解手工挖掘、工具挖掘、代码审计三部分内容,准备将内容用文章的形式再次写一此,前两篇...

    Ryan_Li 评论0 收藏0
  • PHP 代码审计:(一)文件上传

    摘要:代码审计一文件上传概述在网站的运营过程中,不可避免地要对网站的某些页面或内容进行更新,这时便需要使用到网站上的文件上传功能。 PHP 代码审计:(一)文件上传 0x00 概述 在网站的运营过程中,不可避免地要对网站的某些页面或内容进行更新,这时便需要使用到网站上的文件上传功能。如果不对被上传文件进行限制,或限制被绕过,该功能便有可能会被利用于上传可执行文件、脚本到服务器上,今儿进一步导...

    vslam 评论0 收藏0
  • 某IP设备代码审计

    摘要:偶尔看到一个设备的漏洞挖掘。尝试也看了一下代码。 偶尔看到一个设备的漏洞挖掘。尝试也看了一下代码。如下: 参考:https://blog...

    番茄西红柿 评论0 收藏2637
  • 浅谈开源web程序后台的安全性

    摘要:大学网站使用了名为的开源程序,青年使用一个已经公开的漏洞进入后台青年使用后台上传限制不严的缺陷上传了一个控制主机赠送我国国旗。这些程序都是国内开源程序中的佼佼者,也比较注重安全性。此时后台程序的安全性成为一个短板。 一、前言 不知怎的最近甚是思念校园生活,思念食堂的炒饭。那时会去各种安全bbs上刷刷帖子,喜欢看别人写的一些关于安全技巧或经验的总结;那时BBS上很多文章标题都是:成功渗...

    ad6623 评论0 收藏0

发表评论

0条评论

Amio

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<