php 伪协议 lfi,php://伪协议(I/O)总能给你惊喜——Bugku CTF-welcome to bugkuctf
今天一大早BugkuCTF 的welcome to bugkuctf 就给了我一发暴击:完全不会啊。。。光看源码就发现不知道怎么处理了,于是转向writeup求助。结果发现这是一道非常有营养的题目,赶紧记录一下。
题目链接:http://123.206.87.240:8006/test1/
源码
要点很清晰,首先是三个变量用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解码一波,如图
hint.php
当然,这个内容肯定不太够,所以我们尝试看看index.php是否有其他的内容
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不就可以了吗?所以,最后一步只用把我们的想法用脚本付诸实践,以解决序列化的问题:
用phpstorm在本地跑出来的结果
随后传值
flag
总之,感觉自己的php还有很多要学,自己半吊子的自学还是差了口气。同时,php://用太多妙用了,日后有机会一定更新文章专门总结一下。
php 伪协议 lfi,php://伪协议(I/O)总能给你惊喜——Bugku CTF-welcome to bugkuctf相关推荐
- 缓存一致性协议和CPU缓存架构(MESI协议)、伪共享
目录 简介 CPU高速缓存 为什么要有CPU高速缓存 局部性原理 缓存一致性 缓存一致性的要求 总线窥探 工作原理 窥探协议 一致性协议 MESI协议 总线事务 总线仲裁 总线锁定 缓存锁定 伪共享问 ...
- 蓝牙第一章:概述、无线技术协议和基带协议
1.蓝牙技术的诞生与发展 1994年,爱立信公司为了在移动电话及其附件之间探求一种新的低功耗.低成本的空中接口,要能够去除连接移动电话与耳机.笔记本电脑及其它设备之间繁杂的线缆,更主要的目的则是分析有 ...
- TCP/IP协议族之运输层协议 ( UDP, TCP)
UDP User Datagram Protocol 用户数据报协议 TCP Transmission Control Protocol 传输控制协议 UDP:向应用层提供无连接的.不 ...
- ssh协议是osi_TCP/IP协议和三次握手四次挥手
计算机网络体系结构 在计算机网络的基本概念中,分层次的体系结构是最基本的.计算机网络体系结构的抽象概念较多,在学习时要多思考.这些概念对后面的学习很有帮助. 网络协议是什么? 在计算机网络要做到有条不 ...
- 基础知识--:before伪元素和:after伪元素
http://book.51cto.com/art/201108/285688.htm 3.7 替换指定位置 大家都知道before和after是前.后的意思.但是奇怪的是,CSS中的:before ...
- 互联网协议 — UDP 用户数据报协议
目录 文章目录 目录 UDP 协议 UDP Header UDP 协议 UDP(User Datagram Protocol,用户数据报协议),是一种无连接的.非可靠的传输层协议.换句话说,当 UDP ...
- 互联网协议 — HTTP 超文本传输协议
目录 文章目录 目录 HTTP 协议的诞生 HTTP 协议 发展历程 HTTP/0.9 HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3 HTTP 请求报文 请求行 请求体(Reques ...
- rtp协议详解/rtcp协议详解
1.简介 目前,在IP网络中实现实时语音.视频通信和应用已经成为网络应用的一个主流技术和发展方向,本文详细介绍IP协议族中用于实时语音.视频数据传输的标准协议RTP( Real-time Transp ...
- 【计算机网络】应用层 : 万维网 和 HTTP 协议 ( 万维网概述 | HTTP 协议特点 | HTTP 协议连接方式 | HTTP 协议报文结构 | HTTP 请求报文 | HTTP 响应报文 )
文章目录 一.万维网概述 ★ 二.HTTP 协议 ( 超文本传输协议 ) ★ 三.HTTP 协议特点 ★ 四.HTTP 连接方式 ★ 五.HTTP 协议报文结构 六.HTTP 请求报文 ★ 七.HTT ...
最新文章
- mysql统计不及格科目_SQL语句 统计各个学生的不及格科目数量及不及格率 ,2条语句...
- XLSReadWriteII5使用参考
- linux动态链接库的使用,Linux动态库soname的使用
- 分布式事务?No, 最终一致性
- hdfs集群数据迁移:使用distcp命令
- mysql LOCK TABLES
- TokenInsight:反映区块链行业整体表现的TI指数较昨日同期下跌2.77%
- linux文件替换命令sed使用
- makefile phony
- hnu2021小学期程序设计 棋盘
- 梦的解析 —— 梦知道答案
- Qtum手机钱包教程
- QCC3005 实现iphone手机banner显示电量图标【续】
- 11个非常炫酷的网页样式特效【附实现代码】
- CDH6.3.2安装部署
- python if用法
- OpenGL ES OpenGL WebGL EGL WGL 区别
- html前端使用高德地图入门教程,并在地图上标记位置
- 关于单应性矩阵的理解:Homography matrix for dummies
- WIN10升级后无线网卡被禁用解决办法