何为docker
Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。
踏上路途吧
2023-04-20 12:221623
Docker Compose 是一个用于管理 Docker 应用程序的工具,它允许你使用 YAML 文件来定义应用程序的服务、网络和卷等内容,并在单个主机或多个主机上进行部署。Docker Compose 有以下版本:
docker stack
命令将Compose文件部署到Swarm集群中。在 docker-compose.yml
文件中指定的version必须与安装在主机上的Docker Compose版本相匹配。如果使用不同版本之间的兼容性问题,则可能会导致意外行为或错误。通常情况下,使用最新版本的Docker Compose是最好的选择,因为它包含最新的特性和修复了已知的漏洞。你可以通过运行以下命令来检查所安装的Docker Compose版本:
1 | 复制代码docker-compose version |
然后,在docker-compose.yml
文件中指定适当的版本号,例如:
1 | yaml复制代码version: "3.9" |
总之,Docker Compose有几个版本,每个版本都提供了不同的特性和兼容性。在编写docker-compose.yml
文件时,请确保所指定的version与主机上安装的Docker Compose版本相匹配,以避免任何问题。
//利用系统变量构造nl命令
${PATH:~A}${PWD:~A}$IFS????.???
学到一个新技能,使用wappalyzer可以得到web的服务器和php版本
们先来看一下我们能用的数字有哪些:
0:可以用字符代替;
1:
1 | ${#SHLVL}=1,或者${##}、${#?}。 |
1 | SHLVL是记录多个 Bash 进程实例嵌套深度的累加器,进程第一次打开shell时${#SHLVL}=1,然后在此shell中再打开一个shell时${#SHLVL}=2。 |
1 | 2:`用wappalyzer插件可以看到php的版本是7.3.22,所以2可以用${PHP_VERSION:~A}代替。` |
传参
1 | code=${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?${USER:~A}? ????.??? |
(1)第一种方法:
1 | `从左向右截取最后一个string后的字符串` |
“*”只是一个通配符可以不要
请看下面的例子:
1 | $ MYVAR=foodforthought.jpg |
(2)第二种方法:
${varible:n1:n2}:截取变量varible从n1开始的n2个字符,组成一个子字符串。可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:
1 | $ EXCLAIM=cowabunga |
php.ini是php的一个全局配置文件,对整个web服务起作用;而.user.ini和.htaccess一样是目录的配置文件,.user.ini就是用户自定义的一个php.ini,我们可以利用这个文件来构造后门和隐藏后门。
实例
php 配置项中有两个配置可以起到一些作用
1 | auto_prepend_file = <filename> //包含在文件头 |
这两个配置项的作用相当于一个文件包含,比如
1 | // .user.ini |
满足这三个文件在同一目录下,则相当于在1.php文件里插入了包含语句require(‘1.png’),进行了文件包含。
另一条配置包含在文件尾,如果遇到了 exit 语句的话就会失效。
.user.ini使用范围很广,不仅限于 Apache 服务器,同样适用于 Nginx 服务器,只要服务器启用了 fastcgi 模式 (通常非线程安全模式使用的就是 fastcgi 模式)。
局限
在.user.ini中使用这条配置也说了是在同目录下的其他.php 文件中包含配置中所指定的文件,也就是说需要该目录下存在.php 文件,通常在文件上传中,一般是专门有一个目录用来存在图片,可能小概率会存在.php 文件。
但是有时可以使用 ../ 来将文件上传到其他目录,达到一个利用的效果。
PHP的00截断是5.2.x版本的一个漏洞,当用户输入的url参数包含%00经过浏览器自动转码后截断后面字符。
例如url输入的文件名1.txt%00.jpg经过url转码后会变为1.txt\000.jpg,测试文件1.php如下
1 | <?php |
测试文件1.txt如下
1 | <?php |
php5.2.x版本解析1.php时,会将1.txt\000.jpg解释为1.txt
只要比较发现文件名的strlen长度和语法分析出来的长度不一样,就说明内部存在截断的字符,因此输出了打开文件失败的信息。
1 | <?php |
新的系列开始了,还没练过,让我看看都是什么怪物,bangbang炸弹全部拿捏