buuctf [网鼎杯 2020 朱雀组]phpweb
发现可以直接获取我们的时间,并且每五分钟刷新更新一次,大致意思就是利用系统时区设置,最重要的是应该是这个网页通过php 里的data()函数来获取当前我们的时间,并且在网页源代码中也标出来了,应该算是提示。
并且发现 通过post方式 给$func
传值为 data
$p
传值为Y-m-d h:i:s a
data()函数格式化时间用的
所以就可以 用system() 函数命令执行了 但是肯定不行 被河蟹了
发现随便输入时 会爆出call_user_func()函数 这个函数简单来说就是用第一个输入值作为回调函数 第二个输入为第一个回调函数的参数
直接使用file_get_contents() 本来想直接爆出flag文件的内容 但是命名被改为别的形式了 呢就爆一下index.php看一下黑名单
1 | <?php |
看到类就想到反序列化漏洞 将类中的属性值改为我们可以恶意操作的值 然后给$func
传反序列化函数,给p
传我们的序列化结果。
思路就是直接反序列化将原本post值修改 不通过黑名单筛选
本地构造:
1 |
|
构造payload:func=unserialize&p=O:4:"Test":2:{s:1:"p";s:4:"ls /";s:4:"func";s:6:"system";}
发现并没有flag文件 所以只能通过find指令寻找了 这里省略 我这里find找不出来没有回响 环境有问题
最后构造payload:func=unserialize&p=O:4:"Test":2:{s:1:"p";s:22:"cat /tmp/flagoefiu4r93";s:4:"func";s:6:"system";}