您当前的位置: 首页 >  php

yu22x

暂无认证

  • 2浏览

    0关注

    109博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

bestphp reveng

yu22x 发布时间:2020-05-28 20:35:30 ,浏览量:2

知识点: 利用soap触发ssrf session反序列化 call_user_func的使用 源码如下: #index.php

 

#flag.php

session_start();
echo 'only localhost can get flag!';
$flag = 'LCTF{*************************}';
if($_SERVER["REMOTE_ADDR"]==="127.0.0.1"){
       $_SESSION['flag'] = $flag;
   }

代码中的最后调用了$b函数,这肯定需要我们将$b替换成我们需要的函数, extract可以满足我们这个需求。 我们的目的很明确,就是用本地地址去访问flag.php,然后再读取session中的flag。 这里再说一下call_user_func($b);如果传入的参数,是数组,且数组的第一个值是类名或者对象名的话,就会把数组的第二个值,当做方法,然后执行。 虽然没有现成的可利用的类,但是我们可以使用php原生类。 SoapClient 是一个php内置的类,当__call方法被触发后,它可以发送HTTP和HTTPS请求。该类的构造函数如下:

public SoapClient :: SoapClient (mixed $wsdl [,array $options ])

如果我们传入call_user_func(array(‘SoapClient’,‘welcome_to_the_lctf2018’)),那么他就会调用SoapClient类的welcome_to_the_lctf2018方法,因为没有这个方法,所以就会自动调用__call()方法。完成发送http请求,

借鉴下其他大佬的poc


因为此时还是php引擎所以最后加| 在这里插入图片描述 访问完成之后会将我们刚才传的name中的值进行反序列化,生成soap类,即此时的session是个soap对象。 接下来就是去访问这个对象了,因为我们可以利用extract将b替换成我们想用的函数,所以可以通过 call_user_func()调用soapclient,并且触发他的__call方法访问flag.php 在这里插入图片描述 此时传过去的session中已经包含刚才访问flag,php中的内容了,用该session再次访问即可。 在这里插入图片描述

关注
打赏
1617522777
查看更多评论
立即登录/注册

微信扫码登录

0.0414s