当前位置: 首页 > 编程日记 > 正文

php 伪协议 lfi,php://伪协议(I/O)总能给你惊喜——Bugku CTF-welcome to bugkuctf

今天一大早BugkuCTF 的welcome to bugkuctf 就给了我一发暴击:完全不会啊。。。光看源码就发现不知道怎么处理了,于是转向writeup求助。结果发现这是一道非常有营养的题目,赶紧记录一下。

题目链接:http://123.206.87.240:8006/test1/

49e33d241bbd

源码

要点很清晰,首先是三个变量用get方式传进去。(这里password变量不是重点)之后,要用file_get_contents读user变量(这里应为文件),且内容与所给字符串“welcome to the bugkuctf”严格相等。

emm,所以我就卡在了第一个点上,怎样让user文件的内容是“welcome to the bugkuctf”呢?于是php伪协议的第一个惊喜就出现了:php://input,功能上可以读入我们输入的内容,也就是说可以post字符串。(值得注意的是,php://input不能读get方式的传值)

除此之外,我们还有一个重点应该放在源码中提示的hint.php上,其要求是动态include($file),这时,以前用过的一招LFI就重出江湖了:

php://filter/read=convert.base64-encode/resource=hint.php

那么构造完整的url就是:

http://123.206.87.240:8006/test1/?txt=php://input&file=php://filter/read=convert.base64-encode/resource=hint.php

同时要post要求的字符串

返回的内容base64解码一波,如图

49e33d241bbd

hint.php

当然,这个内容肯定不太够,所以我们尝试看看index.php是否有其他的内容

49e33d241bbd

index.php

得到的完整源码如下:

class Flag{//flag.php

public $file;

public function __tostring(){

if(isset($this->file)){

echo file_get_contents($this->file);

echo "
";

return ("good");

}

}

}

?>

$txt = $_GET["txt"];

$file = $_GET["file"];

$password = $_GET["password"];

if(isset($txt)&&(file_get_contents($txt,'r')==="welcome to the bugkuctf")){

echo "hello friend!
";

if(preg_match("/flag/",$file)){

echo "不能现在就给你flag哦";

exit();

}else{

include($file);

$password = unserialize($password);

echo $password;

}

}else{

echo "you are not the number of bugku ! ";

}

?>

从源码才看出来网页源码给出的内容基本是唬人的,,,本来就是读的txt变量满足文件内容与welcome to the bugkuctf相等。。。但是思路确实是完全一致的。

而完整源码给我们的信息量就非常全面了,但是我自己迟迟没有找到要点。这里其实可以注意,我们能传的值只剩下password了,前面的file与txt都已经有了确定的值,那么思路就只需传password了。

password满足那些要求呢?且,源码中给出了关键提示的flag.php要怎么读呢?这里就涉及到几个关键要素:

1.file不能直接读flag.php,因为它正则匹配flag,所以无法令file=flag.php

2.但是,如果file文件名没有flag,就可以读file,传password并进行反序列化,最后以字符串形式输出password。

3.Flag类里面有一个魔术方法(貌似类似面向对象里面的构造方法),只要调用了flag类变量就会自动执行。方法的作用是什么呢?就是读出file的内容。

所以思路一下就非常清楚了:首先,txt传跟之前一样的值,file因为只是辅助的作用所以文件名叫hint.php就满足要求了。而为了读出flag.php内容,我们只需对password下手:password如果是flag类型变量,那么我们初始化时就会读出password变量的file属性,只要让这个file属性值为flag.php不就可以了吗?所以,最后一步只用把我们的想法用脚本付诸实践,以解决序列化的问题:

49e33d241bbd

用phpstorm在本地跑出来的结果

随后传值

49e33d241bbd

flag

总之,感觉自己的php还有很多要学,自己半吊子的自学还是差了口气。同时,php://用太多妙用了,日后有机会一定更新文章专门总结一下。

相关文章:

Pascal's Triangle

帕斯卡三角形&#xff0c;主要考察vector的用法。 vector<vector<int> > generate(int numRows){vector<vector<int> > result;vector<int> tmp;result.clear();tmp.clear();int i,j;if(numRows 0)return result;else if(numRows 1){tmp.push_…

SpringBoot请求转发与重定向

但是可能由于B网址相对于A网址过于复杂,这样搜索引擎就会觉得网址A对用户更加友好,因而在重定向之后任然显示旧的网址A,但是显示网址B的内容。在平常使用手机的过程当中,有时候会发现网页上会有浮动的窗口,或者访问的页面不是正常的页面,这就可能是运营商通过某种方式篡改了用户正常访问的页面。重定向,是指在Nginx中,重定向是指通过修改URL地址,将客户端的请求重定向到另一个URL地址的过程,Nginx中实现重定向的方式有多种,比如使用rewrite模块、return指令等。使用场景:在返回视图的前面加上。

SSO 单点登录和 OAuth2.0 有何区别?

此方法的缺点是它依赖于浏览器和会话状态,对于分布式或者微服务系统而言,可能需要在服务端做会话共享,但是服务端会话共享效率比较低,这不是一个好的方案。在单点登录的上下文中,OAuth 可以用作一个中介,用户在一个“授权服务器”上登录,并获得一个访问令牌,该令牌可以用于访问其他“资源服务器”上的资源。首先,SSO 主要关注用户在多个应用程序和服务之间的无缝切换和保持登录状态的问题。这种方法通过将登录认证和业务系统分离,使用独立的登录中心,实现了在登录中心登录后,所有相关的业务系统都能免登录访问资源。

【转】linux服务器性能查看

转载自https://blog.csdn.net/achenyuan/article/details/78974729 1.1 cpu性能查看 1、查看物理cpu个数&#xff1a; cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l 2、查看每个物理cpu中的core个数&#xff1a; cat /proc/cpuinfo |grep "cpu cores…

Rocksdb 内存“不释放”问题 分析

文章目录问题场景描述问题复现编写随机写 测试工具使用工具抓取内存分配过程源码分析memtable逻辑table_cache逻辑总结整体的IO场景到底层的源码分析过程如上导图&#xff0c;接下来将详细阐述具体的过程。问题场景描述 我们的rocksdb作为单机存储引擎&#xff0c;跑在用分布式…

GitHub上整理的一些工具【转载】

技术站点Hacker News&#xff1a;非常棒的针对编程的链接聚合网站Programming reddit&#xff1a;同上MSDN&#xff1a;微软相关的官方技术集中地&#xff0c;主要是文档类infoq&#xff1a;企业级应用&#xff0c;关注软件开发领域OSChina&#xff1a;开源技术社区&#xff0c…

show在php,show.php

我的留言板function dodel(id){if(confirm("确定要删除么&#xff1f;")){window.location del.php?idid;}}我的留言板添加留言查看留言查看留言留言标题留言人留言内容IP地址留言时间操作// 获取留言信息&#xff0c;解析后输出到表格中// 1.从留言liuyan.txt中获取…

#天天复制,今天写一个# 把文字转为图片

/*** 把文字转为图片* * param text* 要写的内容* throws IOException*/public static void textToImg(String text) throws IOException {int len text.length();int fontSize 1000;int width len * fontSize;Font font new Font("楷体", Font2D.NAT…

spark(3) - scala独立编程

>>非集成&#xff1a; 环境需要 * spark 2.4.0 * scala 2.11.12 * sbt &#xff08;打包&#xff09; 开发过程 1、shell命令下创建项目目录结构 *****/ project / src / main / scala -> . / ClassName.scala &#xff08; touch gedit 命令&#xff09; …

C++ STL: 基本六大部件概览 及 各个容器使用方式和底层实现概览

文章目录STL六大部件容器的使用Arrayvectorlistdequemutisetmultimapunordered_multiset/set使用一个东西&#xff0c;却不明白它的道理&#xff0c;不高明。STL六大部件 容器 Containers 用来存放数据分配器 Allocators 为容器内的数据分配存储空间算法 Algorithms 计算数据迭…

Android窗口管理服务WindowManagerService计算窗口Z轴位置的过程分析

文章转载至CSDN社区罗升阳的安卓之旅&#xff0c;原文地址&#xff1a;http://blog.csdn.net/luoshengyang/article/details/8570428 通过前面几篇文章的学习&#xff0c;我们知道了在 Android系统中&#xff0c;无论是普通的Activity窗口&#xff0c;还是特殊的输入法窗口和壁…

oracle非归档模式下如何备份,Oracle之RMAN数据库在非归档模式下的备份和恢复

1.数据库在非归档模式下的备份 SQLgt; archive log list;数据库日志模式 非存档模式自动存档 禁用存档终点 USE_DB_RECOVERY_FIL1.数据库在非归档模式下的备份SQL> archive log list;数据库日志模式 非存档模式自动存档 禁用存档终点 USE_DB_RECOVERY_FILE_DEST最早的联机日…

C# 视频多人脸识别的实现

上一篇内容的调整&#xff0c;提交到git了&#xff0c;https://github.com/catzhou2002/ArcFaceDemo基本思路如下&#xff1a;一、识别线程1.获取当前图片2.识别当前图片的人脸位置&#xff0c;并将结果存入列表3.分别获取人脸的特征值并比对&#xff0c;并将结果存入列表4.如果…

C++ STL: 分配器allocators 源码分析

STL 基本的六大组件作用以及功能如下&#xff1a; 可以看到allocator是数据存储组件container的幕后支持者&#xff0c;负责为其数据存储分配对应的存储空间。 operator::new 在详细介绍alloctor之前&#xff0c;先描述一下new运算符&#xff0c;我们使用C new一个对象的时候…

android xUtils的使用

gethub地址&#xff1a;https://github.com/wyouflf/xUtils/ xUtils简介 xUtils 包含了很多实用的android工具。xUtils 支持大文件上传&#xff0c;更全面的http请求协议支持(10种谓词)&#xff0c;拥有更加灵活的ORM&#xff0c;更多的事件注解支持且不受混淆影响...xUitls 最…

oracle 条件反转,Oracle反转倒置函数

Oracle提供了一个反转倒置函数reverse&#xff0c;但此函数不能分组倒置&#xff0c;本文提供了一个即可分组倒置的函数&#xff0c;如下所示&#xff1a;CREATE OR REPLACE FUNCTION REVERSE_F(p_str VARCHAR2, p_delimiter VARCHAR2:)RETURN VARCHAR2 ISv_return VARCHAR2(40…

android读取大图片并缓存

最近开发电视版的云存储应用&#xff0c;要求”我的相册“模块有全屏预览图片的功能&#xff0c;全屏分辨率是1920*1080超清。UI组件方面采用GalleryImageSwitcher组合&#xff0c;这里略过&#xff0c;详情参见google Android API。相册图片预取缓存策略是内存缓存&#xff08…

[ZJOI2018]历史

Description: 给定一棵树,定义每个点的操作为把这个点到1号点的路径覆盖上颜色i,每次该点到1号点经过的不同颜色段数会加到答案中,要使所有点按某一顺序操作完后答案最大 给定每个点要执行的操作次数,并给出m次修改,问每次修改后的最大答案 Hint: \(n,m \le 4*10^5\) Solution:…

C++ STL: lower_bound 和 upper_bound

接口声明 以下有两个不同的版本 lower_bound template <class ForwardIterator, class T>ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last,const T& val);template <class ForwardIterator, class T, class Compare>ForwardItera…

1199: 房间安排

1199: 房间安排 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1 Solved: 1[Submit][Status][Web Board]Description 2010年上海世界博览会(Expo2010),是第41届世界博览会。于2010年5月1日至10月31日期间&#xff0c;在中国上海市举行。本次世博会也是由中国举办的首届世界…

oracle判断非空并拼接,oracle sql 判断字段非空,数据不重复,插入多跳数据

&#xfeff;&#xfeff;oracle sql 判断字段非空&#xff0c;数据不重复select distinct(mobile) from wx_user_mobile where active_time is not nullbegininsert into sms_submit(id,gateway_id,source_number,dest_number,message_content)values(sms_system.nextval,1,88…

量产工具介绍(2)

前面介绍了量产工具概念&#xff0c;U盘构造&#xff0c;量产工具获取途径&#xff0c;以及国内的芯片分类&#xff0c;今天&#xff0c;我们从注意事项及常见问题继续介绍量产相关知识注意事项厂家推出的量产工具也是在不断提高版本的&#xff0c;新版本添加有新主控型号驱动。…

C++ STL: 容器vector源码分析

文章目录前言vector的核心接口vector push_back实现vector 的 Allocatorvector 的 push_back总结前言 vector 是我们CSTL中经常使用的一个容器&#xff0c;提供容量可以动态增长&#xff0c;并且随机访问内部元素的数据存储功能。 这个容器我们最常使用&#xff0c;所以也是最…

STM32学习笔记9(SysTick滴答时钟)

我不得不说意法半导体确实有点风骚&#xff01;甚至有点变态。我对ST文档 STM32F10XXX参考手册的编辑水平真是不敢恭维。手册中好多说明都是含糊不清&#xff0c;甚至将好多对初学者来说很重要的地方都一笔带过&#xff0c;让人着实摸不着头脑。比如前面我说过的关于NVIC嵌套向…

oracle存储空间管理,Oracle存储空间管理

Oracle存储空间管理1.查看每个数据文件的剩余表空间(一个表空间只对应N个数据文件,N一般等于1)主要是利用表dba_free_space(表空间剩余空间状况)和dba_data_files(数据文件空间占用情况)select b.file_id  "文件ID",b.tablespace_name  "表空间名",b.f…

漫谈Httpclient

引用地址&#xff1a; http://hc.apache.org/httpclient-3.x/ End of life The Commons HttpClient project is now end of life, and is no longer being developed. It has been replaced by the Apache HttpComponents project in its HttpClient andHttpCore modules, whic…

具体数学-扰动法

from scipy.special import combn int (input("n: "))k int (input("k: "))sum1 0for j in range(0, k):for i in range(0, n1):sum1 sum1 (i**j)*comb(k1,j)result ((n1)**(k1) - sum1)/comb(k1,k) print(result) python 中计算排列组合&#xff1a…

C++ STL: 超详细 容器 deque 以及 适配器queue 和 stack 源码分析

文章目录前言deque 实现deque类_Deque_iterator 类deque 的元素插入 insert函数deque如何模拟空间连续queue 实现stack 的实现前言 C容器中 deque是一个非常有趣的容器结构&#xff0c;我们知道deque本身是一个支持双向扩容的结构&#xff0c;对外表现出连续的存储方式。 本节将…

php好的mvc中index方法,创建一个mvc应用目录架构并创建入口文件index.php

摘要&#xff1a;<?php require vendor/autoload.php;require pig/Base.php;define(ROOT_PATH,__DIR__./);$configrequire pig/config.php;$queryStr$_S<?php require vendor/autoload.php;require pig/Base.php;define(ROOT_PATH,__DIR__./);$configrequire pig/confi…

C语言对mysql数据库的操作

C语言对mysql数据库的操作 原文:C语言对mysql数据库的操作这已经是一相当老的话题。不过今天我才首次使用&#xff0c;把今天的一些体会写下来&#xff0c;也许能给一些新手带来一定的帮助&#xff0c;更重要的是供自己今后忘记的怎么使用而进行查阅的&#xff01; 我们言归正传…