NewStar新生赛w2wp

本文最后更新于:2023年10月16日 上午

NewStar新生赛W2部分wp

$\mathcal{Author:CoolWind}$

Misc

0x01 新建Word文档

打开doc文件之后发现一段新佛曰加密,想要直接复制发现好像复制不了。因为doc文件可以拆成zip文件,因此将后缀改成zip之后解压。

word文件夹中找到document.xml文件,即为存储word文档中内容的文档。

用浏览器打开之后复制,用新佛曰解密网站解密即可获得flag。

0x02 永不消逝的电波

一道很基础的摩斯电码题,拿到wav文件之后,放到Audacity里面看音频图,手抄摩斯电码,然后扔到CypherChef里面进行解码,得到flag。

0x03 1-序章

打开文件之后发现是时间盲注的log文件,因此需要通过正则字符串对其进行处理。

通过搜索找到一个处理时间盲注log文件的脚本,简单的进行一些修改。

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
import urllib.parse
import re

f = open("access.log", "r", encoding="gb18030", errors="ignore")
lines = f.readlines()
flag_ascii = {}
time1 = -1
Ascii1 = -1
flag = ""
for line in lines:
if len(line) > 2:
request = urllib.parse.unquote(urllib.parse.unquote(line))
matchObj = re.search(r"20/Aug/2023:00:(\d+):(\d+)", request)
match2 = re.search(r",(\d+),1\)\)=(\d+)", request)
time = int(matchObj.group(2))
Ascii = int(match2.group(2))
if Ascii1 == -1:
Ascii1 = Ascii
if time1 == -1:
time1 = time
if time - time1 >= 3 or (time < time1 and time + 60 - time1 >= 3):
flag += chr(Ascii1)
time1 = time
Ascii1 = Ascii

print(flag)

通过分析log可知,成功注入的点时间差为3s以上,故判断参数为大于等于3s,同时考虑夸分钟的情况,最后得到flag。

0x04 base!

打开之后发现一堆base加密后的结果,直接解密得到一段很奇怪的看似完整的文字,鉴定为base64隐写,直接借鉴一个脚本进行解密。

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
41
42
43
44
# base64隐写
import base64


def get_diff(s1, s2):
base64chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
res = 0
for i in range(len(s2)):
if s1[i] != s2[i]:
return abs(base64chars.index(s1[i]) - base64chars.index(s2[i]))
return res


def b64_stego_decode():
file = open("flag.txt", "rb")
x = "" # x即bin_str
lines = file.readlines()
for line in lines:
l = str(line, encoding="utf-8")
stego = l.replace("\n", "")
# print(stego)
realtext = base64.b64decode(l)
# print(realtext)
realtext = str(base64.b64encode(realtext), encoding="utf-8")
# print(realtext)
diff = get_diff(stego, realtext) # diff为隐写字串与实际字串的二进制差值
n = stego.count("=")
if diff:
x += bin(diff)[2:].zfill(n * 2)
else:
x += "0" * n * 2

i = 0
flag = ""
while i < len(x):
if int(x[i : i + 8], 2):
flag += chr(int(x[i : i + 8], 2))
i += 8
print(flag)


if __name__ == "__main__":
b64_stego_decode()

最后可以得到一串base64加密。

CypherChef解码之后得到flag。

0x05 WebShell的利用

打开得到index.php,打开之后发现长串加密文件,考虑为多重套娃解密,直接写解密脚本。

1
2
3
4
5
6
7
8
<?php
for ($i=0; $i < 9; $i++) {
$x=str_rot13(convert_uudecode(str_rot13(base64_decode($x))));
preg_match_all("/base64_decode\('([^']+)'\\)/",$x,$arr);
$x=implode($arr[1]);
}
echo(str_rot13(convert_uudecode(str_rot13(base64_decode($x)))));
?>

其中$x变量是密文。由于解密之后是一行eval解密函数加上密文,因此需要通过正则表达式匹配将其提取出来,之后进行解密。

最后可以得到参数。

通过POST传参可以直接RCE,构造如下,得到flag。

Web

0x01 游戏高手

发现是一个打飞机的游戏,打开网络抓包之后发现一个js文件,找到一个名为gameover的游戏结束函数,发现是构造了一个POST请求。

直接通过burp发包可以得到flag。

0x02 include0。0

include注入,通过php伪协议绕过。

由于过滤掉了baserot加密,因此可以使用convert.iconv.utf-8.utf-16be进行读取,得到flag。

0x03 ez_sql

很好sqlmap,使我的靶机旋转。

上sqlmap没想到能直接扫到注入点,一把梭不解释。

0x04 Unserialize?

一眼反序列化,通过构造序列化内容。

同时通过审阅代码可以知道过滤了cat等函数,通过引号绕过。

先构造ls /爆出文件目录之后直接读取即可。

0x05 Upload again!

过滤<?同时后端识别文件后缀的绕过,因此通过utf-7.htaccess进行绕过。

首先传入utf-7之后的一句话木马。

然后传入.htaccess文件,令传入的1.png文件通过php的方式进行解析,同时进行utf-7解码。

然后通过蚁剑直接进行连接,拿到flag。

0x06 R!!C!!E!! *赛后复现

由于BUUCTF平台有流量限制,因此刚开始扫的时候全是429,在通过-t 2 -s 0.2限制了发包速度以及线程之后才能进行正常扫描。(图中为-t 3,仍然会有429)

扫出来.git文件泄露。

通过GitHack进行重构可以得到bo0g1pop.php文件,发现为无参数RCE。

通过构造如下文件头进行flag读取。

star参数中传入的函数意义如下:

getallheaders():获取请求包报头的所有Hearder。

array_reverse():构造一个逆序的数组。

pos():读取数组中指针当前位置的内容,从第一项开始。

因此在报头的最后添加一个X-Forwarder-For,其内容为cat /f*进行通配,并且报头名字可以改变。然后将其变成第一位,并且读取它的内容,通过eval执行,故这样可以进行注入。


NewStar新生赛w2wp
http://cool-wind.top/2023/10/16/NewStar新生赛w2wp/
作者
CoolWind
发布于
2023年10月16日
许可协议