云开·全站体育app登录 2024某能源安全比赛writeup

发布于:25-02-11 播放次数:

40位md5 admin_40位md5 admin_40位md5 admin

顺序

2024年能源安全竞争是实施国家网络力量的战略思想,实施Xi Jinping关于提高国家能源安全和保证能力,提高能源行业的网络安全水平的重要指示,并增强培训和技术能源网络安全才能的交换。

这场比赛具有高度的专业精神。通过对近年来国际领域经常发生的能源领域重大恶性事件的深入分析,我们将逆转构建模拟场景。竞争分为能源工业控制安全分析,能源安全杂项以及能源数据安全分析,能源行业加密技术,能源反向工程,能源网络系统安全和其他类别。玩家需要使用安全技能分析,计划分析和其他手段来获得标志。通过这项竞争,可以很好地证明网络安全人员的知识。基本技能。

1。能源工业控制安全分析

1。Goooooose-a

当工业控制设备通信时,它将传输一些异常数据。请根据交通包进行分析。

1)使用Wireshark打开交通数据包并发现有不同框架大小的鹅协议数据包

40位md5 admin_40位md5 admin_40位md5 admin

2)如果过滤器框架大于202,则Alldata项目大于3,请选择最后一个项目并将其拼写出来。

40位md5 admin_40位md5 admin_40位md5 admin

3)拼接后,发现它可能是多层基础编码数据,解决问题的代码(Python)

# author: anyu
# -*- coding: utf-8 -*-

import pyshark
import base64
import re
import base91

def baseDec(text,type):
if type == 1:
return base64.b16decode(text)
elif type == 2:
return base64.b32decode(text)
elif type == 3:
return base64.b64decode(text)
elif type == 4:
return base64.b85decode(text)
else:
pass

def detect(text):
try:
if re.match("^[0-9A-F=]+$",text.decode()) is not None:
return 1
except:
pass

try:
if re.match("^[A-Z2-7=]+$",text.decode()) is not None:
return 2
except:
pass

try:
if re.match("^[A-Za-z0-9+/=]+$",text.decode()) is not None:
return 3
except:
pass

try:
if re.match("^[A-Za-z0-9$%()*+,-./:;?@[\]^_`{|}~]+$",text.decode()) is not None:
return 4
except:
pass

try:
if re.match("^[^-\']+$",text.decode()) is not None:
return 5
except:
pass

return 5

def autoDec(text):
floor = 0
while True:
try:
code = detect(text)
text = baseDec(text,code)
floor += 1
print("第{0}层:\n".format(floor),text)
if not text:break
except:
break

if __name__ == "__main__":
cap = pyshark.FileCapture('data.pcapng')
content = ""
for pkt in cap:
if 'GOOSE' in pkt:
items_count = int(pkt.goose.allData)
if items_count > 3:
content +=chr(pkt.goose.allData.binary_value[-1]) #选取goose中最后一个字段的数据,将其拼接
print("Content:\n", content)
cap.close()
# 测试多层base编码
content = content.encode()
autoDec(content)

40位md5 admin_40位md5 admin_40位md5 admin

标志{CBE5378615C03732}

2。无法找到IP-A

某个石油仓库系统工程师正在用双网卡修理DCS设备,但他不知道新网络模块的IP地址。请分析流量并帮助找到地址。他之前曾通过Web访问DCS控制器的一些状态信息。 。提交格式:flag {xx.xx.xx.xx}。

1)使用Wireshark打开交通包并过滤HTTP请求

40位md5 admin_40位md5 admin_40位md5 admin

2)我发现diag.htm页面中有IP

40位md5 admin_40位md5 admin_40位md5 admin

3)将其保存为HTM文件,打开它后可以看到第二个网卡的IP。

40位md5 admin_40位md5 admin_40位md5 admin

使用常规匹配IP,解决问题的代码(Python)


# author: anyu
# -*- coding: utf-8 -*-
import re

result = re.findall(b"(?:[0-9]{1,3}\.){3}[0-9]{1,3}", open("abb.pcapng","rb").read())
print(list(set(result)))

答案之一是操作的结果

标志{172.16.129.0}

3。鳍协议分析-A

如果请求的数据为:46494E530000001B00000000000000000000800000200640000FC00400102310000000001011,请分析和构建其响应数据。标志是响应数据(附件仅供参考)。提交格式:flag {xxx}。

1)使用Wireshark打开交通数据包并找到许多鳍协议数据包

40位md5 admin_40位md5 admin_40位md5 admin

2)在问题中搜索十六进制字符串,并且没有结果,然后搜索一些字符串内容

46494E530000001B000000020000000,可以找到一些请求

40位md5 admin_40位md5 admin_40位md5 admin

3)找到了Fins命令发送的878帧

40位md5 admin_40位md5 admin_40位md5 admin

879帧是鳍响应返回

40位md5 admin_40位md5 admin_40位md5 admin

4)分别提取上述两个帧并将其与问题的内容进行比较以获取规则

40位md5 admin_40位md5 admin_40位md5 admin

服务ID:E7ó40

目标节点编号:FBóFC

源节点号:0aó64

只需转到相应的一个即可。

标志{46494E53000000001600000000000000000000000000200FC00000064004001020000}

4。让我们运行PLC程序-A

标题描述:攻击者留下一个密码文本:u2fsdgvkx196pwxlpor49+g/ejxjckqkqlloruhqnihzq ==(rc4),需要通过PLC操作找到线索。提交格式:flag {xxx}。

1)下载的文件名是unity_pro8.0.zip,它被解压为Schneider PLC项目。使用Unity_Pro V8打开项目。

40位md5 admin_40位md5 admin_40位md5 admin

2)您可以使用仿真模式将项目转移到PLC

40位md5 admin_40位md5 admin_40位md5 admin

3)运行程序,将开始设置为1,最后一个值为-20416

40位md5 admin_40位md5 admin_40位md5 admin

4)解密RC4,键尝试20416,使用网页

40位md5 admin_40位md5 admin_40位md5 admin

或使用代码(Python)


# author: anyu
# -*- coding: utf-8 -*-
from Crypto.Cipher import ARC4
import base64
import hashlib

if __name__ == "__main__":
text = b'U2FsdGVkX196pWxlPoR49+G/eJXJcKqLOruhqNiHzQ=='
data = base64.b64decode(text)

salt = data[0x08:0x10]
password = b'20416'+ salt
key = b''
tmp = b''
key_size = 8
m = hashlib.md5()

for i in range(key_size//4):
if tmp:
m.update(tmp)
m.update(password)
tmp = m.digest()
m = hashlib.md5()
key += tmp
enc = ARC4.new(key)
res = enc.decrypt(data[0x10:])
print(res)

标志{uddi40lkg}

5。decproj-a

攻击者攻击了进入工厂的上部计算机后,他通过Webshel​​l传输了PLC配置项目。请尝试提取和分析项目的密码。标志是密码的MD5值。

1)使用Wireshark打开流量数据包开yun体育app官网网页登录入口,发现它是基本64编码的数据,这很可能是冰蝎子。

40位md5 admin_40位md5 admin_40位md5 admin

2)导出第一个帖子软件包内容,右键单击以选择“导出分组的字节流”,文件名为“ 1.bin”

40位md5 admin_40位md5 admin_40位md5 admin

3)将代码(Python)写成爆炸键,123456


# author: anyu
# -*- coding: utf-8 -*-
import base64
import hashlib
import json
from Crypto.Cipher import AES

def unpad(s):
return (s[:-ord(s[len(s) - 1:])])

def d64(input_msg):
return base64.b64decode(input_msg)

def createkey(password):
m2 = hashlib.md5()
m2.update(password)
md5_hex = m2.hexdigest()
key = md5_hex[:16].encode()
return key

if __name__ == '__main__':
with open("1.bin","rb") as f:
input_msg = f.read()
f.close()

password_list = [b"admin", b"123456"] #这里填写弱口令字典
for password in password_list:
try:
key = createkey(password)
a = AES.new(key, AES.MODE_ECB)
plain_text = unpad(a.decrypt(d64(input_msg[:-1])))
if b"@error_reporting(0)" in plain_text:
print("password:", password)
exit(0)
except Exception as e:
print(e)

4)通过密钥,解密所有流量,找到下载文件project.zip的流量。减压后,这是一个Delta PLC项目。它使用ispsoft打开。提示它输入密码。

40位md5 admin_40位md5 admin_40位md5 admin

4)随便输入您的密码,它将提示您的密码错误。

40位md5 admin_40位md5 admin_40位md5 admin

5)在反向时找到密码比较的功能,密码为d3ltaplc

40位md5 admin_40位md5 admin_40位md5 admin

6)输入密码以正常打开程序

40位md5 admin_40位md5 admin_40位md5 admin

flag {ED667F192A8AD21DA9F73624A3FCECB7}

2.能源安全杂项

1。modbus-a

奇怪的流量

1)使用Wireshark打开流量数据包并发现有一个Modbus协议数据包

40位md5 admin_40位md5 admin_40位md5 admin

2)跟踪TCP流,并模糊地看到字符串以“ flag {”开头

40位md5 admin_40位md5 admin_40位md5 admin

3)写一个脚本(Python)以提取可见字符内容


# author: anyu
# -*- coding: utf-8 -*-
import os

f = os.popen(r'"C:\Program Files\Wireshark\tshark.exe" -r .\modbus.pcapng -Y "modbus" -T fields -e modbus.regval_uint16', "r")
data_list = f.read().split("\n")
f.close()

result = ""
for data in data_list:
if data:
d0,d1 = data.split(",")
if int(d0) < 128:
result += chr(int(d0))
if int(d1) < 128:
result += chr(int(d1))
print(result)

flag {EE92722F-973C-46C9-A05E-D5E9F3540529}

2。浏览器-A

浏览器?

1)下载文件后,发现它是一个内存映像,您需要使用VOL进行证据操作

40位md5 admin_40位md5 admin_40位md5 admin

2)使用词flag.txt使用最初的索引包裹,但您需要一个密码

3)当地最重要的是找到密码。提示浏览器是找到与浏览器相关的内容

没有浏览历史记录

无浏览器相关的文件

Microsoft \ Windows \ shell \ sosidations \ urlassociations \ http \ userChoice”

注册表中的默认浏览器配置是密码,这更令人困惑。

40位md5 admin_40位md5 admin_40位md5 admin

1)自提示浏览器以来,请搜索所有浏览器字符串并将其保存为密码字典以进行爆炸

40位md5 admin_40位md5 admin_40位md5 admin

2)写突发代码(Python)


# author: anyu
# -*- coding: utf-8 -*-
import pyzipper

if __name__ == '__main__':
pwd_list = open(password.txt","rb").readlines() # 密码字典
with pyzipper.AESZipFile(flag.zip', 'r', compression=pyzipper.ZIP_DEFLATED, encryption=pyzipper.WZ_AES) as extracted_zip:
for pwd in pwd_list:
try:
pwd = pwd.strip(b"\n")
extracted_zip.extractall(".", pwd=pwd)
print("解压成功,密码是:%s"%(pwd))
exit()
except Exception as e:
print(e)

flag {e3ed8aa2-68d4-4cc8-a664-1f3fd8136325}

iii。能源数据安全分析

1。结构化数据分类和分层识别-A

问题:请从给定的PCAP软件包中传输的excel文件,名为“ Test.xlsx”,名为“ Transfer_info.pcap”。 Excel文件中的第一页页面中有几列数据,包括五个敏感信息,例如ID号,驾驶执照号码,银行卡号,MAC地址和电子邮件地址。请确定包含上述五个敏感信息的列,以及相应的正确敏感信息占50%以上,然后根据数据分类和“数据分类和分级规则”中的数据分类和分级确定每个敏感信息的数据分类。 xlsx”。kaiyun.ccm,数据级以及列的数据分类和数据级别。然后,识别结果以“问题描述”的顺序和格式构建,并计算答案的MD5值,并将答案的MD5值提交给平台。分离器“ - ”,“ _”和“;”在答案中都是英语字符,答案以英语半隆结尾。

1)使用Wireshark打开流量包,导出第一个返回软件包内容,右键单击以选择“导出分组字节流”,文件名是“ 1.xlsx”

40位md5 admin_40位md5 admin_40位md5 admin

2)打开Excel文件

40位md5 admin_40位md5 admin_40位md5 admin

3)由于每个类别都有2列,根据问题的要求,请过滤正确和更高的列。

40位md5 admin_40位md5 admin_40位md5 admin

4)C1; C2; C3; C5; C7是正确的数据,然后根据数据分类规则,相应的数字为

C1_1-1-5-1_3; C2_1-1-5-1_3; C3_1-1-1-1_3; C5_1-1-1-2_3; C7_1-1-1-1-3-1_2;

标志{BD8C4EE3E25545B16EB3622378B2A95A}

4。能源行业的加密技术

1。找到钥匙-A

下载压缩软件包key.zip

1)解压缩压缩软件包,发现它是一张图片。图片可以打开,但这是一个腐败提示,这可能是图片的造影。

40位md5 admin_40位md5 admin_40位md5 admin

2)使用Binwalk分析文件并发现图片中隐藏了一个ZIP软件包

40位md5 admin_40位md5 admin_40位md5 admin

3)减压后的标志

4)使用十六进制工具winhex打开文件标志。内容是未知数据,例如某种加密数据。

5)然后使用Winhex打开图片并找到E和N的值。然后这个问题是RSA解密的

40位md5 admin_40位md5 admin_40位md5 admin

6)分解n,因为n的值不大,首先将n转换为十进制,然后使用网站,并查询将n分解为p和q

40位md5 admin_40位md5 admin_40位md5 admin

7)写代码(Python)


# author: anyu
# -*- coding: utf-8 -*-
import gmpy2,rsa

e = 65537
p = 172885878211796787522220685199694830877
q = 336864880216429367305541498622715085359
n = p * q

phi = (p-1)*(q-1)

d = gmpy2.invert(e,phi)

key = rsa.PrivateKey(n, e, int(d), p, q)
with open("flag.enc", "rb+") as f:
f = f.read()
print(rsa.decrypt(f, key))

标志{ed22321e9ae1ca8}

2。seeouagain-a

找到的标志,标志格式为标志{xxx}

1)解压缩压缩套件,发现这是一张图片。我看不到任何线索。

40位md5 admin_40位md5 admin_40位md5 admin

2)使用Binwalk分析文件并发现图片中隐藏了一个ZIP软件包,因此此问题是图片隐含的写作

40位md5 admin_40位md5 admin_40位md5 admin

3)提取ZIP软件包并提示您需要输入密码

40位md5 admin_40位md5 admin_40位md5 admin

4)由于它是图片隐化,因此您可以修改图像大小。使用010编辑器查找宽度和高度,并尝试使其更大。

40位md5 admin_40位md5 admin_40位md5 admin

5)尝试增加高度后,密码出现在底部的白色区域中

40位md5 admin_40位md5 admin_40位md5 admin

6)解开旗帜后,有一些base64编码内容。直接解开它后,有一些没有旗帜的歌词。

40位md5 admin_40位md5 admin_40位md5 admin

7)尝试base64隐式写作


# author: anyu
# -*- coding: utf-8 -*-
import base64

b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

with open('flag.txt', 'rb') as f:
bin_str = ''
flag = ''
for line in f.readlines():
if len(line) > 1:
print(line)
stegb64 = str(line, "utf-8").strip("\n")
rowb64 = str(base64.b64encode(base64.b64decode(stegb64)), "utf-8").strip("\n")
offset = abs(b64chars.index(stegb64.replace('=', '')[-1]) - b64chars.index(rowb64.replace('=', '')[-1]))
equalnum = stegb64.count('=')
if equalnum:
bin_str += bin(offset)[2:].zfill(equalnum * 2)
print(bin(offset)[2:].zfill(equalnum * 2))
print(bin_str)
for i in range(0, len(bin_str), 8):
flag += chr(int(bin_str[i:i + 8], 2))
print(flag)

标志{da6ac101b05b6974}

5。能源反向工程

1。EZSYS-A

您在测试期间进入了核电站的控制终端,发现这里有一个秘密需要通过反向获得。

1)下载标题后,是SYS驱动程序文件

2)使用IDA打开SYS文件并找到有关标志的字符串

40位md5 admin_40位md5 admin_40位md5 admin

3)我发现包含标志的日志将在末尾打印出来,因此只要系统启动时禁用驱动程序,只要加载系统

40位md5 admin_40位md5 admin_40位md5 admin

4)命令开始和停止服务

创建服务

开始服务

停止服务

5)使用debugview查看包含标志的日志

40位md5 admin_40位md5 admin_40位md5 admin

标志{97E45A19-624D-3C47-BC17-57F1C3BCBB26}

2。easy_re-a

反向分析程序中的算法。提交格式:flag {xxx}。

1)这个问题是一个相反的问题,EXE程序,首先检查外壳云开·全站体育app登录,似乎是VMP?但是在本节中有UPX

40位md5 admin_40位md5 admin_40位md5 admin

2)随意输入错误的标志,提示重试

3)使用IDA打开程序。如果分析太大,则较慢。您可以关闭分析。

40位md5 admin_40位md5 admin_40位md5 admin

4)使用Shift+F12搜索与标志相关的字符串,没有结果

40位md5 admin_40位md5 admin_40位md5 admin

5)使用X64DBG进行调试,输入OEP后,搜索当前的模块字符串

40位md5 admin_40位md5 admin_40位md5 admin

6)我发现字符串的前两行是可疑的,对应于IDA代码

40位md5 admin_40位md5 admin_40位md5 admin

7)IDA交叉引用,pepspile,sub_140001070()就像一个比较功能

40位md5 admin_40位md5 admin_40位md5 admin

8)sub_140001000()是解密功能

40位md5 admin_40位md5 admin_40位md5 admin

9)分析算法并简单地计算,其中一个相应的片段打印出错误的字符串

好工作

再试一次

10)按Shift+E提取sub_14000101070()中的数组

40位md5 admin_40位md5 admin_40位md5 admin

11)写代码(Python)


# author: anyu
# -*- coding: utf-8 -*-

table = [
0x04, 0x0E, 0x03, 0x05, 0x19, 0x26, 0x50, 0x53, 0x51, 0x23,
0x52, 0x20, 0x56, 0x21, 0x27, 0x54, 0x56, 0x55, 0x52, 0x56,
0x51, 0x57, 0x51, 0x21, 0x57, 0x56, 0x55, 0x54, 0x52, 0x20,
0x24, 0x24, 0x55, 0x5A, 0x57, 0x26, 0x5B, 0x1F, 0x00, 0x00
]

for i in range(38):
table[i] ^= 0x62
print(bytes(table))

标志{D213A0B4CE64704353C54760BFF785D9}

6。能源网络系统安全

1。testjava-a

由于某个燃料公司的Web测试服务器向Internet开放,因此部署在服务器上的测试程序受到攻击,从而导致对服务器的恶意控制。

1)首先访问URL后,只有一个提示可以登录

40位md5 admin_40位md5 admin_40位md5 admin

2)进入随机路径后,您可以知道它是从Springboot框架中的,但您仍然不知道该问题的意图

40位md5 admin_40位md5 admin_40位md5 admin

3)后来,我给了提示,并释放了罐子包,并与Jadx打开了它以找到路线。根目录具有一个令牌字段,可能有点可疑。

40位md5 admin_40位md5 admin_40位md5 admin

4)输入解析令牌字段的函数parseusernmaebytoken(),发现它是JWT验证方法

40位md5 admin_40位md5 admin_40位md5 admin

5)输入getusernmaebyobject()函数,发现有一个readObject,可能会导致挑选。

40位md5 admin_40位md5 admin_40位md5 admin

6)构建JWT标头,您可以参考它

使用小数点分开分离的内容并编码base64

7)找到避难所利用链,发现有CC4

40位md5 admin_40位md5 admin_40位md5 admin

8)直接使用ysoserial工具生成必不可少的内容和base64编码,您可以在这里反弹shell

9)写一个POC并使用burpsuite包装


GET / HTTP/1.1
Host: x.x.x.x
Token: 构建的JWT内容
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: clos

flag {ufgqwitxpgcdemsmxc7ltbh5weaov403}