今天一大早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相关推荐

  1. 缓存一致性协议和CPU缓存架构(MESI协议)、伪共享

    目录 简介 CPU高速缓存 为什么要有CPU高速缓存 局部性原理 缓存一致性 缓存一致性的要求 总线窥探 工作原理 窥探协议 一致性协议 MESI协议 总线事务 总线仲裁 总线锁定 缓存锁定 伪共享问 ...

  2. 蓝牙第一章:概述、无线技术协议和基带协议

    1.蓝牙技术的诞生与发展 1994年,爱立信公司为了在移动电话及其附件之间探求一种新的低功耗.低成本的空中接口,要能够去除连接移动电话与耳机.笔记本电脑及其它设备之间繁杂的线缆,更主要的目的则是分析有 ...

  3. TCP/IP协议族之运输层协议 ( UDP, TCP)

    UDP  User Datagram Protocol    用户数据报协议 TCP  Transmission Control Protocol    传输控制协议 UDP:向应用层提供无连接的.不 ...

  4. ssh协议是osi_TCP/IP协议和三次握手四次挥手

    计算机网络体系结构 在计算机网络的基本概念中,分层次的体系结构是最基本的.计算机网络体系结构的抽象概念较多,在学习时要多思考.这些概念对后面的学习很有帮助. 网络协议是什么? 在计算机网络要做到有条不 ...

  5. 基础知识--:before伪元素和:after伪元素

    http://book.51cto.com/art/201108/285688.htm 3.7  替换指定位置 大家都知道before和after是前.后的意思.但是奇怪的是,CSS中的:before ...

  6. 互联网协议 — UDP 用户数据报协议

    目录 文章目录 目录 UDP 协议 UDP Header UDP 协议 UDP(User Datagram Protocol,用户数据报协议),是一种无连接的.非可靠的传输层协议.换句话说,当 UDP ...

  7. 互联网协议 — HTTP 超文本传输协议

    目录 文章目录 目录 HTTP 协议的诞生 HTTP 协议 发展历程 HTTP/0.9 HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3 HTTP 请求报文 请求行 请求体(Reques ...

  8. rtp协议详解/rtcp协议详解

    1.简介 目前,在IP网络中实现实时语音.视频通信和应用已经成为网络应用的一个主流技术和发展方向,本文详细介绍IP协议族中用于实时语音.视频数据传输的标准协议RTP( Real-time Transp ...

  9. 【计算机网络】应用层 : 万维网 和 HTTP 协议 ( 万维网概述 | HTTP 协议特点 | HTTP 协议连接方式 | HTTP 协议报文结构 | HTTP 请求报文 | HTTP 响应报文 )

    文章目录 一.万维网概述 ★ 二.HTTP 协议 ( 超文本传输协议 ) ★ 三.HTTP 协议特点 ★ 四.HTTP 连接方式 ★ 五.HTTP 协议报文结构 六.HTTP 请求报文 ★ 七.HTT ...

最新文章

  1. mysql统计不及格科目_SQL语句 统计各个学生的不及格科目数量及不及格率 ,2条语句...
  2. XLSReadWriteII5使用参考
  3. linux动态链接库的使用,Linux动态库soname的使用
  4. 分布式事务?No, 最终一致性
  5. hdfs集群数据迁移:使用distcp命令
  6. mysql LOCK TABLES
  7. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期下跌2.77%
  8. linux文件替换命令sed使用
  9. makefile phony
  10. hnu2021小学期程序设计 棋盘
  11. 梦的解析 —— 梦知道答案
  12. Qtum手机钱包教程
  13. QCC3005 实现iphone手机banner显示电量图标【续】
  14. 11个非常炫酷的网页样式特效【附实现代码】
  15. CDH6.3.2安装部署
  16. python if用法
  17. OpenGL ES OpenGL WebGL EGL WGL 区别
  18. html前端使用高德地图入门教程,并在地图上标记位置
  19. 关于单应性矩阵的理解:Homography matrix for dummies
  20. WIN10升级后无线网卡被禁用解决办法

热门文章

  1. python中利用lxml模块解析xml文件报错XMLSyntaxError: Opening and ending tag mismatch
  2. linux内存管理 之 内存节点和内存分区(Zone)
  3. 《DDIA》读书笔记(一):可靠性、可扩展性、可维护性
  4. Tarjan无向图连通性
  5. sublime运行错误
  6. Vue 框架-02-事件:点击, 双击事件,鼠标移上事件
  7. Python并行编程(八):with语法
  8. zookeeper 集群安装
  9. 支付方式(2)——支付宝集成及使用
  10. 解决了一个遗留的Portlet奇怪问题