抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

前言

实力吐槽这次比赛

  • 初赛环境老是炸,最后30多分钟都炸了,答案都提交不了
  • 晋级塞,,题目也偶尔会出现断开的问题,,第二个web题,,竟然一开始直接返回空,后来又可以了??不知道是不是只有我遇到这个问题,,晕
  • 而且,,晋级赛竟然不是uuid式动态flag。。。。?

old

image.png

任意文件读取,不过flag.txt 读不了,但可以看 hint.txtsmali 字节码,提示了 fastjson 1.2.24

image.png

先读取本进程相关目录

image.png

/usr/local/run/start.jar 获取源码,IDEA打开分析

image.png

原来过滤了 flag ,怪不得读取不了

往反序列化方向,不过有waf

image.png

然后还有限制

image.png

这里卡了挺久,试了网上很多EXP,都不行

然后突然想起fastjson反序列化的原理

一般是需要别的库的配合,通过反射获取相关方法的

于是我一个个依赖找

image.png

搜了下 spring ,没有相关漏洞,但是在 tomcat dbcp 里刚好发现了可以利用,而且不用利用 rmi ldap 之类的

https://kingx.me/Exploit-FastJson-Without-Reverse-Connect.html

然后刚好用到 BCEL,HFCTF2021也刚好用到, 刚好复现过了,所以非常熟练 (

https://github.com/f1tz/BCELCodeman

编写 java poc,转换为 class 然后生成 BCEL

这样可以绕过waf的黑名单,即绕过了第1个challenge

还有2个 challenge,这个简单,就长度大于2000,然后需要包含 flag 关键字

这里直接把 /flag.txt 改一下名读取即可

image.png

image.png

try_js

审计源码

image.png

你要merge,那我可就不困了,明显的原型连污染

污染一下原型

image.png

即可成功登录

image.png

接下来,就没有然后了,,

image.png

除了输入黑名单以外的东西,都是直接断开连接,晕

image.png

emm 快结束了,,环境就可以了???

image.png

fuzz

image.png

.DS_Storemac的备份文件,有的小伙伴应该遇到过,就解压了mac的压缩包,莫名其妙多了这个文件

通过 shellme.php 得知 flag/var/www/flag

然后通过 y0u_w1ll_s3e_Me.txt 知道源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
classname = "SayHi";
$this->param = array("C", "T", "F", "E", "R");
$tmp = new $this->classname($this->param); }
public function __destruct()
{ if (strpos($this->param, 'flag') !== false || strpos($this->param, '?') !== false || strpos($this->param, '*') !== false)
{ die('You want to hack me?'); }
else
{ $text = new $this->classname($this->param); foreach ($text as $t) { echo ($t); } }
}
public function __wakeup()
{
$this->checkMethod = new Check;
if ($this->checkMethod->vaild($this->param) && $this->checkMethod->vaild($this->class))
{ echo ("You are a good man!"); }
else
{ die('You are a hacker?'); }
} }

class SayHi {
public $a;
public function __construct($a)
{ $this->a = $a; array_push($this->a, "HELLO"); return $this->a; }
}

class Check
{
public function vaild($code)
{
$pattern = '/[flag|file|!|@|#|$|%|^|&|*|=|\'|"|:|;|?]/i';
if (preg_match($pattern, $code))
{ return false; }
else { return true; }
} }

if (isset($_GET['p'])) {
unserialize($_GET['p']);
} else {
$v = new Verify;
}

也就是 y0u_w1ll_s3e_Me.php 的源码

就反序列化,,亿下,,就可以了,但时间不够了,,晕

评论