LOADING

加载过慢请开启缓存 浏览器默认开启

ciscn

2023/6/2

misc


签到卡

Solved by gdd

进去之后是这样的一个打字机的界面,提示采用 python3 语言作为内容解释器,于是想着可以执行 python 里面的命令来获取 flag
输入 print(open(‘/flag’).read())
得到 flag:flag{c399eb83-5d65-4139-b4d5-9a072f28538f}

被加密的生产流量

Solved by **gdd
附件下载下来是一个.pcag 的流量包,放进 wireshark 里分析

发现这是工业里的一种传输方式 modbus 的流量,于是着重分析 modbus 的 tcp 流
首先使用 python 的 pyshark 库分析功能码,用到以下代码

import pyshark
def get_code():
     captures = pyshark.FileCapture("modbus.pcap")
     func_codes = {}
     for c in captures:
         for pkt in c:
             if pkt.layer_name == "modbus":
                 func_code = int(pkt.func_code)
                 if func_code in func_codes:
                     func_codes[func_code] += 1
                 else:
                     func_codes[func_code] = 1
     print(func_codes)
if __name__ == '__main__':
 get_code()

运行结果如下,发现它有 3 和 6 两个功能码,其中 3 用于读保持寄存器,6 用于预置单寄存器,两个都分析一遍

用以下的脚本把两个功能码里的内容读出来

import pyshark
def find_flag():
     cap = pyshark.FileCapture("modbus.pcap")
     idx = 1
     for c in cap:
         for pkt in c:
             if pkt.layer_name == "modbus":
                 func_code = int(pkt.func_code)
                 if func_code == 3:    #查找的功能码
                     payload = str(c["TCP"].payload).replace(":", "")
                     print("content[*] is " + payload)
                     print("{0} *".format(idx))
         idx += 1
def hex_to_ascii(payload):
 data = payload
 flags = []
 for d in data:
     _ord = ord(d)
     if (_ord > 0) and (_ord < 128):
         flags.append(chr(_ord))
 return ''.join(flags)
if __name__ == '__main__':
 find_flag()

在功能码 3 中得到了一长串数据:

发现这些数据里短的数据一直到 98 位的后四位字符都不同,于是就想到用 hex 解码,每行提取下来之后解得:MMYWMX3GNEYWOXZRGAYDA===

base32 解码得到:c1f_fi1g_1000

所以 flag 即为:flag{c1f_fi1g_1000}

pyshell

Solved by **gdd
nc 进去之后发现是一个 python 的命令行

试了一圈发现 import os ls 等都被过滤了,于是使用拼接字符串绕过,利用了短下划线会输出上一次输出的结果的特性拼接,然后 exec( _ ) 运行,如下图,运行 import os

同理我们也可以这样构造,从而执行 os.system(“ls”)

最后直接执行 os.system(“cat flag”)

得到 flag:flag{2858c7ad-10c5-42d3-9a09-8af51edc209a}