CTFSHOW Web259 SoapClient原生类的反序列化
index.php
看到该题目第一眼,大脑直接一个简单的想法就是通过访问flag.php添加X-Forwarded-For然后POST发送token数据。
但!在本题的环境当中,由于使用了Cloudflare代理导致,Cloudflare 会将 HTTP 代理的 IP 地址附加到这个标头,在两次调用array_pop后我们取得的始终是固定的服务器IP。
因此我们只能通过SoapClient原生类的反序列化来做该题目。
SoapClient采用了HTTP作为底层通讯协议,XML作为数据传送的格式,其采用了SOAP协议(SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息),其次我们知道某个实例化的类,如果去调用了一个不存在的函数,会去调用 __call 方法。下面我们一步步解释原理。
我们先用nc开启本地监听:我这里是mac电脑所以命令行是:nc -l 7799
然后运行下面的php代码即可。
观察nc监听的结果如下
我们创建对象的时候设置的参数‘uri’体现在第二个红箭头指向的地方,‘location’具体表现在POST和Host。
我们还可以控制参数User-Agent,通过创建对象的时候添加参数'user_agent'=>$u,具体看如下php代码
里面的换行我们用\r\n表示而不是\n\r。因为我们要以post方式提交一个参数token=ctfshow,所以Content-Type: application/x-www-form-urlencoded并Content-Length: 13\r\n\r\ntoken=ctfshow 。而这里的X-Forwarded-For:127.0.0.1,127.0.0.1,127.0.0.1是为了绕过那两次数组弹出元素。
结果如下
发现没问题的话,我们就可以反序列化该对象,url编码,提交参数获取flag即可。这里注意将location修改为和我们的题目相关。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步