找回密码
 立即注册
首页 业界区 安全 萌新通过[网鼎杯 2020 朱雀组]phpweb对php反序列化的进 ...

萌新通过[网鼎杯 2020 朱雀组]phpweb对php反序列化的进一步了解

狭宁 6 天前
作为一个学习ctf时间不长的萌新,之前所做的反序列化题目都是一知半解,只知道这种题目都是一堆class,找eval当链尾,然后组成pop链最后有个执行unserialize的地方,这种题才是php反序列化题目。本题作为一个简单的变式,对我对反序列化的理解有很大的帮助。
首先题目是一个不停刷新的页面,buu靶场没法dirsearch扫只能抓包看看有什么信息,发现post传了两个参数,func=data&p=Y-m-d h:i:s a,这里就可以猜测func是调用的函数名,p是函数的参数,传func=system&p=ls /回显hacker,显然是被过滤了,改变参数仍然回显hacker,那么过滤的就应该是函数名。我们利用文件读取函数来读源文件源码
func=readfile&p=index.php
成功读到源码
  1. [/code][align=center] 1.gif [/align]
  2. 简单进行代码审计,发现gettime函数就是一个执行命令的函数,要给call_user_func函数传func和p参数,func就是要用的函数名,p是参数。然后一个test类里面有gettime函数,两个传参,两个判断后执行gettime
  3. 首先只利用最后两个判断执行命令肯定是行不通的,因为黑名单几乎把所有能用的执行命令的函数全部过滤了。所以这里就要用到反序列化,在最后两个判断中利用第二个gettime函数来unserialize即可。
  4. [code]
复制代码
2.gif

传入
  1. func=unserialize&p=O:4:"Test":2:{s:1:"p";s:4:"ls /";s:4:"func";s:6:"system";}
复制代码
3.gif

成功执行system('ls /');
而根目录没有flag文件,环境变量中也没有找到,可以用find命令来找名字中带有flag的文件
  1. system("find / -name *flag*")
复制代码
4.gif

找到其中最可疑的一个,cat打开拿到flag

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册