tiny traffic

下载附件,得到一个流量包,wireshark打开分析流量,选择导出http对象,可以看到下面有flag,test,secret文件的压缩包,将其全部导出.

按照格式将压缩文件全部解压,最终得到三个文本,如图

发现test文本是一段代码,从第一行知道这是proto文件,proto是一种效率很高的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等,和语言无关,平台无关,拓展性很好,可以类比为XML。详细信息可以翻阅proto手册https://developers.google.com/protocol-buffers/docs/proto3?hl=zh-cn#generating,需要科学上网。
由此推测secret应该是由proto序列化后的文件,那么只要再将其反序列化后,就可以得到原本的数据了。test文件中定义了消息格式,首先要为test创建一个可用来操作的python文件。
首先安装proto环境,下载地址送上https://github.com/protocolbuffers/protobuf/releases,根据自己的生产环境选择对应的版本下载。笔者是win64版。
安装好后,将test文件更名为test.proto,和secret一起放在与protoc.exe同目录下。执行命令.\protoc.exe --python_out=. .\test.proto

上条命令将会生成一个python的模块文件test_pb2.py
有了这个文件,便可以对secret进行反序列化处理,下面给出脚本
执行前先安装protobuf模块pip inistall protubuf

1
2
3
4
5
6
import test_pb2
with open('secret','rb') as f:
data = f.read()
flag = test_pb2.PBResponse()
flag.ParseFromString(data)
print(flag)

最终得到secret反序列化后的结果

1
2
3
4
5
6
7
8
9
10
11
12
13
$ python -u "g:\terminal\protoc-3.17.0-win64\bin\1.py"
code: 200
flag_part_convert_to_hex_plz: 15100450 //看英文告诉我们把这数字转换成16进制
dataList {
flag_part: "e2345" //flag部分
junk_data: "7af2c" //垃圾部分,不要
}
dataList {
flag_part: "7889b0" //flag部分
junk_data: "82bc0" //垃圾部分,不要
}
flag_part_plz_convert_to_hex: 16453958 //把这数字转换成16进制
flag_last_part: "d172a38dc" //flag最后一个部分

把上面五个部分拼起来就是flag了,得到flag为CISCN{e66a22e23457889b0fb1146d172a38dc}

easy_resource

扫描得到.index.php.swo,读取源码

考虑利用原生类ReflectionMethod读取User类中的方法;
构建payload:?rc=ReflectionMethod&ra=User&rb=&rd=getDocComment,rb取a-z,burp尝试爆破

得到flag