php代码审计,php漏洞详解

文章目录

  • 1、输入验证和输出显示
  • 2、命令注入(Command Injection)
  • 3、eval 注入(Eval Injection)
  • 4、跨网站脚本攻击(Cross Site Scripting, XSS)
  • 5、SQL 注入攻击(SQL injection)
  • 6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)
  • 7、Session 会话劫持(Session Hijacking)
  • 8、Session 固定攻击(Session Fixation)
  • 9、HTTP 响应拆分攻击(HTTP Response Splitting)
  • 10、文件上传漏洞(File Upload Attack)
  • 11、目录穿越漏洞(Directory Traversal)
  • 12、远程文件包含攻击(Remote Inclusion)
  • 13、动态函数注入攻击(Dynamic Variable Evaluation)
  • 14、URL 攻击(URL attack)
  • 15、表单提交欺骗攻击(Spoofed Form Submissions)
  • 16、HTTP 请求欺骗攻击(Spoofed HTTP Requests)

1、输入验证和输出显示

大多数漏洞的形成原因主要都是未对输入数据进行安全验证或对输出数据未经过安全处
理,比较严格的数据验证方式为:

对数据进行精确匹配
接受白名单的数据
拒绝黑名单的数据
对匹配黑名单的数据进行编码

在 PHP 中可由用户输入的变量列表如下,我们应该对这些输入变量进行检查:

$_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

2、命令注入(Command Injection)

PHP 中可以使用下列 5 个函数来执行外部的应用程序或函数

system、exec、passthru、shell_exec、(与 shell_exec 功能相同)

使用方式

string system(string command, int &return_var)
command 要执行的命令
return_var 存放执行命令的执行后的状态值
string exec (string command, array &output, int &return_var)
command 要执行的命令
output 获得执行命令输出的每一行字符串
return_var 存放执行命令后的状态值
void passthru (string command, int &return_var)
command 要执行的命令
return_var 存放执行命令后的状态值

案例
将下面代码放在服务器,我们在浏览器访问

//ex1
<?php
$ip = $_GET["ip"];
if (isset($ip))
{
echo "<pre>";
system("ping ".$ip);
echo "</pre>";
}
?>

可以看到执行了ping命令
在这里插入图片描述
由于它没有对 ip 参数进行任何验证或过滤,恶意用户可以通过在 URL 中添加特殊字符来执行任意命令
在这里插入图片描述

3、eval 注入(Eval Injection)

eval 函数将输入的字符串参数当作 PHP 程序代码来执行
将下面代码放在服务器,我们在浏览器访问

//ex2
<?php
$var = "var";
if (isset($_GET["arg"]))
{
$arg = $_GET["arg"];
eval("\$var = $arg;");
echo "\$var =".$var;
}
?>

当我们把传递的参数值改为phpinfo的时候,漏洞就产生了
在这里插入图片描述
防范方法

1、尽量不要执行外部命令
2、使用自定义函数或函数库来替代外部命令的功能
3、使用 escapeshellarg 函数来处理命令参数
4、使用 safe_mode_exec_dir 指定可执行文件的路径
esacpeshellarg 函数会将任何引起参数或命令结束的字符转义,单引号“’”,替换成“\’”,双引号““”,替
换成“””,分号“;”替换成“;”
用 safe_mode_exec_dir 指定可执行文件的路径,可以把会使用的命令提前放入此路径内

4、跨网站脚本攻击(Cross Site Scripting, XSS)

反射型跨站常常出现在用户提交的变量接受以后经过处理,直接输出显示给客户端;存储
型跨站常常出现在用户提交的变量接受过经过处理后,存储在数据库里,然后又从数据库中读取
到此信息输出到客户端。输出函数经常使用:echo、print、printf、vprintf、<%=$test%>

这里用pikachu的存储型代码进行分析
在这里插入图片描述
这段代码它没有对用户输入的留言进行任何验证或过滤,因此可能会受到存储型跨站脚本攻击(Stored XSS Attack)的威胁。存储型跨站脚本攻击是一种常见的网络攻击方式,攻击者通过在网页中插入恶意脚本,来窃取用户信息或破坏网页内容1

5、SQL 注入攻击(SQL injection)

SQL 注入攻击(SQL Injection),是攻击者在表单中提交精心构造的 sql 语句,改动原来的 sql 语句,如
果 web 程序没有对提交的数据经过检查,那么就会造成 sql 注入攻击。

1、攻击者访问有 SQL 注入漏洞的站点,寻找注入点
2、攻击者构造注入语句,注入语句和程序中的 SQL 语句结合生成新的 sql 语句
3、新的 sql 语句被提交到数据库中执行 处理
4、数据库执行了新的 SQL 语句,引发 SQL 注入攻击

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

insert、delete、update、 select

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

6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)

跨站请求伪造攻击,是攻击者伪造一个恶意请求链接,通过各种方式让正常用户访问后,
会以用户的身份执行这些恶意的请求。我们应该对比较重要的程序模块,比如修改用户密码,添 加用户的功能进行审查,检查有无使用一次性令牌防御
csrf 攻击。

7、Session 会话劫持(Session Hijacking)

会话劫持是指攻击者利用各种手段来获取目标用户的 session id。一旦获取到 session id,那么攻击者可以利用目标用户的身份来登录网站,获取目标用户的操作权限。

服务端和客户端之间是通过 session(会话)来连接沟通。当客户端的浏览器连接到服务器后,服务器就会建立一个该用户的session。
每个用户的 session 都是独立的,并且由服务器来维护。 每个用户的 session是由一个独特的字符串来识别,成为session id。用户发出请求时,所发送的 http 表头内包含 session id 的值。
服务器使用 http 表头内的session id 来识别时哪个用户提交的请求。
session 保存的是每个用户的个人数据,一般的 web 应用程序会使用session 来保存通过验证的用户 账号和密码。在转换不同的网页时,如果需要验证用户身份,就是用 session内所保存的账号和密码来比较。
session 的生命周期从用户连上服务器后开始,在用户关掉浏览器或是注销时用户session_destroy 函数删除 session 数据时结束。如果用户在 20 分钟内没有使用计算机的动作,session也会自动结束。

8、Session 固定攻击(Session Fixation)

如果当权限级别改变时(例如核实用户名和密码后,普通用户提升到管理员),我们就应该
修改即将重新生成的会话 ID,否则程序会面临会话固定攻击的风险。

9、HTTP 响应拆分攻击(HTTP Response Splitting)

HTTP 响应拆分是由于攻击者经过精心设计利用电子邮件或者链接,让目标用户利用一个请求产生两个响应,前一个响应是服务器的响应,而后一个则是攻击者设计的响应。此攻击之所以会发生,是因为 WEB程序将使用者的数据置于 HTTP 响应表头中,这些使用者的数据是有攻击者精心设计的。
可能遭受 HTTP 请求响应拆分的函数包括以下几个:

header(); setcookie(); session_id(); setrawcookie();

注意
PHP 的高版本会禁止 HTTP 表头中出现换行字符,这类可以直接跳过本测试

10、文件上传漏洞(File Upload Attack)

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

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

11、目录穿越漏洞(Directory Traversal)

12、远程文件包含攻击(Remote Inclusion)

13、动态函数注入攻击(Dynamic Variable Evaluation)

14、URL 攻击(URL attack)

15、表单提交欺骗攻击(Spoofed Form Submissions)

16、HTTP 请求欺骗攻击(Spoofed HTTP Requests)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/32108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动化实践-全量Json对比在技改需求提效实践

1 背景 随着自动化测试左移实践深入&#xff0c;越来越多不同类型的需求开始用自动化测试左移来实践&#xff0c;在实践的过程中也有了新的提效诉求&#xff0c;比如技改类的服务拆分项目或者BC流量拆分的项目&#xff0c;在实践过程中&#xff0c;这类需求会期望不同染色环境…

SpringCloud源码探析(九)- Sentinel概念及使用

1.概述 在微服务的依赖调用中&#xff0c;若被调用方出现故障&#xff0c;出于自我保护的目的&#xff0c;调用方会主动停止调用&#xff0c;并根据业务需要进行对应处理&#xff0c;这种方式叫做熔断&#xff0c;是微服务的一种保护方式。为了保证服务的高可用性&#xff0c;…

rknn3588如何查看npu使用情况

cat /sys/kernel/debug/rknpu/load

windows环境下编译OpenJDK12

环境&#xff1a;Windows11 目录&#xff1a; 1、下载OpenJDK12源码 下载地址&#xff1a; https://hg.openjdk.org/jdk/jdk12 点击zip下载到本地。 解压到本地。 Tip&#xff1a;注意本地路径中最好不要包含中文或空格。 2、阅读一遍doc/building.html 如果只是想构建J…

白帽黑帽与linux安全操作

目录 白帽黑帽 Linux安全 白帽黑帽 白帽&#xff08;White Hat&#xff09;和黑帽&#xff08;Black Hat&#xff09;通常用于描述计算机安全领域中的两种不同角色。白帽黑客通常被认为是合法的安全专家&#xff0c;他们通过合法途径寻找和修复安全漏洞&#xff0c;帮助企业和…

Linux/centos上如何配置管理samba服务器?

Linux/centos上如何配置管理samba服务器&#xff1f; 1 samba服务相关知识1.1 SMB协议1.2 samba工作原理1.2.1 相关进程1.2.2 samba工作流程1.2.3 samba功能 2 samba服务器安装2.1 利用光驱安装2.2 利用光盘映射文件 3 启动与停止samba服务4 配置samba服务器4.1 samba主配置文件…

解读百威亚太2023上半年财报:啤酒大年百威如何重塑高端化之路?

随着消费者的需求提升&#xff0c;啤酒行业向高端化发展&#xff0c;其中知名度较高的百威亚太、华润啤酒、青岛啤酒、燕京啤酒、嘉士伯等品牌在高端市场持续鏖战&#xff0c;实际成果如何也可以从业绩一探究竟。 以百威亚太为例。8月3日&#xff0c;百威亚太发布2023年上半年…

记录一次electron打包提示文件找不到的解决方法

没有配置files选项 files的作用是配置打包到应用程序的构建资源 就是说如果你想使用项目那个目录下的文件 就得通过files配置一下不然就会报错 json文件或者yml文件会报的错 格式是这样的 "files": ["dist-electron", "dist"],electron打包配…

【C++学习】STL容器——list

目录 一、list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list 迭代器失效 二、list的模拟实现 2.1 模拟实现list 三、list和vector的对比…

【算法挨揍日记】day01——双指针算法_移动零、 复写零

283.移动零 283. 移动零https://leetcode.cn/problems/move-zeroes/ 题目&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 …

生信豆芽菜-火山图绘制使用说明

网站&#xff1a;http://www.sxdyc.com/visualsVolcano 一、火山图简介 火山图是散点图的一种&#xff0c;它将统计测试中的统计显著性量度&#xff08;如p value&#xff09;和变化幅度&#xff08;logFC&#xff09;相结合&#xff0c;能够快速直观地识别那些变化幅度较大且具…

13个Python最佳编程技巧,越早知道越好

每天我们都会面临许多需要高级编码的编程挑战。你不能用简单的 Python 基本语法来解决这些问题。在本文中&#xff0c;我将分享 13 个高级 Python 脚本&#xff0c;它们可以成为你项目中的便捷工具。如果你目前还用不到这些脚本&#xff0c;你可以先添加收藏&#xff0c;以备留…

springMVC 程序开发

目录 一. 认识 springMVC spring&#xff0c;springBoot&#xff0c;springMVC的关系 二. springMVC 的连接和获取参数 1. 注解分析&#xff08;不带参数&#xff09; 2. 获取参数 3. 获取对象参数 4. 重命名功能 5. 获取 JSON 对象 6. 通过 path 文件路径来传递参数…

新版Android Studio模拟器浮动

&#xff08;水一篇&#xff0c;但其实很多入门同学不知道&#xff09; 安装新版Andorid Studio后会发现模拟器是内嵌在AS中的&#xff0c;如何让她浮动

[C++项目] Boost文档 站内搜索引擎(4): 搜索的相关接口的实现、线程安全的单例index接口、cppjieba分词库的使用、综合调试...

有关Boost文档搜索引擎的项目的前三篇文章, 已经分别介绍分析了: 项目背景: &#x1fae6;[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍…文档解析、处理模块parser的实现: &#x1fae6;[C项目] Boost文档 站内搜索引擎(2): 文档文本解析模块…

C++学习| MFC简单入门

前言&#xff1a;因为接手了CMFC的程序&#xff0c;所以需要对MFC编程方面有所了解。 C之MFC简单入门 MFC相关的概念MFCWIN32QT MFC项目基本操作MFC项目创建MFC项目文件解读界面和代码数据交互——加法器 MFC相关的概念 MFC MFC&#xff08;Microsoft Foundation Classes微软…

MySQL中基础查询语句

用户表user数据如下&#xff1a; iddevice_idgenderageuniversityprovince12138male21北京大学Beijing23214male复旦大学Shanghai36543famale20北京大学Deijing42315female 23 浙江大学ZheJiang55432male25山东大学Shandong 1&#xff0c;写出ddl语句创建如上表&#xff0c;…

CEC2013(MATLAB):淘金优化算法GRO求解CEC2013的28个函数

一、淘金优化算法GRO 淘金优化算法&#xff08;Gold rush optimizer&#xff0c;GRO&#xff09;由Kamran Zolf于2023年提出&#xff0c;其灵感来自淘金热&#xff0c;模拟淘金者进行黄金勘探行为。淘金优化算法&#xff08;Gold rush optimizer&#xff0c;GRO&#xff09;提…

centos7实现负载均衡

目录 一、基于 CentOS 7 构建 LVS-DR 集群。 1.1 配置lvs负载均衡服务 1.1.1 下载ipvsadm 1.1.2 增加vip 1.1.3 配置ipvsadm 1.2 配置rs1 1.2.1 编写测试页面 1.2.2 手工在RS端绑定VIP、添加路由 1.2.3 抑制arp响应 1.3 配置rs2 1.4 测试 二、配置nginx负载…

AMEYA360:尼得科科宝旋转型DIP开关系列汇总

旋转型DIP开关 S-4000 电路&#xff1a;BCD(十进制) 代码格式&#xff1a;实码 安装类型&#xff1a;表面贴装 调整位置&#xff1a;顶部 可水洗&#xff1a;无 端子类型&#xff1a;J 引线, 鸥翼型 旋转型DIP开关 SA-7000 电路&#xff1a;BCD(十进制), BCH(十六进制) 代码格式…